{set $tpl_ProductCards_laprintcard = 'tpl_ProductCards_laprintcard'} {*Чанк карточки товара для вывода в категории*} {set $tpl_ProductTable_naderrus = 'tpl_ProductTable_naderrus'} {*чанк для вывода вложенными строчками таблицы*} {set $InfotabsForCategory_pokazivat = $_modx->resource.id|resource:'InfotabsForCategory_pokazivat'} {set $viborkaidproducts=''} {set $idcatalog ='idcatalog'|config} {*Берем из настроек конфигурации ID страницы основного каталога*} {set $idhitiprodazh = 'idhitiprodazh'|config} {*Берем из настроек конфигурации ID страницы Хиты продаж*} {set $popovodu = 'popovodu'|config} {*Берем из настроек конфигурации ID страницы Хиты продаж*} {set $site_name = 'site_name' | config} {set $site_url = 'site_url' | config} {set $showproductsinchildcategories = $_modx->resource.id|resource:'showproductsinchildcategories'} {set $docstv = json_decode($_modx->resource.id | resource : 'migx_docs_resources_tv' , true)} {set $docstvcount = $docstv | count} {set $countfotospublished = 0} {set $show_text_cards = false} {*Показывать текст карточек или нет*} {foreach $docstv as $idx =>$doctv index=$index} {if $doctv.published == 1}{set $countdocspublished = $countdocspublished + 1}{/if} {/foreach} {set $tpl_migx_docs = "tpl_migx_docs"} {if $_modx->isAuthenticated()} {set $dostupest = false} {else} {set $dostupest = false} {/if} {*тег в шаблоне Bootstrap 5 не используется*} {*метатег адаптивного окна просмотра*} {*1 NDB1-63, 1-63А, 6кА 2 *} {if $_modx->resource.searchable} {else}{/if} {if !$_modx->resource.description && !($_modx->resource.content | ellipsis : "500" | match : '*{*')} {var $description = $_modx->resource.content | stripmodxtags | striptags | strip : true | ellipsis : "180"} {else}{var $description = $_modx->resource.description}{/if} {*Для Seosuite какие плейсхолдеры для метатегов смотри https://coder.social/Sterc/seosuite*} {**} {**} {$_pls['ss_meta.keywords']} {if $_modx->resource.img}{/if}{*ИСПРАВИТЬ код возможно под старый bootstrap*} {*[!+ss_meta.meta_title]]*} {$_modx->resource.longtitle ? $_modx->resource.longtitle : $_modx->resource.pagetitle} {*ИСПРАВИТЬ*} {ignore}ignore_ffc47ec706263e67fddcee21a504034a{/ignore}{'YandexMetrikaID'|config}{ignore}ignore_7c8aa3eda8c9b751b834260bdaccc574{/ignore} {*пробел до и после фигруных скобок { и } обязателен! *} {*ИСПРАВИТЬ перенести в MinifyX*} {**} {* *} {*js файл не переносить в низ сайта)*} {*js файл не переносить в низ сайта)*} {*js файл ниже не переносить в низ сайта, ломается работа слайдера!*} {* *}{**} {*Подключение галереи Swiper*} {**} {*Подключение галереи Swiper*} {**} {*js файл ниже не переносить в низ сайта, ломается работа слайдера!*} {**} {*Подключение галереи Swiper*} {**} {*Подключение доп. стилей*} {*https://bootstrap-table.com/*} {*Скрипт ленивой загрузки изображений. Смотри https://dinbror.dk/blazy/ и https://webformyself.com/otlozhennaya-zagruzka-izobrazhenij-5-texnik-lenivoj-zagruzki/*} {*'!MinifyX' | snippet : [ 'minifyCss' => 1, 'minifyJs' => 1, 'cssSources' => 'assets/css/styles.css', 'jsSources' => 'assets/js/scripts.js' ]} {'MinifyX.css' | placeholder} {* *} {*ИСПРАВИТЬ*} {* {'!MinifyX' | snippet : [ 'minifyCss' => 1, 'minifyJs' => 1, 'cssSources' => '/assets/components/siteextra/bootstrap/css/bootstrap.min.css,' ~ '/assets/components/siteextra/fancybox/source/jquery.fancybox.css', 'jsSources' => '/assets/components/siteextra/bootstrap/js/bootstrap.min.js,' ~ '/assets/components/siteextra/fancybox/source/jquery.fancybox.pack.js,' ~ '/assets/components/siteextra/web/js/script.js,' ]} {'MinifyX.css' | placeholder} *} {*
СКИДКА
-10%
при покупке от 2-х единиц в заказе
*}
{set $catalogid = 'idcatalog' | config} {set $cats = '!pdoResources' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $catalogid, 'limit' => '16', 'depth' => '0', 'returnIds' =>'1', 'sortby' =>'menuindex', 'sortdir'=>'ASC' ]} {set $topcategories = $cats |split} {*тут задейтвовано 2 меню. Первое стандартное не используется, т.к. разработали кастомное вариант 2 с выпадающим меню на всю ширину экрана. Вариант 1 используется для мобильной версии*} {* *} {*примеры фильтров 'where' => ' { "primechanie:LIKE":"%Первый займ без процентов%" } ', смотри https://webstool.ru/modx-minishop2-primeryi-vyiborki-where-optionfilters-innerjoin.html*} {*if $_modx->user.id == 1}{ignore}ignore_ba3c5774db82016a14db960fcfd65b25{/ignore}{/if*} {* 1 инициализируем параметры выборок*} {if $.get['limit']} {set $limit=$.get['limit']|intval} {else} {set $limit=16} {/if} {if $.get['page']} {set $offsetvalue=($.get['page']|intval -1)*$limit} {set $page=$.get['page']|intval} {else} {set $offsetvalue=0} {set $page=1} {/if} {if $.get['sort']} {set $sort=$.get['sort']} {if $sort == 'popular'} {set $sortby = 'Data.popular'} {elseif $sort == 'price'} {set $sortby = 'Data.price'} {elseif $sort == 'new'} {set $sortby = 'Data.new'} {/if} {if $.get['dir']} {set $sortdir = $.get['dir']} {else} {set $sortdir = 'ASC' } {/if} {else} {*если сортировка не задана в адресной строке*} {set $sortby = 'Data.popular'} {if $.get['dir']=='DESC' or !$.get['dir']} {set $sortdir = 'ASC'}{*то направление сортировки не указываем*} {/if} {/if} {*2 способа вывода парметров get - 9 и {$.get['page']} - *} {if ('getcountchildproducts'| snippet :[])?} {*Если у категории есть товары*} {set $parentsid =$_modx->resource.id} {else} {set $parentsid = 0} {*иначе нет дочерних товаров и указываем $parentsid = 0 чтобы не было товаров*} {/if} {* *} {set $childs2 = $modx->getChildIds($_modx->resource.id,2)} {*список дочерних ресурсов до 2 уровней*} {*$childs2 - {$childs2|var_dump}*} {* {var $children = children($_modx->resource.id)} '!getChildCategoriesCount'|snippet :['parent' =>$_modx->resource.id]- {'!getChildCategoriesCount'|snippet :['parent' => $_modx->resource.id]} {if ('!getChildCategoriesCount'|snippet :['parent' =>$parentsid])} Есть категории {else} Нет категорий {/if} *} {*для категории Хиты продаж*} {if $_modx->resource.id == $idhitiprodazh} {set $ids1= '!msProducts' | snippet : [ 'tpl' => '', 'sortBy'=>'Rand()', 'parents' => '0', 'limit' => '5000', 'returnIds'=>'1', 'where' => ' { "Data.popular":"1" } ' ]} {set $ids2 = '!getIdProductsByOptionKolichestvoprodazh' | snippet : [ 'key' => 'kolichestvoprodazh', 'optionminvalue' => '10' ]} {set $viborkaidproducts= ($ids1 ~','~$ids2)| getuniqueinstr} {*складываем и убираем дубли*} {/if} {*для категории Хиты продаж*} {*формируем выборку по ключам если есть*} {if $_modx->resource['categoriesSearchProductsByOption']} {set $datakeys = $_modx->resource['categoriesSearchProductsByOption'] | fromJSON}{/if} {foreach $datakeys as $data1} {set $optionname = $data1['categoriesSearchInOption']} {set $keywords = $data1['categoriesSearchKeywords']} {set $keywords = $keywords|replace:'

':''} {*очищаем от символов

в начале строки иначе выборка будет не работать*} {set $keywords = $keywords|replace:'

':''} {*очищаем от символов

в конце строки иначе выборка будет не работать*} {set $keywords = ($keywords|split)} {*преобразуем в массив*} {set $countkeys = ($keywords|count)} {if $countkeys!=0} {foreach $keywords as $i=> $keyword1} {set $key1 = ($keyword1|strip)} {*Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом.*} {set $key1ids = ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' =>'%'~$key1~'%'])} {if ($key1ids !='')} {if ($viborkaidproducts !='')} {set $viborkaidproducts = $viborkaidproducts ~ ',' ~ $key1ids} {else} {set $viborkaidproducts = $key1ids } {*если выборка до этого была пустой*} {/if} {if ($i = ($countkeys-1))} {set $viborkaidproducts = $viborkaidproducts ~','} {*если ключ не последний из выборки то ставим запятую*} {else} {/if} {/if} {/foreach} {/if} {/foreach} {if $viborkaidproducts!=''} {set $viborkaidproducts = $viborkaidproducts | getuniqueinstr}{*убираем дубли*} {set $countproductsbykeywords = ($viborkaidproducts|split) |count} {/if} {*{set $countpr = ('!getCountAllChildProducts' | snippet : ['parents' => $_modx->resource.id, 'depth' => 15, 'where' => ['template' => 5]])} альтернативный способ посчитать количество товаров*} {set $countprincategoriya =('!getcountchildproducts'| snippet :[])} {*получаем количество товаров в категории*} {*('showcountsproductsincategoryafterpagetitile'|config) - в настройках конфигурации глобально чтобы определять выводить количество товаров после заголовка категории или нет*} {set $countpr = $countproductsbykeywords + $countprincategoriya} {*суммируем*} {*if $_modx->user.id == 1}
$viborkaidproducts - {$viborkaidproducts}
$countproductsbykeywords- {$countproductsbykeywords}
$countprincategoriya - {$countprincategoriya}
('getcountchildproducts'| snippet :[]) - {('getcountchildproducts'| snippet :[])}
$countpr - {$countpr}
{/if*}

{$_modx->resource.longtitle?$_modx->resource.longtitle:$_modx->resource.pagetitle} {*Формируем заголовк категории*} {*Если вкллючены настройки на вывод указываем количество товаров в категории*} {if $countpr!=0 & ('showcountsproductsincategoryafterpagetitile'|config)}{'showcountsproducts' | in : $_modx->resource.show_on_page_category ? $countpr~' товаров' : ''} {/if} {* {if $_modx->user.id == 1} {$viborkaidproducts = ''}

данные для админа для отладки $page - {$page}, $limit - {$limit}, $offsetvalue- {$offsetvalue}, $parentsid - {$parentsid}
Товаров в разделе {$countpr}
1 вар show_on_page_category- {$_modx->resource.show_on_page_category} ; {$_modx->resource.show_on_page_category['countsproducts']}
2 вар не ок
3 ваориант товары вывели
4 вариант
5 вариант {$_pls['show_on_page_category.countsproducts']}
6 вариант {'countsproducts' | in : $_modx->resource.show_on_page_category ? $countpr~' товаров' : ''}
000 7 сниппет categoriesSearchProductsByOption выдает 1 если значение задано доп.поле categoriesSearchProductsByOption - 1
{set $datakeys = $_modx->resource['categoriesSearchProductsByOption'] | fromJSON} {foreach $datakeys as $data1} 002 $data | print {$data | print}
003 2 $keywords1-{$keywords1} !
005 $data1['categoriesSearchKeywords'] -{$data1[0]['categoriesSearchKeywords']} !
{set $keywords1 = $data1['categoriesSearchKeywords']} 006 $data1['categoriesSearchKeywords'] - {$data1['categoriesSearchKeywords']}
007 $data1['categoriesSearchKeywords'] | strip = {$data1['categoriesSearchKeywords']|strip}
{set $keywords1 = $keywords1|replace:'

':''} {*очищаем от символов

в начале строки иначе выборка будет не работать*} {* {set $keywords1 = $keywords1|replace:'

':''} {*очищаем от символов

в конце строки иначе выборка будет не работать*} {* {set $keywords1 = ($keywords1|split)} 007-1 $keywords1 |count - {$keywords1 |count}
008 $keywords1 - {$keywords1}
009 $keywords1|var_dump -

{$keywords1|var_dump}

010 $keywords1[0]|strip - {$keywords1[0]|strip}
{*set $keywords1 = $keywords1|strip*} {*Убирает пробелы в начале и конце текста. Если указан дополнительный параметр, то убираются и все повторяющиеся пробелы в тексте.*} {* {set $optionname = $data1['categoriesSearchInOption']} 222- $keywords1 - {$keywords1[0]} !
019 $optionname {$optionname} !
{*getIdProductsByOptionsLike список id продуктов по частичному совпадению {'!getIdProductsByOptionsLike'|snippet :['key' => 'naznacheniepodarka', 'param1' => 'мужу', 'category' =>'29']} {*перепроверь!*} {* {set $countkeys = ($keywords1|count)} 020 $countkeys - {$countkeys}
{if $countkeys!=0} {foreach $keywords1 as $i=> $key1} 021 $key1 - {$key1} {$key1|gettype} $optionname - {$optionname }
{set $key1 = ($key1|strip)} {**} {*022 ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1]) - {('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1])}
023 ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => '%'~$key1~'%']) - {('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => '%'~$key1~'%'])}
024 ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1~'%']) - {('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1~'%'])}
025 ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => '%'~$key1]) - {('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => '%'~$key1])}
026 ('!getIdProductsByOptionsExactly'|snippet :['key' => $optionname , 'param1' => $key1]) - {('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1])}
*} {*
{set $key1ids = ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' =>'%'~$key1~'%'])} 027 товаров по ключу {$key1} найдено: {$key1ids}- товаров {($key1ids|split) |count}
028 $key1ids - {$key1ids}, $key1 - {$key1} , количество {($key1ids|split) |count}, $viborkaidproducts- {$viborkaidproducts}
{if ($key1ids !='')} {if ($viborkaidproducts !='')} 028-1 $viborkaidproducts - {$viborkaidproducts}; $key1ids - {$key1ids}
028-11
{set $viborkaidproducts = $viborkaidproducts ~ ',' ~ $key1ids} 028-111 $viborkaidproducts - {$viborkaidproducts}; $key1ids - {$key1ids}
{else} 028-2 $viborkaidproducts - {$viborkaidproducts}; $key1ids - {$key1ids}
{set $viborkaidproducts = $key1ids } {*если выборка до этого была пустой*} {* 028-22 $viborkaidproducts - {$viborkaidproducts};
{/if} {*формируем строку id товаров*} {*029 ($viborkaidproducts !='') - {($viborkaidproducts !='')}
030 ($key1ids !='') - {($key1ids !='')}
031 ($i!= ($countkeys-1)) - {($i!= ($countkeys-1))} - $i - {$i} - $countkeys - {$countkeys}
*} {* {if ($i = ($countkeys-1))} {set $viborkaidproducts = $viborkaidproducts ~','} {*если ключ не последний из выборки то ставим запятую*} {*
0032-1 добавил запятую в конец $viborkaidproducts = {$viborkaidproducts}
{else}
0032-2 сработало else! $viborkaidproducts = {$viborkaidproducts}
{/if} {/if} {*033 ($viborkaidproducts !='') - {($viborkaidproducts !='')}
034 $key1ids !='' - {$key1ids !=''}
035 $i - {$i} ; - $countkeys - {$countkeys} ; - $i!= ($countkeys-1); - {$i!= ($countkeys-1)}
*} {*{set $viborkaidproducts = $viborkaidproducts ~ ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' => $key1]) ~ ',' ~ ('!getIdProductsByOptionsExactly'|snippet :['key' => $optionname , 'param1' => $key1])} *} {* 036 $viborkaidproducts - {$viborkaidproducts}
036-1 $viborkaidproducts|split) |count - {($viborkaidproducts|split) |count};
{/foreach} {/if} {set $viborkaidproducts = $viborkaidproducts | getuniqueinstr} 037 $viborkaidproducts после удаления дублей - {$viborkaidproducts}
{set $countproducts = ($viborkaidproducts|split) |count} 038 итого товаров {$countproducts}, при выводе по {$limit} товаров на странице всего страниц {$countproducts/$limit}
039 уникальных {(($viborkaidproducts|getuniqueinstr)|split)|count} товаров, $viborkaidproducts|getuniqueinstr - {$viborkaidproducts|getuniqueinstr|var_dump}
039 {$viborkaidproducts}


{*в результирующей выборке есть повторы, но сниппет msProducts сам убирает повторы!!! - все крутоооо*} {* {'!msProducts'|snippet : ['parents'=>'0','optionFiltes'=>' { "naznacheniepodarka:LIKE":"жене" } ']} {/foreach}
{/if} *}
{*Количество субкатегорий {'getcountchildsubcategories'| snippet :[]}*} {*Количество товаров в категории {'getcountchildproducts'| snippet :[]} *}
NDB1-63, 1-63А, 6кА

Отправить запрос

Заполните форму ниже и наши менеджеры свяжутся с вами в ближайшее время и ответят на все ваши вопросы
Вы должны принять перед отправкой.
{if $InfotabsForCategory_pokazivat=="true"} {*ВЫВОДИМ ТАБЫ ДЛЯ КАТЕГОРИИ*} {*смотри*}
{*Создаем табы(кнопки вкладок) Описание,Характеристики,Обозначение,Аксессуары,Документы- берем названия вкладок с настроек конфигурации categoryblocktabstitles и в настройке конфигурации названия чанков для вывода содержимого вкладок categoryblocktabstpls $tpl.categorytabs.description, $tpl.categorytabs.specifications, $tpl.categorytabs.oboznachenie, $tpl.categorytabs.dops, $tpl.categorytabs.docs Если задаем названия табов и соответственно их крличество, то соответственно нужно как-то задать контент табов. Его соответственно надо также задавать в конфигурации - чтобы пользоатель потом не искал где надо задавать настройки контента все делаем в одном месте в конфигурациях *} {**} {var $chunks =('categoryblocktabstpls' | config)| split} {*тут задаем массив назаний который берем из конфигурации productcardblocktabstpls*}
{foreach $chunks as $ntab => $chunk} {* сколько табов создали в предыдущем цикле - столько и создаем вкладок контента табов. здесь в цикле $ntab переназначается как ключ массива для перебора и начинается с 0 *}
{if $chunk} {include $chunk} {else} {$modx->log(1, 'Ошибка вывода контента! Не заданы настройки categoryblocktabstpls', '','tpl.categorytcard.tabs')}{*Вывод в журнал ошибок отладочного сообщения*} Ошибка вывода контента! Смотрите журнал ошибок - ошибка вывода контента! {/if}
{/foreach}
{else } {set $naznachenie = $_modx->resource.id | resource : 'naznachenie'} {set $primechanie_o_categorii = $_modx->resource.id | resource : 'primechanie_o_categorii'} {set $tiporazmeri = $_modx->resource.id | resource : 'tiporazmeri'} {set $construction = $_modx->resource.id | resource : 'construction'} {set $structure = $_modx->resource.id | resource : 'structure'} {if $InfotabsForCategory_pokazivat=="true"} {set $otstupi="mx-0 px-3 px-md-5 pt-lg-3 gy-3 "}{else}{set $otstupi="px-3 px-md-0 pt-lg-0 gy-3 gy-lg-1 "}{/if}
{*Если у категории нет контента (поле content), краткого описания (поле introtext), нет указания description, не заполнены поля назначения и примечания (все это проверяем по очереди) то подставляем данное значение по умолчанию из настройки Конфигурации defaultdescription*} {if $_modx->resource.content} {set $descr = $_modx->resource.content} {set $divid="content"} {*elseif $_modx->resource.introtext} {set $descr = $_modx->resource.introtext} {set $divid="introtext"*} {*Аннотации использовать для кратких описаний в карточках категорий. В основном тексте описания не выводить!*} {*elseif $_modx->resource.description} {set $descr = $_modx->resource.description} {set $divid="description"*}{*поле description использовать для SEO*} {elseif $naznachenie||$primechanie_o_categorii} {set $descr = ""} {set $divid="naznachenieorprimechanie"} {else} {set $descr = 'defaultdescription'| config} {set $divid="defaultdescriptionfromconfig"} {/if}
{**}
{**}
{$descr}
{*
10} style="height:0px;" {/if} >
*} {if $naznachenie}
Назначение:
{$naznachenie}
{/if} {if $primechanie_o_categorii}
Особенности:
{$primechanie_o_categorii}
{/if} {if $construction}
Конструктивное исполнение:
{$construction}
{/if} {if $structure}
Обзор структуры
{$structure}
{/if} {if $tiporazmeri}
Типоразмеры:
{$tiporazmeri}
{/if}
{**}
{/if}
{*1*} {set $childsubcats = '!msProducts' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $_modx->resource.id, 'sortby' => 'menuindex', 'sortdir' =>'ASC' 'limit' => '16', 'depth' => '0', 'returnIds' =>'1' 'where' => ' { "class_key": "msCategory"}', ]} {set $allsubcat = $childsubcats} {*2*}{*
{$menutitle?$menutitle:$pagetitle}
*} {if $_modx->resource.id!=$idcatalog} {*Субкатегории для выборок - для тех у которых задано доп. поле categoriesSearchProductsByOption*} {set $subcats = '!msProducts' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $_modx->resource.id, 'limit' => '16', 'depth' => '1', 'includeTVs' =>'categoriesSearchProductsByOption', 'where' => ' { "class_key": "msCategory", "categoriesSearchProductsByOption:>=":"1" }', 'returnIds' =>'1' ]} {*тут решил сделать проверку далее а выводит ли для выборок дочерняя категория свои выборки по ключам - все вроде правильно - но пустыке все равно выводит - надо проверить видимо getIdProductsByOptionsLike выдает единицу даже если рзульатат выборки нет, надо проверить*} {*ниже проверяем для соседей {set $subcats = ($subcats ~ (($_modx->resource.id |resource : 'svyazanniecategories')?','~($_modx->resource.id |resource : 'svyazanniecategories'):'')) | getuniqueinstr} {*получаем как список дочерних каатегорий так ии указанных в тв поля "соседние" категории*} {if $subcats?} {set $subcatsarray = $subcats |split} {foreach $subcatsarray as $subcat} {set $datakeys = ($subcat | resource: 'categoriesSearchProductsByOption')| fromJSON} {foreach $datakeys as $data1} {set $optionname = $data1['categoriesSearchInOption']} {set $keywords = $data1['categoriesSearchKeywords']} {set $keywords = $keywords|replace:'

':''} {*очищаем от символов

в начале строки иначе выборка будет не работать*} {set $keywords = $keywords|replace:'

':''} {*очищаем от символов

в конце строки иначе выборка будет не работать*} {set $keywords = ($keywords|split)} {*преобразуем в массив*} {set $countkeys = ($keywords|count)} {if $countkeys!=0} {*если число ключей больше 0*} {foreach $keywords as $i=> $keyword1} {*проверяем есть ли выгрузка товаров по ключам в категории*} {set $key1 = ($keyword1|strip)} {*Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом.*} {set $key1ids = ('!getIdProductsByOptionsLike'|snippet :['key' => $optionname , 'param1' =>'%'~$key1~'%'])} {if (($key1ids|split|count)>='')} {*значит у категории есть выгрузка товаров*} {set $flagcategoriview = 1} {/if} {/foreach} {/if} {/foreach} {if $flagcategoriview} {*если у категории есть результаты выборок по ключевым словам*} {set $allsubcat = $allsubcat ~','~$subcat} {*

{($subcat|resource: 'menutitle')?($subcat|resource: 'menutitle'):($subcat|resource: 'pagetitle')}
*} {/if} {/foreach} {/if} {/if} {* 'cache' => '1', 'cacheTime' => '1800',*} {*также выведем категории указанные как соседние в доп. поля svyazanniecategories*} {*3 проверка по связанным категориям через доп. поле svyazanniecategories*} {if $_modx->resource.id |resource : 'svyazanniecategories'} {set $svyazcats = ($_modx->resource.id |resource : 'svyazanniecategories')| split} {foreach $svyazcats as $svyazcat} {set $allsubcat = $allsubcat ~','~$svyazcat} {*
{($sosedcat | resource: 'menutitle')?($sosedcat | resource: 'menutitle'):($sosedcat | resource: 'pagetitle')}
*} {/foreach} {else} {/if} {*4*} {if ($viborkaidproducts or $parentsid== $popovodu ) and $_modx->resource.id!=$idhitiprodazh} {if (($_modx->resource.id= $popovodu) and $parentsid==0) or $parentsid== $popovodu} {set $parentsid1 = $popovodu} {else} {set $parentsid1 =0} {/if} {set $sosedcategories = ('!msProducts' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $parentsid1, 'limit' => '16', 'depth' => '1', 'includeTVs' =>'categoriesSearchProductsByOption', 'where' => ' { "class_key": "msCategory", "id:!=":" '~$_modx->resource.id ~' ", "id:!=":" '~ $idhitiprodazh~' ","id:!=":" '~$popovodu~' "}', 'returnIds' =>'1' ])} {set $allsubcat = $allsubcat ~','~$sosedcategories} {/if} {*if $_modx->user.id == 1}
$idhitiprodazh - {$idhitiprodazh}
$childsubcats - {$childsubcats}
$subcats- {$subcats}
$svyazcat - {$svyazcat}
$sosedcategories- {$sosedcategories}
$viborkaidproducts - {$viborkaidproducts}
$parentsid - {$parentsid}
$parentsid1- {$parentsid1}
$childs2 - {$childs2|var_dump}
$allsubcat- {$allsubcat} {/if*} {set $allsubcat = $allsubcat | getuniqueinstr} {*Вывод категорий*} {if $allsubcat!='' and $_modx->resource.id!=$idhitiprodazh}{*проверять есть ли субкатегории - если нет то блок не выводить!*} {set $allsubcatarray = $allsubcat|split}

Перечень товаров

{foreach $allsubcatarray as $subcat} {if $subcat!=''}
{*Оформление карточек смотри https://getbootstrap.ru/docs/5.3/components/card/#about*}
{*Заголовок карточки*}
{*Подзаголовок карточки*} {if $show_text_cards}
{if ($subcat|resource: 'cat_type_shunt_trip_unit') <> ""}Тип расцепителя: {$subcat|resource:'cat_type_shunt_trip_unit'}
{/if} {if ($subcat|resource: 'cat_unom') <> ""}Un={$subcat|resource:'cat_unom'}{/if}
{$subcat|resource:'categoryintrotext'}
{/if} {* *}
{* *}
{* Сделать карточками! *} {/if} {/foreach}
{if $_modx->user.id == 1} {*СДЕЛАТЬ автоматизированным и не скрываемым! Пока скрываем таблицу по собираемым из заполненных субкатегорий*} {*СДЕЛАТЬ через настройки конфигурации*} {*Проверка что хотя бы у одной из подчинненых подкатегорий включено отображение нижеуказанных доп. полей - через цикл перебором. Исключаем также отсутствующие столбцы данных*} {set $flag_cat_off= 0} {*Исключаем также отсутствующие столбцы данных*} {set $flag_nulls_off=1} {*для отключения удаления пустых столбцов и отображения только заполненных. 1= отключать пустые столбцы. Для тестирования и программирования ставить в "=0"*} {set $flag_cat_title= 0} {set $flag_cat_unom= 0} {set $flag_cat_icu= 0} {set $flag_cat_vah= 0} {set $flag_cat_inom= 0} {set $flag_cat_number_of_poles= 0} {set $flag_cat_dops= 0} {set $flag_cat_type_of_residual_current= 0} {set $flag_cat_residual_current= 0} {set $flag_cat_reference_standard= 0} {set $flag_cat_modulus_multiple_of_9mm= 0} {foreach $allsubcatarray as $subcat} {if $subcat!=''} {if ($subcat|resource: 'cat_off') == "Да"} {set $flag_cat_off=1} {/if} {if ($subcat|resource: 'menutitle') <> "" or ($subcat|resource: 'pagetitle') <> ""} {set $flag_cat_title=1} {/if} {if ($subcat|resource: 'cat_unom') <> ""} {set $flag_cat_unom=1} {/if} {if ($subcat|resource: 'cat_icu') <> ""} {set $flag_cat_icu=1} {/if} {if ($subcat|resource: 'cat_vah') <> ""} {set $flag_cat_vah=1} {/if} {if ($subcat|resource: 'cat_inom') <> ""} {set $flag_cat_inom=1} {/if} {if ($subcat|resource: 'cat_number_of_poles') <> ""} {set $flag_cat_number_of_poles=1} {/if} {if ($subcat|resource: 'cat_dops') <> ""} {set $flag_cat_dops=1} {/if} {if ($subcat|resource: 'cat_operation_type_of_residual_current') <> ""} {set $flag_cat_type_of_residual_current=1} {/if} {if ($subcat|resource: 'cat_rated_residual_operating_current_ma') <> ""} {set $flag_cat_residual_current=1} {/if} {if ($subcat|resource: 'cat_reference_standard') <> ""} {set $flag_cat_reference_standard=1} {/if} {if ($subcat|resource: 'cat_modulus_multiple_of_9mm') <> ""} {set $flag_cat_modulus_multiple_of_9mm=1} {/if} {/if} {/foreach} {if $flag_cat_off==0}
{if $_modx->user.id == 1} Доп поля подчиненных субкатегорий не заполнены.{/if}
{/if} {if $flag_cat_off==1}
{*выводим таблицу с параметрами из доп.полей Карточки категории*}
{if $_modx->user.id == 1} Эту таблицу видит только админ пользователь 1 {1 | user : 'username'}. Флаг настройки отображения пустых столбцов {if $flag_nulls_off==1} $flag_nulls_off=1, пустые столбцы таблицы исключаются {else}$flag_nulls_off=0 пустые столбцы отображаются.{/if} Имеет смысл отключить показ пустых столбцов таблицы если хотим сократить ширину таблицы. Если появится значение в нужном столбце - таблица добавит столбец. {/if}
{**}{*для использования своего поля поиска - включить data-search-selector="#customSearch", см. https://examples.bootstrap-table.com/index.html#options/search-selector.html#view-source*}
{* фильтры смотри тут https://examples.bootstrap-table.com/#extensions/filter-control.html#view-source *} {*субтаблицы смотри https://examples.bootstrap-table.com/#welcomes/sub-table.html*} {if $flag_nulls_off==1 and $flag_cat_title==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_unom==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_icu==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_vah==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_inom==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_number_of_poles==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_dops==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_type_of_residual_current==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_residual_current==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_reference_standard==1 or $flag_nulls_off!==1} {/if} {if $flag_nulls_off==1 and $flag_cat_modulus_multiple_of_9mm==1 or $flag_nulls_off!==1} {/if} {foreach $allsubcatarray as $subcat} {if $subcat!='' and ($subcat|resource: 'cat_off')=="Да"} {if $flag_nulls_off==1 and $flag_cat_title==1 or $flag_nulls_off!==1} {*Название серии*}{/if} {if $flag_nulls_off==1 and $flag_cat_unom==1 or $flag_nulls_off!==1} {*Номинальное напряжение (В)*}{/if} {if $flag_nulls_off==1 and $flag_cat_icu==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_vah==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_inom==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_number_of_poles==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_dops==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_type_of_residual_current==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_residual_current==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_reference_standard==1 or $flag_nulls_off!==1} {**}{/if} {if $flag_nulls_off==1 and $flag_cat_modulus_multiple_of_9mm==1 or $flag_nulls_off!==1} {**}{/if} {* Сделать карточками! *} {*делать подтаблицей список автоматов. см. примеры https://examples.bootstrap-table.com/#welcomes/sub-table.html#view-source *} {set $productssubcats = '!msProducts' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $subcat, 'limit' => '10000', 'depth' => '0', 'returnIds' =>'1' 'where' => ' { "class_key": "msProduct"}', ]} {if $productssubcats!=''} {set $productssubcats = $productssubcats|split} {foreach $productssubcats as $productsubcat} {/foreach} {/if} {/if} {/foreach}
Название серииНоминальное напряжение (В)Отключающая способность
Icu, Icn (кА)
Характеристика диапазона отключенияНоминальная сила тока (А)Кол-во полюсовАксессуарыТип по току утечкиТок утечкиСтандарт изделияКол-во модулей
(Кратное 9 мм)
{($subcat|resource: 'menutitle')?($subcat|resource: 'menutitle'):($subcat|resource: 'pagetitle')}
{$modx->runSnippet("getCountAllChildProducts", ['parents' => $subcat])} товаров
{($subcat|resource: 'cat_unom')}{($subcat|resource: 'cat_icu')}{($subcat|resource: 'cat_vah')}{($subcat|resource: 'cat_inom')}{($subcat|resource: 'cat_number_of_poles')}{($subcat|resource: 'cat_dops')}{($subcat|resource: 'cat_operation_type_of_residual_current')}{($subcat|resource: 'cat_rated_residual_operating_current_ma')}{($subcat|resource: 'cat_reference_standard')}{($subcat|resource: 'cat_modulus_multiple_of_9mm')}
{'!msProducts' | snippet : [ 'tpl' => $tpl_ProductTable_naderrus, 'limit' => 1000, 'parents' => $subcat, 'sortby' => 'id', 'sortdir' =>'ASC' ]}
ID Наименование Номинальный ток In Количество полюсов Коммутационная способность Icu
{else} {/if} {/if} {* убрал так как получается ошибка что несколько раз инициализируется таблица *} {else} {/if} {if $showproductsinchildcategories !=="false"}
{set $catalogid = 'idcatalog' | config}
{*Вывод товаров определяется настройками и логикой выше*}
{if ('getcountchildproducts'| snippet :[]) or $viborkaidproducts !=''} {*Если есть товары в категории или выборка по условиям отбора задана*}
Сортировать по: {*ИСПРАВИТЬ! Сделать ajax загрузку по фильтру*} Популярности Цене Новизне
{'!msProducts' | snippet : [ 'tpl' => $tpl_ProductCards_laprintcard, 'parents' => $parentsid, 'resources' => $viborkaidproducts, 'limit' => $limit, 'offset'=>$offsetvalue, 'includeTVs' => 'photowb,wburl', 'tvPrefix' => '', 'sortby' => $sortby, 'sortdir' =>$sortdir ]} {*'where' => ' { "Data.'~$wher~'":"1" }- пробелы перед и после фигурной скобки обязательны, иначе будет ошибка из-за особенностей парсинга fenom'*}
{*Вывод товаров*} {*вывод кнопок выбора отображения количества товаров на странице и пагинации*}
Выводить по: 16 32 64
{*ИСПРАВИТЬ! Неправильно, нужно вывод сделать на страницы выборки*} {'!pdoPage' | snippet : [ 'parents' => $parentsid, 'resources' => $viborkaidproducts, 'element'=>'msProducts', 'limit' => $limit, 'pageLimit' => 3, 'includeTVs' => 'photowb,wburl', 'tvPrefix' =>'', 'toPlaceholder' => 'result', 'sortby' => $sortby, 'sortdir' =>$sortdir, 'ajax' => '1' ]} {set $PageCount1 =('pageCount' | placeholder)} {if (($page|intval)==4)} {set $tplPageFirst2='
  • 2
  • '} {elseif (($page|intval)<=3)} {set $tplPageFirst2=''} {elseif (($page|intval)>=5)} {set $tplPageFirst2='
  • ...
  • '} {else} {/if} {if (($page|intval)<=3)} {set $tplPageFirst1=''} {elseif (($page|intval)>=4)} {set $tplPageFirst1='
  • 1
  • '} {else} {/if} {if (($page|intval)==1)} {set $tplPageLast1 = '
  • ...
  • '} {elseif (($page|intval)<($PageCount1|intval-3)) & ($PageCount1|intval)>=4} {set $tplPageLast1 = '
  • ...
  • '} {elseif (($page|intval)==($PageCount1|intval-3)) & ($PageCount1|intval)>=4} {set $tplPageLast1 = '
  • '~($page|intval+2)~'
  • '} {else} {$tplPageLast1 = ''} {/if} {if $page|intval<($PageCount1|intval)-1 & ($PageCount1|intval)>=4} {set $tplPageLast2='
  • '~$PageCount1~'
  • '} {else} {set $tplPageLast2 = ''}{*не выводим так как и так будет выведено*} {/if} {set $l1=' '} {set $r1=' '} {'!pdoPage' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $parentsid, 'element'=>'msProducts', 'resources' => $viborkaidproducts, 'limit' => $limit, 'pageLimit' => 3, 'toPlaceholder' => 'result', 'includeTVs' => 'photowb,wburl', 'tvPrefix' => '', 'sortby' => $sortby, 'sortdir' =>$sortdir, 'ajax' => '1', 'tplPageWrapper'=>'@INLINE ', 'tplPageActive' =>'@INLINE
  • ', 'tplPage' =>'@INLINE
  • ', 'tplPageLast'=> '@INLINE ' ~ $tplPageLast1 ~ $tplPageLast2, 'tplPageFirst'=> '@INLINE ' ~ $tplPageFirst1 ~$tplPageFirst2, 'tplPageLastEmpty'=>'', 'tplPageFirstEmpty' =>'', 'tplPagePrevEmpty'=>'', 'tplPageNextEmpty'=>'', 'tplPageNext'=>'@INLINE
  • ' ~ $r1 ~'
  • ', 'tplPagePrev'=>'@INLINE
  • ' ~ $l1 ~'
  • ' ]}{*'toPlaceholder' => 'result'*} {* {'result' | placeholder}*} {*повторяет вывод msProduct выше, для проверки пагинации*} {'page.nav' | placeholder} {*btn-primary rounded px-3 py-2 mx-2 a-la-pr fs-5 fw-bold*} {*попробовать https://modx.pro/help/6631#comment-128033*}
    {else}
    В категории пока нет товаров.
    {/if}
    {/if}
    {set $chunkanme = 'preimushestvacategorii'}
    {set $chunkanme = 'obrazec'} {set $slogan = 1 | resource :'voprosopodbore'}
    {$slogan}
    {set $chunkname = 'pomoshvpodbore'} {set $baseid= $modx->config.site_start}{*id главной страницы*} {set $knopka = $baseid| resource:'knopka_pomoshvpodbore'} {set $zag1 = $baseid | resource :'slogan_pomoshvpodbore'} {set $tekst2_pomoshvpodbore = $baseid | resource :'tekst2_pomoshvpodbore'} {set $tekst3_pomoshvpodbore = $baseid | resource :'tekst3_pomoshvpodbore'} {set $img_pomoshvpodbore = $baseid | resource :'img_pomoshvpodbore'}{*у картинки источник к папке assets/images/glavnaya/blocks/ по умолчанию man-electrical-technician-working-switchboard-with-fuses_1380_473.jpg*} {set $img_pomoshvpodbore_formobil = $baseid | resource :'img_pomoshvpodbore_formobil'}{*у картинки источник к папке assets/images/glavnaya/blocks/ по умолчанию man-electrical-technician-working-switchboard-with-fuses_320.jpg*}
    {$zag1}
    {$tekst2_pomoshvpodbore}

    {$tekst3_pomoshvpodbore}

    {$knopka}
    {*
    Помощь в подборе

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

    Присылайте нам ТЗ для подбора оборудования

    {$knopka}
    *}
    {*Общие переменные для всего сайта*} {set $catalogid = 'idcatalog' | config} {set $cats = '!pdoResources' | snippet : [ 'tpl' => '@INLINE ', 'parents' => $catalogid, 'limit' => '16', 'depth' => '0', 'returnIds' =>'1', 'sortby' =>'menuindex', 'sortdir'=>'ASC' ]} {set $topcategories = $cats |split} {* *} {if !$_modx->isAuthenticated()} {/if} {*'MinifyX.javascript' | placeholder*} {* поменял jQuery код на нативный читсый Javascript {*$(document).ready(function() { поменял на document.addEventListener('DOMContentLoaded', function() { $(document).on('af_complete', function(event, response) { заменил на document.addEventListener('af_complete', function(event, response) { *} {if $_modx->user.id == 1} {/if} {ignore}ignore_e5374faa7da16f73ecc0ccd4caf39b50{/ignore}