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
Форумы портала PHP.SU :: Версия для печати :: Как запустить функцию в шаблоне?
Форумы портала PHP.SU » » Вопросы новичков » Как запустить функцию в шаблоне?

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

1. android - 23 Сентября, 2014 - 13:22:14 - перейти к сообщению
Добрый день, пишу шаблонизатор. Решил сделать использование разрешенных функций в шаблоне, например:

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.  
2. OrmaJever - 23 Сентября, 2014 - 13:32:34 - перейти к сообщению
глупости конечно Хм
запускайте функцию в шаблоне так
PHP:
скопировать код в буфер обмена
  1. <?=dump('test1','test2','test3'....)?>

этот вариант чем-то сложнее?
3. android - 23 Сентября, 2014 - 14:42:17 - перейти к сообщению
Тем что это доступно будет для пользователей! которые не разбираются в php
И взаимодействие напрямую с php запрещено
4. OrmaJever - 23 Сентября, 2014 - 14:55:55 - перейти к сообщению
android пишет:
Тем что это доступно будет для пользователей! которые не разбираются в php

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

ну да, им же так сложно открыть не шаблон, а index.php например и напакостить там.
5. caballero - 23 Сентября, 2014 - 14:58:31 - перейти к сообщению
если пользователь не разбирается в PHP то и с шаблонизатором не сможет работать
ну вставил он переменную а данные как?
и что такое вы хотите написать чего нет в смарти или твиге
6. android - 23 Сентября, 2014 - 15:37:55 - перейти к сообщению
caballero уважаемый, давайте вы не будете разглагольствовать умеет человек или нет. Смарти или твиг не подходят, нужен гораздо меньший функционал чем в них.

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

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

Надеюсь все понятно объяснил, мне нужно только то что я спросил в первом посту, остальной флуд не по теме - лесом Хм
7. OrmaJever - 23 Сентября, 2014 - 15:55:10 - перейти к сообщению
android пишет:
OrmaJever лучше бы подсказали как реализовать, а не писали чушь

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

Если же вы думаете написать шаблонизатор и разрешить людям делать свои шаблоны и без проверки их добавлять на сайт, то вы сильно ошибаетесь. Не добросовестный человек может испортить абсолютно всё, начиная от вёрстки заканчивая заканчивая синтаксическими ошибками
8. android - 23 Сентября, 2014 - 16:10:44 - перейти к сообщению
OrmaJever дело в том что это многопользовательская система управления сайтами, на данный момент реализован простой шаблонизатор, я бы хотел его расширить подобным функционалом.

А так как это многопользовательская система, соответственно много мини сайтов и у каждого свой владелец, поэтому я не могу позволить внедрять php в код. Да и все должно быть автоматизированно, захотел владелец - испортил, это его право, главное что бы серверный код был не доступен
9. OrmaJever - 23 Сентября, 2014 - 16:27:53 - перейти к сообщению
если идти конкретно по функциям парсите регуляркой имя и параметры, а затем проверяйте на доступной данной функции и вызывайте их call_user_func_array(). Но тут опять же всё зависит от разрешённых функций.
10. DelphinPRO - 23 Сентября, 2014 - 18:31:01 - перейти к сообщению
А как у вас работает шаблонизатор?
Насколько я понимаю, ваши шаблоны при первой обработке должны скомпилиться в нативный php-файл куда-нибудь в недоступную из-вне папку, а впоследствии запускаться будет именно он.
В таком случае, во время компиляции\парсинга вашего синтаксиса, просто проверяйте, присутствует ли php-функция в списке разрешенных, и соответственно, либо вставляете в скомпиленный файл, либо нет.
как именно это сделать, зависит от вашего парсера вашего же синтаксиса.
11. android - 24 Сентября, 2014 - 17:11:31 - перейти к сообщению
OrmaJever спасибо, частично вопрос решен. Но вот если запустить из строки substr и указать более 3 параметров то выводится ошибка которую я не могу перехватить исключением....


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

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

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

Как тут можно оптимизировать? Подскажите, если конечно вас не затруднит Улыбка
12. OrmaJever - 24 Сентября, 2014 - 18:54:01 - перейти к сообщению
android пишет:
содержимое шаблона я записываю в переменную, а потом уже с ним работаю.

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

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

и в итоге вопрос пришёл к моему второму комментарию )))
OrmaJever пишет:
запускайте функцию в шаблоне так
PHP:
скопировать код в буфер обмена
  1. <?=dump('test1','test2','test3'....)?>
13. android - 25 Сентября, 2014 - 09:36:50 - перейти к сообщению
OrmaJever а зачем вам ошибка? если я разрешил пользователям в шаблоне писать substr, var_dump..... в таком виде {{ substr() }} то если они передают больше чем разрешено переменных, то выводится ошибка вызванной функции в нашем случае: substr($var1, $var2, $var3, $var4) упс у вас лишний аргумент $var4
(Добавление)
OrmaJever пишет:
и в итоге вопрос пришёл к моему второму комментарию )))


Разрешить использование голого php в шаблонах простому пользователю - равносильно уничтожению всей серверной части cms
14. OrmaJever - 25 Сентября, 2014 - 11:27:23 - перейти к сообщению
android пишет:
то если они передают больше чем разрешено переменных

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

А без голого php это равносильно уничтожению всей клиентской части cms. В итоге cms так же не будет работать.
15. android - 25 Сентября, 2014 - 11:53:00 - перейти к сообщению
OrmaJever пишет:
А без голого php это равносильно уничтожению всей клиентской части cms. В итоге cms так же не будет работать.


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

 

Powered by ExBB FM 1.0 RC1