Форуми / National / Russian / Идеи / Развитие шаблонизатора (XTemplate 2.8.1)

12>>>

Dr2005alex
#1 02.10.2018 18:14

И пришла идея начать доработку текущего XTemplate.

И так, если коротко, выкладываю для тестов обновленный в некоторых местах XTemplate

Что изменилось:

  • PHP 7 не выдает ошибку  Using $this when not in object context (на 2.8.0  версии это есть)
  • Есть возможность передавать в вызов функции более одного динамического аргумента.

Для нового функционала и поддержки старого, пришлось ввести новый вид тега.

{CALL | функция | динамические аргументы через запятую | дополниельные функции}

Пример

{CALL|cot_url('page','id=$0%&alias=$1%')|PAGE_ID,PAGE_ALIAS|htmlspecialchars}

Как из примера видно, я отказался от метки $this.(но старый вариан с $this я оставил и он тоже работает через {PHP.MYTAG|function($this)})

В данном примере создается ссылка, где параметр $0% будет заменен на значение тега PAGE_ID, а $1% на значение тега PAGE_ALIAS. Далее, результат выполнения функции передается в дополнительную функцию htmlspecialchars

В динамических аргументах могут быть Теги и Глобальные переменные.

Пример

{CALL|cot_url('page','id=$0%&c=$1%')|PHP.pag.page_id,PHP.pag.page_cat}

$0% или $1% это порядковый номер динамического аргумента начиная с нуля. 

  • $0% - заменится значением PHP.pag.page_id
  • $1% - заменится значением PHP.pag.page_cat

Для тестов, просто разархивируйте файл. И замените текущий файл шаблонизатора cotemplate.php на файл из архива.

Удачных тестов! И может еще идеи у кого будут... милости просим делиться.

Файл: cotemplate_2.8.1.rar

 

WebKaa.ru - Cotonti Relax

Відредаговано: Dr2005alex (06.10.2018 21:40, 5 років тому)
prostogorod
#2 03.10.2018 10:12

Спасибо! Интересная идея! Буду тестировать...

Kopusha
#3 03.10.2018 20:02

То есть ничего старого не прекратит работать а просто появятся новые возможности?

Added 13 minutes later:

Сразу же отвалилась работа этого плагина (ошибки не бьет, но перестали кнопки показываться, я не рылся пока в коде, просто констатация) https://github.com/Freecer/freecer.net/tree/9ed2a2b190bafed2a02388785fee9d4d6ffe9eea/plugins/folioPagiButton


Відредаговано: Kopusha (03.10.2018 20:16, 5 років тому)
Dr2005alex
#4 04.10.2018 05:58
#43732 Kopusha:

То есть ничего старого не прекратит работать а просто появятся новые возможности?

Added 13 minutes later:

Сразу же отвалилась работа этого плагина (ошибки не бьет, но перестали кнопки показываться, я не рылся пока в коде, просто констатация) https://github.com/Freecer/freecer.net/tree/9ed2a2b190bafed2a02388785fee9d4d6ffe9eea/plugins/folioPagiButton

Было бы полезно узнать от чего отвалилось. Я естественно повторить ваш код не могу. Это биржа..

WebKaa.ru - Cotonti Relax
Kopusha
#5 04.10.2018 09:56

просто перестал генерировать в тпл https://github.com/Freecer/freecer.net/blob/9ed2a2b190bafed2a02388785fee9d4d6ffe9eea/plugins/folioPagiButton/folioPagiButton.setup.main.php#L11

 

вообще ничего. кода там 3 строчки и странно что перестало работать... вроде не должно... остальное пока что пашет.

Dr2005alex
#6 04.10.2018 10:45

Как вариант почистите кеш. 

WebKaa.ru - Cotonti Relax
Kopusha
#7 04.10.2018 17:06

кеш я чистил - не помогает

тут у меня скорее спортивный интререс - я в том куцом коде плагина не могу понять ЧТО не проходит, там нечему не работать) но факт - просто ничего не отображается в самом тпл. 

Dr2005alex
#8 04.10.2018 17:22
#43736 Kopusha:

кеш я чистил - не помогает

тут у меня скорее спортивный интререс - я в том куцом коде плагина не могу понять ЧТО не проходит, там нечему не работать) но факт - просто ничего не отображается в самом тпл. 

По идее правки были тока по вызову функции.

1) Есть просьба. Скажите какая версия PHP в у вас используется.

2) Откройте плиз файл шаблонизатора и поменяйте в 404 строке this на $this

return $var->evaluate($this);

Вот так будет. Отпишитесь, появилось ли все.

Ах да, версия движка какая?

 

WebKaa.ru - Cotonti Relax

Відредаговано: Dr2005alex (04.10.2018 17:29, 5 років тому)
Kopusha
#9 04.10.2018 17:29

PHP engine version 5.6.37

2 пункт сделал кеш почистил и не помогло

Нет функционала этого плагина и нет ошибок. При этом все остальное вроде как норм.

Added 2 minutes later:

Котонти и биржа самое последнее что есть. 

Added 1 minute later:

PHP engine version	5.6.37
Zend engine version	2.6.0
Interface between webserver and PHP	litespeed
Cotonti Version 0.9.19

 

Dr2005alex
#10 04.10.2018 17:34

Тогда еще один тест. Скачиваем последнюю версию котонти и берем оттуда шаблонизатор на свой сайт. (заменяем файл шаблонизатора) Смотрим все ли работает? Если работает то я постараюсь найти в чем проблема в моих правках. Если нет, то ваша версия движка несовместима.

WebKaa.ru - Cotonti Relax
Kopusha
#11 04.10.2018 17:39

Скачал дистрибут и заменил котемплейтпхп - появились ссылки на предыдущее и следующее фолио. 

https://ibb.co/g2PtPK
https://ibb.co/ksLBBz

Added 4 minutes later:

на час отойду

Dr2005alex
#12 05.10.2018 05:47

Ага понял, есть косяк. Надо менять подход. Посмотримс..

Ps Спасибо за тест.

WebKaa.ru - Cotonti Relax

Відредаговано: Dr2005alex (05.10.2018 06:01, 5 років тому)
Kopusha
#13 05.10.2018 06:16

yes

Dr2005alex
#14 06.10.2018 21:24

Обновил концепцию, и обновил файл и описание в первом посте. Можно тестить.

WebKaa.ru - Cotonti Relax
Kopusha
#15 08.10.2018 13:46

Пока все что работало со старым и с новым файлом работает. 

Added 2 weeks later:

Подскажите как использовать

Есть функция к примеру function cot_social_check_friend_plusmonth($userid, $friendid)

Как написать запрос?

{CALL|cot_social_check_friend_plusmonth('$0%','$1%')|PHP.usr.id,PHP.urr.user_id} как то так? Вроде бы так работает, но может что то усложнил?

Added 33 minutes later:

Вроде все работает идеально!

Дополню примерами

Было кастомная функция

/** Исключаем из запроса историй этого же юзера саму себя **/
function get_item_user_and_id($item_id){
   global $db, $db_folio;
        $string = '';
        
		if($item_id){
			$string = $db->query("SELECT item_id FROM $db_folio WHERE item_id=".$item_id)->fetchColumn();
			$string = (int)$string;
		}
        
		if($item_id){
			$iuser = $db->query("SELECT item_userid FROM $db_folio WHERE item_id=".$item_id)->fetchColumn();
			$string .= " AND item_userid = $iuser";
		}
		return $string;
}

{PRD_ID|get_item_user_and_id($this)|cot_getfoliolist('from-user', 4, 'item_id!=$this', "item_rating_real DESC")}

Стало одна строчка

{CALL|cot_getfoliolist('from-user', 4, 'item_id!=$0% AND item_userid=$1%', "item_rating_real DESC")|PRD_ID,PRD_OWNER_ID}

 


Відредаговано: Kopusha (25.10.2018 08:10, 5 років тому)

12>>>