Тема: Тема "Воздушная" переход на Rediscript 4.1

Вот шаблон меню подскажите как и что поменять для версии 4.1

{* Список категорий из 3-х уровней*}
{if $dirlist}
<div class="mobile">
    <a class="caption ht">Категории</a>
    <a href="#" class="ht toggle"></a>
</div>
<ul itemscope itemtype="http://schema.org/SiteNavigationElement" class="catalog">
    {foreach $dirlist as $dir}
    <li class="{if !empty($dir.child)} node{/if}" {$dir.fields->getDebugAttributes()}>
        <a itemprop="url" href="{$dir.fields->getUrl()}">{$dir.fields.name}</a><i></i>
        {if !empty($dir.child)}
            {$cnt=count($dir.child)}
            {$columns=1}
            {if $cnt>3}{$columns=2}{/if}
            {if $cnt>6}{$columns=3}{/if}
            {if $cnt>12}{$columns=4}{/if}
            {* Второй уровень *}
            <ul class="columns{$columns}">
                {foreach $dir.child as $subdir}
                <li {if !empty($subdir.child)}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if !empty($subdir.child)}
                    {* Третий уровень *}
                    <ul>
                        {foreach $subdir.child as $subdir2}
                        <li><a itemprop="url" href="{$subdir2.fields->getUrl()}">{$subdir2.fields.name}</a></li>
                        {/foreach}
                    </ul>
                    {/if}
                </li>
                {/foreach}
            </ul>
        {/if}
    </li>
    {/foreach}
</ul>
<script type="text/javascript">
    $(function() {
        $('.catalog .node > a, .catalog .node > i').click(function(e) {
            if ($.detectMedia('mobile') || $.detectMedia('portrait')) {
                $(this).closest('.node').toggleClass('open');
                e.preventDefault();
            }
        });
        $('.topCategory .ht').click(function() {
            $('.topCategory').toggleClass('open');
            return false;
        });        

    });
</script>
{else}
    {include file="%THEME%/block_stub.tpl"  class="blockCategory blockSmall" do=[
        [
            'title' => t("Добавьте категории товаров"),
            'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
        ]
    ]}
{/if}

Заранее благодарен за помощь

2

Re: Тема "Воздушная" переход на Rediscript 4.1

Есть вот такой код

<ul>
    {foreach $tree_list as $dir}
       <li>
            <span>{$dir->getName()}</span>

           {if $dir->getChildsCount()}
               <ul>
                    {foreach $dir->getChilds() as $sub_dir}
                       ...
                     {/foreach}
                </ul>
            {/if}
         </li>
    {/foreach}
 </ul>

но что куда распихать ума не приложу

3 Отредактировано Закусило Александр (07.05.2019 22:00:48)

Re: Тема "Воздушная" переход на Rediscript 4.1

{if !empty($dir.child)}

на

{if $dir->getChildsCount()}

и т.д.

Т.е. empty там уже нельзя использовать, т.к. это не массив уже а объект.

4

Re: Тема "Воздушная" переход на Rediscript 4.1

Закусило Александр пишет:
{if !empty($dir.child)}

на

{if $dir->getChildsCount()}

и т.д.

Т.е. empty там уже нельзя использовать, т.к. это не массив уже а объект.

Спасобо Саш за подсказку, как всегда выручаешь! А то я как всегда полез в дебри кода.

Все в версии для десктопа работает нормально теперь, но с мобильной версией меню проблемка не хочет переходить по вложенным пунктам меню. Подскажи пожалуйста что может быть не так вот код:

{* Список категорий из 3-х уровней*}
{if $dirlist}
<div class="mobile">
    <a class="caption ht">Категории</a>
    <a href="#" class="ht toggle"></a>
</div>
<ul itemscope itemtype="http://schema.org/SiteNavigationElement" class="catalog">
    {foreach $dirlist as $dir}
    <li class="{if $dir->getChildsCount()} node{/if}" {$dir.fields->getDebugAttributes()}>
        <a itemprop="url" href="{$dir.fields->getUrl()}">{$dir.fields.name}</a><i></i>
        {if $dir->getChildsCount()}
            {$cnt=count($dir.child)}
            {$columns=1}
            {if $cnt>3}{$columns=2}{/if}
            {if $cnt>6}{$columns=3}{/if}
            {if $cnt>12}{$columns=4}{/if}
            {* Второй уровень *}
            <ul class="columns{$columns}">
                {foreach $dir.child as $subdir}
                <li {if $dir->getChildsCount()}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if $dir->getChildsCount()}
                    {* Третий уровень *}
                    <ul>
                        {foreach $subdir.child as $subdir2}
                        <li><a itemprop="url" href="{$subdir2.fields->getUrl()}">{$subdir2.fields.name}</a></li>
                        {/foreach}
                    </ul>
                    {/if}
                </li>
                {/foreach}
            </ul>
        {/if}
    </li>
    {/foreach}
</ul>
<script type="text/javascript">
    $(function() {
        $('.catalog .node > a, .catalog .node > i').click(function(e) {
            if ($.detectMedia('mobile') || $.detectMedia('portrait')) {
                $(this).closest('.node').toggleClass('open');
                e.preventDefault();
            }
        });
        $('.topCategory .ht').click(function() {
            $('.topCategory').toggleClass('open');
            return false;
        });        

    });
</script>
{else}
    {include file="%THEME%/block_stub.tpl"  class="blockCategory blockSmall" do=[
        [
            'title' => t("Добавьте категории товаров"),
            'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
        ]
    ]}
{/if}

вот сам пациент: https://magazin-nozhei.ru

Заранее благодарен за помощь!

Re: Тема "Воздушная" переход на Rediscript 4.1

<li {if $dir->getChildsCount()}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if $dir->getChildsCount()}
                    {* Третий уровень *}

Здесь subdir не проверяете.

6

Re: Тема "Воздушная" переход на Rediscript 4.1

Закусило Александр пишет:
<li {if $dir->getChildsCount()}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if $dir->getChildsCount()}
                    {* Третий уровень *}

Здесь subdir не проверяете.

Программирование не сильная моя сторона, я занимаюсь SEO, построением бизнес процессов и автоматизацией бизнеса. 

Александр! Есле не сложно подскажи как должно быть.

Re: Тема "Воздушная" переход на Rediscript 4.1

{* Список категорий из 3-х уровней*}
{if $dirlist}
<div class="mobile">
    <a class="caption ht">Категории</a>
    <a href="#" class="ht toggle"></a>
</div>
<ul itemscope itemtype="http://schema.org/SiteNavigationElement" class="catalog">
    {foreach $dirlist as $dir}
    <li class="{if $dir->getChildsCount()} node{/if}" {$dir.fields->getDebugAttributes()}>
        <a itemprop="url" href="{$dir.fields->getUrl()}">{$dir.fields.name}</a><i></i>
        {if $dir->getChildsCount()}
            {$cnt=count($dir.child)}
            {$columns=1}
            {if $cnt>3}{$columns=2}{/if}
            {if $cnt>6}{$columns=3}{/if}
            {if $cnt>12}{$columns=4}{/if}
            {* Второй уровень *}
            <ul class="columns{$columns}">
                {foreach $dir.child as $subdir}
                <li {if $subdir->getChildsCount()}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if $subdir->getChildsCount()}
                    {* Третий уровень *}
                    <ul>
                        {foreach $subdir.child as $subdir2}
                        <li><a itemprop="url" href="{$subdir2.fields->getUrl()}">{$subdir2.fields.name}</a></li>
                        {/foreach}
                    </ul>
                    {/if}
                </li>
                {/foreach}
            </ul>
        {/if}
    </li>
    {/foreach}
</ul>
<script type="text/javascript">
    $(function() {
        $('.catalog .node > a, .catalog .node > i').click(function(e) {
            if ($.detectMedia('mobile') || $.detectMedia('portrait')) {
                $(this).closest('.node').toggleClass('open');
                e.preventDefault();
            }
        });
        $('.topCategory .ht').click(function() {
            $('.topCategory').toggleClass('open');
            return false;
        });        

    });
</script>
{else}
    {include file="%THEME%/block_stub.tpl"  class="blockCategory blockSmall" do=[
        [
            'title' => t("Добавьте категории товаров"),
            'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
        ]
    ]}
{/if}

8

Re: Тема "Воздушная" переход на Rediscript 4.1

Закусило Александр пишет:
{* Список категорий из 3-х уровней*}
{if $dirlist}
<div class="mobile">
    <a class="caption ht">Категории</a>
    <a href="#" class="ht toggle"></a>
</div>
<ul itemscope itemtype="http://schema.org/SiteNavigationElement" class="catalog">
    {foreach $dirlist as $dir}
    <li class="{if $dir->getChildsCount()} node{/if}" {$dir.fields->getDebugAttributes()}>
        <a itemprop="url" href="{$dir.fields->getUrl()}">{$dir.fields.name}</a><i></i>
        {if $dir->getChildsCount()}
            {$cnt=count($dir.child)}
            {$columns=1}
            {if $cnt>3}{$columns=2}{/if}
            {if $cnt>6}{$columns=3}{/if}
            {if $cnt>12}{$columns=4}{/if}
            {* Второй уровень *}
            <ul class="columns{$columns}">
                {foreach $dir.child as $subdir}
                <li {if $subdir->getChildsCount()}class="node"{/if}><a itemprop="url" href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                    {if $subdir->getChildsCount()}
                    {* Третий уровень *}
                    <ul>
                        {foreach $subdir.child as $subdir2}
                        <li><a itemprop="url" href="{$subdir2.fields->getUrl()}">{$subdir2.fields.name}</a></li>
                        {/foreach}
                    </ul>
                    {/if}
                </li>
                {/foreach}
            </ul>
        {/if}
    </li>
    {/foreach}
</ul>
<script type="text/javascript">
    $(function() {
        $('.catalog .node > a, .catalog .node > i').click(function(e) {
            if ($.detectMedia('mobile') || $.detectMedia('portrait')) {
                $(this).closest('.node').toggleClass('open');
                e.preventDefault();
            }
        });
        $('.topCategory .ht').click(function() {
            $('.topCategory').toggleClass('open');
            return false;
        });        

    });
</script>
{else}
    {include file="%THEME%/block_stub.tpl"  class="blockCategory blockSmall" do=[
        [
            'title' => t("Добавьте категории товаров"),
            'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
        ]
    ]}
{/if}

Саш! Огромное тебе спасибо все заработало как надо.

Re: Тема "Воздушная" переход на Rediscript 4.1

Александр, подскажите!
А Еще один уровень вложенного меню возможен?
Пытаюсь его сделать, но сайт перестает открываться вовсе, а до третьего (включительно) все работает
Вот кусочек кода. Где ошибка? (или движок не способен на еще один уровень?)

{* Второй уровень *}
<div class="t-dropdown-menu">
  <div class="container-fluid">
     <div class="t-nav-catalog-list__inner">
       <div class="t-close"><i class="pe-2x pe-7s-close-circle"></i></div>
       <div class="t-nav-catalog-list__scene">
           {foreach $dir.child as $subdir}
            <div class="t-nav-catalog-list-block">
               <a {$subdir.fields->getDebugAttributes()} href="{$subdir.fields->getUrl()}" class="t-nav-catalog-list-block__header">{$subdir.fields.name}</a>
{* Третий уровень *}
                   {if $subdir->getChildsCount()}
                    <ul class="t-nav-catalog-list-block__list">
                        {foreach $subdir.child as $subdir2}
                           <li><a {$subdir2.fields->getDebugAttributes()} href="{$subdir2.fields->getUrl()}" class="t-nav-catalog-list-block__link">{$subdir2.fields.name}<span style="color: #8b8b8b;font-size: small;"> ({$subdir2.fields.itemcount})</span></a>
                                 {*Четвертый уровень *}
                                  {if $subdir->getChildsCount()}
                                     <ul>
                                         {foreach $subdir.child as $subdir3}
                                          <li><a itemprop="url" href="{$subdir3.fields->getUrl()}">{$subdir3.fields.name}</a></li>
                                          {/foreach}
                                     </ul>
                                    {/if}
                              </li>
                           {/foreach}
                        </ul>
                         {/if}
                      </div>
                    {/foreach}
         </div>
</div>

10 Отредактировано Закусило Александр (26.08.2019 18:22:35)

Re: Тема "Воздушная" переход на Rediscript 4.1

Конечно возможен, главной, просто, чтобы были значения. У вас $subdir->getChildsCount() дублируется дл третьего урочня и четвертого.

11

Re: Тема "Воздушная" переход на Rediscript 4.1

Закусило Александр пишет:

Конечно возможен, главной, просто, чтобы были значения. У вас $subdir->getChildsCount() дублируется дл третьего урочня и четвертого.

Александр, подскажите, как правильно обратиться к директории 4 уровня?
$subsubdir->getChildsCount() smile

Re: Тема "Воздушная" переход на Rediscript 4.1

{if $subdir2->getChildsCount()}
                                     <ul>
                                         {foreach $subdir2.child as $subdir3}
                                          <li><a itemprop="url" href="{$subdir3.fields->getUrl()}">{$subdir3.fields.name}</a></li>
                                          {/foreach}
                                     </ul>
                                    {/if}

13

Re: Тема "Воздушная" переход на Rediscript 4.1

Спасибо большое, Саша!
Логику понял.