Помогите сократить запись на феном.
Всем привет. Подскажите как можно сократить запись:
разные отделы продают разные товары, у них разные телефоны. задача чтобы для отдельной категории и всех её дочерних категорий и товаров показывался телефон 999999999999, для остальных телефон 1111111111111.
Пробовал такой вариант:
Структура такая:
{if $_modx->resource.id==17 OR $_modx->resource.parent==17 OR $_modx->resource.id==358 OR $_modx->resource.parent==358 OR $_modx->resource.parent==39 OR $_modx->resource.parent==40 OR $_modx->resource.parent==41 OR $_modx->resource.parent==42 OR $_modx->resource.parent==43 OR $_modx->resource.parent==44 OR $_modx->resource.parent==406 OR $_modx->resource.parent==407 OR $_modx->resource.parent==408 OR $_modx->resource.parent==409 OR $_modx->resource.parent==410 OR $_modx->resource.parent==411}
<a href="tel:+999999999999"> <i class="fa fa-phone"></i> 999999999999</a>
{else}
<a href="tel:+1111111111111"> <i class="fa fa-phone"></i> 1111111111111</a>
{/if}
Суть такая:разные отделы продают разные товары, у них разные телефоны. задача чтобы для отдельной категории и всех её дочерних категорий и товаров показывался телефон 999999999999, для остальных телефон 1111111111111.
Пробовал такой вариант:
{if $_modx->resource.id in list $_modx->getChildIds(17,2)}
но не получается привязать аналогичный ресурс из другого контекста, 358й, и работает он только для дочерних, текущий не учитывает…Структура такая:
Комментарии: 18
Не знаю на сколько такая структура короче ))) но я бы так написал
{if in_array($_modx->resource.id, [17, 358]) ||
in_array($_modx->resource.parent, $_modx->getChildIds(17,2)) ||
in_array($_modx->resource.parent, $_modx->getChildIds(358,2))}
<a href="tel:+999999999999"> <i class="fa fa-phone"></i> 999999999999</a>
{else}
<a href="tel:+1111111111111"> <i class="fa fa-phone"></i> 1111111111111</a>
{/if}
Попробовал, к сожалению не работает такой вариант. Телефон 999999999999 показывает на других ресурсах (на всех кроме главной), которые к 17 и 358 не имеют отношения.
Посмотри что у тебя выводит:
{$_modx->getChildIds(17,2) | print_r}
{$_modx->getChildIds(358,2) | print_r}
на сколько я момню для getChildIds необходимо указывать контекст, а контексты у тебя там разные
Вот что вывело:
Array ( [0] => 39 [1] => 40 [2] => 41 [3] => 42 [4] => 43 [5] => 44 [6] => 334 [7] => 339 [8] => 338 [9] => 332 [10] => 333 [11] => 340 [12] => 341 [13] => 342 [14] => 348 [15] => 335 [16] => 336 [17] => 337 [18] => 343 [19] => 344 [20] => 345 [21] => 347 [22] => 346 [23] => 352 [24] => 349 [25] => 353 [26] => 350 [27] => 698 [28] => 755 [29] => 700 [30] => 702 [31] => 237 [32] => 757 [33] => 694 [34] => 696 [35] => 207 [36] => 127 [37] => 202 [38] => 203 [39] => 204 [40] => 201 [41] => 205 [42] => 206 [43] => 708 [44] => 710 [45] => 704 [46] => 706 [47] => 714 [48] => 759 [49] => 712 [50] => 760 ) 1 Array ( ) 1
{set $cid = [17,358]}
{if ($_modx->resource.id in $cid) || ($_modx->resource.parent in $_modx->getChildIds(17,2)) || ($_modx->resource.parent in $_modx->getChildIds(358,2))}{set $tel = "999999999999"}{else}{set $tel = "1111111111111"}{/if}
<a href="tel:+{$tel}"> <i class="fa fa-phone"></i> {$tel}</a>
спасибо, но так тоже не хочет работать.
работает если писать «in list», но видит дочерние документы только второго уровня вложенности, первый уровень не работает (на товарах меняет телефон, а на подкатегориях нет))
работает если писать «in list», но видит дочерние документы только второго уровня вложенности, первый уровень не работает (на товарах меняет телефон, а на подкатегориях нет))
Может, как-то так:
{set $cid = [17,358]}
{set $cparent = [17,39,40,41,42,43,44,358,406,407,408,409,410,411]}
{if ($_modx->resource.id in $cid) || ($_modx->resource.parent in $cparent)}{set $tel = "999999999999"}{else}{set $tel = "1111111111111"}{/if}
<a href="tel:+{$tel}"> <i class="fa fa-phone"></i> {$tel}</a>
О, спасибо, такой вариант рабочий:
{set $cid = [17,358]}
{set $cparent = [17,39,40,41,42,43,44,358,406,407,408,409,410,411]}
{if ($_modx->resource.id in list $cid) || ($_modx->resource.parent in list $cparent)}{set $tel = "999999999999"}
{else}
{set $tel = "1111111111111"}
{/if}
<a href="tel:+{$tel}"> <i class="fa fa-phone"></i> {$tel}</a>
но хотелось бы так, что бы не указывать дочерние ресурсы 39,40,41,42 и.т.д. прямо, так как категории могут добавляться… а указать самые родительские 17 и 358 и от них уже плясать..)
Нужно сниппет написать, чтобы получать всех родителей, и уже потом проверять если он или нет.
Сниппет примерно такой allParents:
Сниппет примерно такой allParents:
$patentId ='';
$parentIds = array_reverse($modx->getParentIds($id, 10, array('context' => 'web')));
if (isset($parentIds) && !empty($parentIds[1])) $patentId=$parentIds[1];
return $patentId;
Вызов примерно так:{set $cid = [17,358]}
{set $cparent = $_modx->runSnippet('!allParents', [
'id' => $_modx->resource.id,
])}
{if ($_modx->resource.id in list $cid) || ($cparent in list $cid)}{set $tel = "999999999999"}
{else}
{set $tel = "1111111111111"}
{/if}
<a href="tel:+{$tel}"> <i class="fa fa-phone"></i> {$tel}</a>
Прошу прощения не проверял. Возможно ошибки.
спасибо. позже попробую)
изначально хотелось упростить)
изначально хотелось упростить)
В общем пока остановился на таком варианте, работает:
{set $cid = [17,358]}
{if ($_modx->resource.id in list $cid) || ($_modx->resource.id in list $_modx->getChildIds(17,2)) || ($_modx->resource.id in list $_modx->getChildIds(358,2))}
<a href="tel:+999999999999"> <i class="fa fa-phone"></i> 999999999999</a>
{else}
<a href="tel:+1111111111111"> <i class="fa fa-phone"></i> 1111111111111</a>
{/if}
Всем огромнейшее спасибо!)
Вопрос: а в каких случаях будет выводиться 1111111111111?
Если правильно понял этот код, тогда везде выводится 1111111111111, кроме каталога и товаров внутри.
Так? Тогда в в шаблоне каталога и товара написать нужный номер и всё.
В Феном есть наследование шаблонов.
Если правильно понял этот код, тогда везде выводится 1111111111111, кроме каталога и товаров внутри.
Так? Тогда в в шаблоне каталога и товара написать нужный номер и всё.
В Феном есть наследование шаблонов.
всё верно, тел 1111111111 будет выводится везде, кроме одного каталога (в двух разных контекстах), его подкаталогов и товаров внутри его подкаталогов.
а в смысле в шаблоне каталога и товара?
у меня это шаблон тоже состоит из частей, телефоны находятся в шапке и футере, это чанки header и footer, которые одинаковые для всех шаблонов.
вот код шаблона для категории например:
а в смысле в шаблоне каталога и товара?
у меня это шаблон тоже состоит из частей, телефоны находятся в шапке и футере, это чанки header и footer, которые одинаковые для всех шаблонов.
вот код шаблона для категории например:
<!DOCTYPE html>
<html lang="{$_modx->config.cultureKey}">
<head>
{include "file:chunks/base_meta.tpl"}
</head>
<body>
<div class="wrapper">
{include 'file:chunks/base_header.tpl'}
<section id="category-grid">
<div class="container">
{block 'content'}
{/block}
{include 'file:chunks/base_category_sidebar.tpl'}
</div>
</section>
{include 'file:chunks/base_footer.tpl'}
</div>
{include 'file:chunks/base_scripts.tpl'}
</body>
</html>
а для товара используется вообще базовый шаблон:<!DOCTYPE html>
<html lang="{$_modx->config.cultureKey}">
<head>
{include 'file:chunks/base_meta.tpl'}
</head>
<body>
<div class="wrapper">
{include 'file:chunks/base_header.tpl'}
{block 'content'}
{/block}
{include 'file:chunks/base_footer.tpl'}
</div>
{include 'file:chunks/base_scripts.tpl'}
</body>
</html>
Опять же если я правильно понимаю всю суть задачи, то можно вот так.
Базовый шаблон:
Шаблон каталога/товара:
А в шапке (base_header.tpl) вставить в нужное место {$config.phone}
Базовый шаблон:
{block 'config'}
{set $config = [
'phone' = '99999999'
]}
{/block}
<!DOCTYPE html>
<html lang="{$_modx->config.cultureKey}">
<head>
{insert 'file:chunks/base_meta.tpl'}
</head>
<body>
<div class="wrapper">
{block 'header'}
{insert 'file:chunks/base_header.tpl'}
{/block}
{block 'body'}
{block 'content'}{/block}
{/block}
{block 'footer'}
{insert 'file:chunks/base_footer.tpl'}
{/block}
</div>
{insert 'file:chunks/base_scripts.tpl'}
</body>
</html>
Шаблон каталога/товара:
{extends 'template:Базовый шаблон'}
{block 'config'}
{set $config['phone'] = '111111111'}
{/block}
{block 'body'}
<section id="category-grid">
<div class="container">
{parent}
{insert 'file:chunks/base_category_sidebar.tpl'}
</div>
</section>
{/block}
А в шапке (base_header.tpl) вставить в нужное место {$config.phone}
Интересный вариант, возьму на вооружение, спасибо.
Не совсем понятна структура ресурсов.
Контексты — это что? Это просто разные языки (т.е. в контекстах товары дублируются, но на разных языках)?
Или контексты — это разные отделы, о которых идет речь (разные телефоны)?
Или каждая категория — это разный отдел?
Или как?
Если структура такая:
Контексты — это что? Это просто разные языки (т.е. в контекстах товары дублируются, но на разных языках)?
Или контексты — это разные отделы, о которых идет речь (разные телефоны)?
Или каждая категория — это разный отдел?
Или как?
Если структура такая:
Общий каталог
- каталог для 1-го отдела
-- товар
-- товар
- каталог для 2-го отдела
-- товар
-- товар
Тогда можно сделать ТВ у каталога и в шаблоне написать просто:{$_modx->resource.parent|resource:'tv_phone'}
предвидя подобные вопросы, даже картинку сделал… ташожтакое...)
Так всегда. С твоей стороны кажется все понятно. А с моей не совсем, я нюансов многих не знаю.
На картинке не понятно какой из ресурсов является отдельным отделом, для которых нужен отдельный телефон.
Судя по коду вообще все ресурсы, которые на картинке должны иметь один и тот же телефон, а остальные другой.
На картинке не понятно какой из ресурсов является отдельным отделом, для которых нужен отдельный телефон.
Судя по коду вообще все ресурсы, которые на картинке должны иметь один и тот же телефон, а остальные другой.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.