[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Smarty:Undefined index mistake!
Гость_Евгений
Добрый день!
Если кто поможет, буду очень благодарен.
Вот такой код Смарти:

{section name=i loop=$obj->mCategories} 
<li>{$obj->mCategories[i].department_name}
<ul>
{section name=k loop=$obj->mCategories[i].category_name}
<li>$obj->mCategories[i].category_name[k]}
{/section}
{/section}


Если $obj->mCategories[i].category_name оказывается пустым, то поднимается ошибка: Undefined index: category_name.
В качестве решения думаю можно использовать флаг, но нет ли более аккуратного решения?
И вообще для меня загадка как можно проверять переменные в смарти на наличие значений...



Спустя 4 минуты, 5 секунд (16.09.2010 - 13:30) Семён написал(а):
Мб вы просто неправильно используйте массивы на шаблонах Smarty? wink.gif
Если вы уверены на 100%, то сделайте мне пожалуйста его вывод:

rolleyes.gif
{$obj->mCategories|print_r}


Я правильно сделал вывод, вы хотите сделать рекурсию для вывода древовидного меню категорий? Если да, то какая версия Smarty 2, 3 (если да, то какой RC)

Спустя 15 минут, 23 секунды (16.09.2010 - 13:46) Guest написал(а):
Семён, спасибо за ваш ответ!
Да, именно хочу сделать многослойное меню.
Smarty версия 2.6
Вот print_r:
Array
(
[department_name] => Supplements
[category_name] => Array
(
[0] => Healthy Foods
[1] => Healthy drinks
[2] => Buzz!
)
)
Array
(
[department_name] => Zuzi!
)
Array
Буду рад ответу!

Спустя 9 минут, 14 секунд (16.09.2010 - 13:55) Семён написал(а):
Внимание!
А вы print_r дали с шаблона smarty или print_r из php файлика?
Вообще если у вас нет бесконечной вложенности, и сообственно вложенность всего 2-ва уровня => бы сделал так (сорри по памяти не помню, уже давно сижу на 3х)

<ul>
{foreach key=key from=$массив item=n}
<li>{$n.department_name}</li>
{if count($n.category_name) != 0}
<ul>
{foreach key=key from=$n.category_name item=b}
<li>{$b}</li>
{/foreach}
</ul>
{/if}
{
/foreach}
</ul>

Спустя 11 минут, 24 секунды (16.09.2010 - 14:06) Семён написал(а):
Исправил ошибки в примере. перепроверьте! вместо $массив, подставьте просто свой массив.

Спустя 4 минуты, 16 секунд (16.09.2010 - 14:10) Гость_Евгений написал(а):
Ага то была распечатка из смарти, а вот из пхп:
Array ( [0] => Array ( [department_name] => Supplements [category_name] => Array ( [0] => Healthy Foods [1] => Healthy drinks [2] => Buzz! )) [1] => Array ( [department_name] => Zuzi! ) )
Меню хочу на самом деле сделать 3х уровней, пока третий откинул для удобства.
Спасибо, за ваш код, попробую его!



Спустя 2 минуты, 45 секунд (16.09.2010 - 14:13) Семён написал(а):
Я бы сразу сделал рекурсией, блин помнится в Smarty 2 в своё время я её реализовал через жопу с каким-то доп. плагином. в Smarty 3 древовидное меню выстраиваю через функцию.

Спустя 12 минут, 29 секунд (16.09.2010 - 14:26) Гость_Евгений написал(а):
Да, а я даже и не подозревал о существовании Смарти 3, пока вы не ответили.
А если я поставлю Смарти 3, у нее есть совместимость с кодом Смарти 2?
Не могли бы вашу эту функцию показать?
А я в благодарность... могу например чаю зеленого японского выслать, правда.
blink.gif

Спустя 13 минут, 38 секунд (16.09.2010 - 14:39) Семён написал(а):
В смарти3 рекурсивный вывод древовидного меню (с бесконечной вложенностью) у меня так:
Ну некоторые вещи придётся переписать. а так синтаксис не изменился.

{function name='navigator' list=$myTree}
{
foreach from=$list item=element}
{
if !empty($element.childNodes)}
<li>
<
a>- {$element.name_link}</a>
{else}
<li><a>- {$element.name_link}</a>
{/if}
{
if !empty($element.childNodes)}
<ul class="list-style">{navigator list=$element.childNodes}</ul>
{/if}
</li>
{/foreach}
{
/function}

<ul class="list-style">
{navigator}
</ul>

Спустя 16 минут, 25 секунд (16.09.2010 - 14:56) Guest написал(а):
Спасибо!
Чай нужен?

Спустя 2 минуты, 29 секунд (16.09.2010 - 14:58) Семён написал(а):
Цитата (Guest @ 16.09.2010 - 15:56)
Спасибо!
Чай нужен?

Да ну что вы не утруждайте себя )))
Обращайтесь

Спустя 8 минут, 13 секунд (16.09.2010 - 15:06) Guest написал(а):
Сэнкс, жму руку!

Спустя 11 часов, 8 минут, 32 секунды (17.09.2010 - 02:15) Гость_Евгений написал(а):
Кстати, вот конечный рабочий вариант для 3х меню:

<ul>
{section name=i loop=$obj->mCategories}
<li>{$obj->mCategories[i].department_name}
<ul>
{if !empty($obj->mCategories[i].category_name)}
{section name=k loop=$obj->mCategories[i].category_name}
<li>{$obj->mCategories[i].category_name[k]}
{if !empty($obj->mCategories[i].subcategory_name[k])}
{section name=z loop=$obj->mCategories[i].subcategory_name[k]}
<ul>
<li>{$obj->mCategories[i].subcategory_name[k][z]}</li>
</ul>
{/section}
{/if} </li>
{/section}
</ul>
{/if}
{/section}
</li>
</ul>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.