Хлебные крошки

Подскажите, пожалуйста, как вывести хлебные крошки на странице магазина?

Например, в админке Магазтн->Витрина->Страницы создал страницу "page1". Там же сделал для нее дочернию страницу "page1-2"

В шаблоне page.html переменная $breadcrumbs пустая.

В файле wa-system/page/actions/waPage.action.php есть строчка:

$this->layout->assign('breadcrumbs', array_reverse($breadcrumbs));

То есть в макет, я так понимаю, эта переменная передается. Но где и как ее вытащить?


И, если можно, подскажите, как переопределить  waPageAction (файл wa-system/page/actions/waPage.action.php) чтобы изменения не потерлись при обновлении?

Тогда я смогу просто добавить $this->мшуц->assign('breadcrumbs', array_reverse($breadcrumbs)); и получить переменную в шаблоне.


Спасибо.

2 ответа

  • 1
    Антон Смирнов 26 февраля 2019 19:25 #

    Можно, конечно, прямо в шаблоне сформировать массив крошек, зациклив $wa->shop->pages($page->parent_id) но хотелось бы более системного подхода

  • 1
    kadurinho 26 февраля 2019 22:47 #

    Если подойти глобально к этому вопросу, то проще создать файл в теме дизайна для магазина breadcrumbs.html со следующим содержимым

    <ul>
    	<li>
    		<a href="{$wa_url}">Главная</a>
    	</li>
    
    	{if !empty($breadcrumbs)}
    		{foreach $breadcrumbs as $breadcrumb}
    			{if !empty($breadcrumb)}
    				<li>
    					<a href="{$breadcrumb.url}">{$breadcrumb.name|escape}</a>
    				</li>
    			{/if}
    		{/foreach}
    	{/if}
    	<li>
    		{if ($action == 'category' && isset($category))}
    			<span>{$category.name}</span>
    		{elseif ($action == 'product' && isset($product))}
    			<span>{$product.name}</span>
    		{elseif ($action == 'page' && isset($page))}
    			<span>{$page.name}</span>
    		{elseif $action == 'checkout'}
    			<span>[`Checkout`]</span>
    		{else}
    			<span>{$wa->title()}</span>
    		{/if}
    	</li>
    </ul>

    в шаблонах вызывать следующим образом, где action = нужная страница


    {include file="main.breadcrumbs.html" action="category"}

    • +1
      Антон Смирнов Антон Смирнов 27 февраля 2019 10:51 #

      Добрый день. Спасибо, но этот код не покроет дочерние страницы. 

      Как это реализовать,  я знаю, писал выше про цикл по страницам.

      Но хотелось бы понять практический смысл строчки 

      $this->layout->assign('breadcrumbs', array_reverse($breadcrumbs));

      Ведь цикл по страницам уже сделан в waPage.action.php, $breadcrumbs сформирован, и надо его всего лишь как-то вытащить в шаблоне.

      • +1
        enso_studio@mail.ru enso_studio@mail.ru 27 февраля 2019 11:59 #

        layout - это обертка вокрут основного контента страницы  controller/action, поэтому данную переменную на странице (page.html) получить нельзя, но можно получить аналогичные данные из $page_parents

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите