Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Assign varible in tpl function

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: Russian
View previous topic :: View next topic  
Author Message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Thu Nov 23, 2017 3:07 pm    Post subject: Assign varible in tpl function Reply with quote

Почему то не меняется переменная внутри функции smarty.


Code:
{$categories = [
   ['name' => 'cat319'],
   ['name' => 'cat320',
   'children' => [
         ['name' => 'cat321',
            'children' => [
               ['name' => 'cat322']
            ]
         ],
         ['name' => 'cat325']
      ]
   ],
   ['name' => 'cat323',
   'children' => [
         ['name' => 'cat324']
      ]
   ]
]}


{$test = 0}
{function name=categories_menu_left}

   {foreach $categories as $c}
      {$test = $test+1}
      {if $c.children}
         {categories_menu_left categories=$c.children}
      {/if}
   {/foreach}
   
{/function}

{categories_menu_left categories=$categories}

{$test|var_dump}


Результат получается int(0)
scope = parent global не помогает
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Thu Nov 23, 2017 4:35 pm    Post subject: Reply with quote

А должно меняться?
Учите азы PHP, раздел "область видимости переменных".
Если совсем коротко, то просто напишите плагин или модификатор, делающий нужную вам операцию и возвращающий значение.
Back to top
View user's profile Send private message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Thu Nov 23, 2017 6:12 pm    Post subject: Reply with quote

А что в ваших азах php нельзя объявить переменную глобальной?

Code:
$var = 1;
function test(){
   global $var;
   $var = 2;
}

test();
var_dump($var);


Я думаю scope global должно было реализовывать нечто подобное.
Про создание модификатора я прекрасно знаю. Но тут его нет возможности использовать иначе ломается вся модель. Данная функция мне нужна для отображения дерева
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Thu Nov 23, 2017 6:46 pm    Post subject: Reply with quote


Это на вас курсы Попова давят?

yr4ik wrote:
Данная функция мне нужна для отображения дерева

Для отображения дерева пишется кастомный рендер, либо используются готовые средства, например HTML_TreeMenu
Back to top
View user's profile Send private message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Thu Nov 23, 2017 7:47 pm    Post subject: Reply with quote

Нет. Ничего не давит. Все ок.
Предложенные вами варианты мне не подходят.
При таком подходе мне куда проще сделать этот подсчет еще при формировании дерева.
Задача поставлена именно через tpl в рекурсии сделать подсчет.
Я написал короткий конкретный пример, где не работает установка переменной даже при scope=global (я бы это назвал багом), а вы предлагаете или азы или костыли...
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Thu Nov 23, 2017 10:08 pm    Post subject: Reply with quote

Какой отношение подсчёт имеет к шаблону?
Считайте в своём приложении и оставьте шаблону задачи шаблонизатора.
Back to top
View user's profile Send private message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Thu Nov 23, 2017 10:47 pm    Post subject: Reply with quote

прямое.
У меня есть сайт где переключаются щаблоны (демо)
шаблоны все на smarty и сделаны для стандартной версии cms.
И там нужен некий подсчет идентичный примеру для дальнейшего вывода в шаблоне.

Весь код я не стал выкладывать, что бы не запутывать да и смысл не там не меняется меняется.
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Fri Nov 24, 2017 12:25 am    Post subject: Reply with quote

Напишите плагин для подсчёта.
Я свою CMS обложил модификаторами по самое небалуйся.
Back to top
View user's profile Send private message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Fri Nov 24, 2017 12:45 am    Post subject: Reply with quote

да плагин написать не проблема.
Но суть в чем - делать шаблон, затем продавать человеку и писать как установите то сделайте то то то и там там там?
Как по мне не ахти...

Я вообще могу решить это просто. Сделать отдельный tpl и инклудить его рекурсивно с разными параметрами (без функции).

Но как по мне то тут явный баг смарти. Внутри функций не работает параметр scope.
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Fri Nov 24, 2017 1:00 am    Post subject: Reply with quote

В последний раз спрашиваю - что бизнес-логика делает в шаблоне?
Back to top
View user's profile Send private message
yr4ik
Smarty Rookie


Joined: 06 Oct 2014
Posts: 15

PostPosted: Fri Nov 24, 2017 1:26 am    Post subject: Reply with quote

Что еще за бизнес логика?
Там логика проста. Есть дерево категорий и в нем идет подсчет дочерних элементов.

что по багу вообще?
Back to top
View user's profile Send private message
AnrDaemon
Administrator


Joined: 03 Dec 2012
Posts: 1785

PostPosted: Sat Nov 25, 2017 1:30 am    Post subject: Reply with quote

Считайте их до шаблона. Не вижу проблем. Бага тоже не вижу.
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: Russian All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP