Автор Тема: Вывод ссылок с условием  (Прочитано 1467 раз)

19 Декабрь 2012, 10:09:29
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте.
Проблема на деле примитивная, но как это реализовать я не могу понять, ибо со смарти никогда не сталкивался.
Имеется модуль, который выводит все ссылки в один список <ul> таким образом:

<ul>
<li><a href="#">Ссылка 1</a></li>
<li><a href="#">Ссылка 2</a></li>
<li><a href="#">Ссылка 3</a></li>
<li><a href="#">Ссылка 4</a></li>
<li><a href="#">Ссылка 5</a></li>
<li><a href="#">Ссылка 6</a></li>
</ul>

Нужно, чтобы он выводил этот список, допустим, по 2 ссылки, т.е в итоге должно быть вот так:

<ul>
<li><a href="#">Ссылка 1</a></li>
<li><a href="#">Ссылка 2</a></li>
</ul>

<ul>
<li><a href="#">Ссылка 3</a></li>
<li><a href="#">Ссылка 4</a></li>
</ul>

<ul>
<li><a href="#">Ссылка 5</a></li>
<li><a href="#">Ссылка 6</a></li>
</ul>

Вот сам код с массивом:

{foreach from=$cms_titles key=cms_key item=cms_title}
<div id="footer_menu">
<ul class="footer_navigation">
{foreach from=$cms_title.categories item=cms_page}
{if isset($cms_page.link)}
<li class="bullet"><b style="margin-left:2em;">
<a href="{$cms_page.link}" title="{$cms_page.name|escape:html:'UTF-8'}">{$cms_page.name|escape:html:'UTF-8'}</a>
</b></li>
{/if}
{/foreach}
{foreach from=$cms_title.cms item=cms_page}
{if isset($cms_page.link)}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/foreach}
</ul>
</div>
{/foreach}

Помогите, пожалуйста.
19 Декабрь 2012, 11:31:40
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
На сайте smarty есть примеры как разбить вывод с помощью .index или .iteration
{if $smarty.foreach.name.index % 2 == 0}
     ....
{/if}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
20 Декабрь 2012, 09:02:08
Ответ #2
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
PrestaMan, Спасибо большое за подсказку. Разобрался.
Если кому нужно, то, вот готовый код как разбить ссылки на несколько списков модуля Block CMS.
{if $block == 1}
{foreach from=$cms_titles key=cms_key item=cms_title}

{if $cms_key == 7} {* Меню с ID 7*}
<div class="footer_menu">
<h4>{if !empty($cms_title.name)}{$cms_title.name}{else}{$cms_title.category_name}{/if}</h4>
{*$cms_titles|@debug_print_var*}

<ul class="footer_navigation">
{foreach from=$cms_title.cms item=cms_page name=links}
{if isset($cms_page.link)}
{if $smarty.foreach.links.index % 3 == 0}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>

<ul class="footer_navigation2">
{foreach from=$cms_title.cms item=cms_page name=links2}
{if isset($cms_page.link)}
{if $smarty.foreach.links2.index % 3 == 1}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>

<ul class="footer_navigation3">
{foreach from=$cms_title.cms item=cms_page name=links2}
{if isset($cms_page.link)}
{if $smarty.foreach.links2.index % 3 == 2}
<li><a href="{$cms_page.link}" title="{$cms_page.meta_title|escape:html:'UTF-8'}">{$cms_page.meta_title|escape:html:'UTF-8'}</a></li>
{/if}
{/if}
{/foreach}
</ul>
</div>
{/if}

{/foreach}
{/if}
В общем, получилось, но не совсем так, как я ожидал, пришлось вручную создать отдельно 2 списка <ul> и для него продублировать цикл, но тем не менее все работает. Если это уж полный говнокод, то буду рад просмотреть на предложенный вами более корректный упрощенный вариант.