Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как запустить функцию в шаблоне?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
android
Отправлено: 23 Сентября, 2014 - 13:22:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Добрый день, пишу шаблонизатор. Решил сделать использование разрешенных функций в шаблоне, например:

CODE (php):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. $tpl->add_extensions('dump', 'var_dump');
  4.  
  5. class tpl {
  6.   function add_extensions( $name, $sys_name )
  7.         {
  8.                 if( ! function_exists( $sys_name ) )
  9.                 {
  10.                         return false;
  11.                 }
  12.  
  13.                 $this->config['extensions'][$sys_name] = $name;
  14.         }
  15. }


Но я не понимаю как потом циклом делать замену в шаблоне всех функций которые разрешены в массиве config['extensions'] ?

Пример как должно выглядеть в шаблоне test.view:
PHP:
скопировать код в буфер обмена
  1.  
  2. Проверка....  {{ dump('test1','test2','test3'....) }}
  3.  
 
 Top
OrmaJever Модератор
Отправлено: 23 Сентября, 2014 - 13:32:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




глупости конечно Хм
запускайте функцию в шаблоне так
PHP:
скопировать код в буфер обмена
  1. <?=dump('test1','test2','test3'....)?>

этот вариант чем-то сложнее?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
android
Отправлено: 23 Сентября, 2014 - 14:42:17
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Тем что это доступно будет для пользователей! которые не разбираются в php
И взаимодействие напрямую с php запрещено
 
 Top
OrmaJever Модератор
Отправлено: 23 Сентября, 2014 - 14:55:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




android пишет:
Тем что это доступно будет для пользователей! которые не разбираются в php

аа ну то есть в шаблонизаторах они разбираются? В каком классе учат основы шаблонизаторов?
android пишет:
И взаимодействие напрямую с php запрещено

ну да, им же так сложно открыть не шаблон, а index.php например и напакостить там.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 23 Сентября, 2014 - 14:58:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




если пользователь не разбирается в PHP то и с шаблонизатором не сможет работать
ну вставил он переменную а данные как?
и что такое вы хотите написать чего нет в смарти или твиге


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
android
Отправлено: 23 Сентября, 2014 - 15:37:55
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




caballero уважаемый, давайте вы не будете разглагольствовать умеет человек или нет. Смарти или твиг не подходят, нужен гораздо меньший функционал чем в них.

OrmaJever лучше бы подсказали как реализовать, а не писали чушь

Хорошо, хотите точно знать для чего?
Есть cms в ней необходимо реализовать шаблонизатор с минимальным функционалом который включает использование разрешенных функций на своем синтаксисе. Так как система на сервере, а с конечным редактированием шаблонов будут работать другие люди в веб-оболочке, необходимо запретить php

Надеюсь все понятно объяснил, мне нужно только то что я спросил в первом посту, остальной флуд не по теме - лесом Хм

(Отредактировано автором: 23 Сентября, 2014 - 15:41:56)

 
 Top
OrmaJever Модератор
Отправлено: 23 Сентября, 2014 - 15:55:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




android пишет:
OrmaJever лучше бы подсказали как реализовать, а не писали чушь

Суть форума не только в том что бы рассказать как что-то реализовать, но и помочь направить в правильную сторону. Мы тут не первый год сидим, и уже много видели и у каждого сложилось своё мнение по многим аспектам, и вот конкретно шаблонизаторы тут особо не одобряют, и на то есть свои причины. Скажу сразу я не подскажу как это реализовать потому что это не дело 5 минут, тут нужно многое обьяснять и давать примеры, а мне за это не платят. Если решили писать сами то сидите и думайте.
Почему я против
1) Шаблонизатор нужно писать, тестировать и править, это время, а время это деньги. Зачем тратить время если уже написано то что нужно.
2) Любой шаблонизатор замедляет код, и это не может радовать.
3) Подумайте о других людях которые будут разбирать и править ваш код. Лично по своему мнению могу сказать что последний раз когда я правил cms с шаблонизатором я даже подумывал забросить php совсем. Со стороны это выглядит так бредово.
4) Что именно вы хотите запретить для человека который пишет вёрстку?
а) Если вы боитесь что он вставит вредоносный код в шаблон то могу сказать что шаблоны прежде чем куда-то ставить нужно в любом случае проверять своими глазами, иначе даже если там будет шаблонизатор человек который его делал может запросто внизу страницы вывести ваш логин и пароль и т.д.
б) Если вы боитесь банальных ошибок с его стороны то могу так же сказать что все шаблоны от сторонних разработчиков нужно смотреть своими глазами, это займёт 5-10 минут.

Если же вы думаете написать шаблонизатор и разрешить людям делать свои шаблоны и без проверки их добавлять на сайт, то вы сильно ошибаетесь. Не добросовестный человек может испортить абсолютно всё, начиная от вёрстки заканчивая заканчивая синтаксическими ошибками


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
android
Отправлено: 23 Сентября, 2014 - 16:10:44
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




OrmaJever дело в том что это многопользовательская система управления сайтами, на данный момент реализован простой шаблонизатор, я бы хотел его расширить подобным функционалом.

А так как это многопользовательская система, соответственно много мини сайтов и у каждого свой владелец, поэтому я не могу позволить внедрять php в код. Да и все должно быть автоматизированно, захотел владелец - испортил, это его право, главное что бы серверный код был не доступен
 
 Top
OrmaJever Модератор
Отправлено: 23 Сентября, 2014 - 16:27:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




если идти конкретно по функциям парсите регуляркой имя и параметры, а затем проверяйте на доступной данной функции и вызывайте их call_user_func_array(). Но тут опять же всё зависит от разрешённых функций.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DelphinPRO
Отправлено: 23 Сентября, 2014 - 18:31:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




А как у вас работает шаблонизатор?
Насколько я понимаю, ваши шаблоны при первой обработке должны скомпилиться в нативный php-файл куда-нибудь в недоступную из-вне папку, а впоследствии запускаться будет именно он.
В таком случае, во время компиляции\парсинга вашего синтаксиса, просто проверяйте, присутствует ли php-функция в списке разрешенных, и соответственно, либо вставляете в скомпиленный файл, либо нет.
как именно это сделать, зависит от вашего парсера вашего же синтаксиса.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
android
Отправлено: 24 Сентября, 2014 - 17:11:31
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




OrmaJever спасибо, частично вопрос решен. Но вот если запустить из строки substr и указать более 3 параметров то выводится ошибка которую я не могу перехватить исключением....


DelphinPRO незнаю с правильной стороны я начал его делать или нет, но у меня собранный шаблон не записывается в отдельный файл.

Все по такому принципу:
Загрузили шаблон -> указали что в нем нужно изменить (на серверном уровне) -> компиляция с проверкой на существование данных которые подлежат замене в исходном шаблоне -> вывод на экран пользователя

Получается как вы поняли из вышесказанного, содержимое шаблона я записываю в переменную, а потом уже с ним работаю.

Как тут можно оптимизировать? Подскажите, если конечно вас не затруднит Улыбка
 
 Top
OrmaJever Модератор
Отправлено: 24 Сентября, 2014 - 18:54:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




android пишет:
содержимое шаблона я записываю в переменную, а потом уже с ним работаю.

ну да, учитывая что шаблоны в 21 веке имеют много вёрстки то даже 100 одновременных подключений будут выжирать много памяти...
android пишет:
то выводится ошибка

то есть написать её сюда в принципе не нужно? Мы ведь тут астрологи.
android пишет:
Как тут можно оптимизировать? Подскажите, если конечно вас не затруднит

и в итоге вопрос пришёл к моему второму комментарию )))
OrmaJever пишет:
запускайте функцию в шаблоне так
PHP:
скопировать код в буфер обмена
  1. <?=dump('test1','test2','test3'....)?>


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
android
Отправлено: 25 Сентября, 2014 - 09:36:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




OrmaJever а зачем вам ошибка? если я разрешил пользователям в шаблоне писать substr, var_dump..... в таком виде {{ substr() }} то если они передают больше чем разрешено переменных, то выводится ошибка вызванной функции в нашем случае: substr($var1, $var2, $var3, $var4) упс у вас лишний аргумент $var4
(Добавление)
OrmaJever пишет:
и в итоге вопрос пришёл к моему второму комментарию )))


Разрешить использование голого php в шаблонах простому пользователю - равносильно уничтожению всей серверной части cms
 
 Top
OrmaJever Модератор
Отправлено: 25 Сентября, 2014 - 11:27:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




android пишет:
то если они передают больше чем разрешено переменных

ну вот и первые грабли, нужно вместе с функциями хранить ещё и количество аргументов, а затем ещё для каждого аргумента хранить его тип и всё это парсить и парсить Подмигивание
android пишет:
Разрешить использование голого php в шаблонах простому пользователю - равносильно уничтожению всей серверной части cms

А без голого php это равносильно уничтожению всей клиентской части cms. В итоге cms так же не будет работать.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
android
Отправлено: 25 Сентября, 2014 - 11:53:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




OrmaJever пишет:
А без голого php это равносильно уничтожению всей клиентской части cms. В итоге cms так же не будет работать.


Если все разрешенные функции проверять на правильность то нет Улыбка В этом случае риск минимален, да и если человек накосячит отображаться это будет только на его сайте
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB