UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: alpotemkin от 27 Октября 2011, 19:35:53

Название: Вывод ссылки в определенных разделах
Отправлено: alpotemkin от 27 Октября 2011, 19:35:53
Доброго времени суток!

Есть вопрос следующего рода:

Условие:
Есть разделы: Одежда, Обувь, Экипировка, Прочее с уже существующими моделями.

Задача:
Надо вставить ссылку "Таблица размеров" в шаблон модели (default.tpl). Но показывать ее только в разделах Одежда и Обувь. Как это можно сделать?

Ибо ссылка вида <a href="#">%custom trnslText('Таблица размеров')%</a> выводится во всех моделях. А как и что прописать не знаю.
Название: Re:Вывод ссылки в определенных разделах
Отправлено: admin от 27 Октября 2011, 22:24:33
вариант номер 1: сделать для раздела Экипировка свой шаблон который будет работать с другим шаблоном для вывода элементов каталога (и в нем не будет ссылки), а в шаблоне default.tpl будет.

вариант номер 2: ссылку "Таблица размеров" выводить только в разделах Одежда, Обувь определяя это кастомным скриптом, который сравнивает id раздела текущего товара с id Одежды и Обуви

вариант номер 3: если у разделов Одежда, Обувь есть поля (то есть у них отдельный тип данных от Экипировки), которого нет в Экипировке то можно вывести это поле по спец шаблону, а в шаблоне вместо вывода содержимого этого поля вывести ссылку

В общем идеологически правильный это 1 вариант, но можно запариться назначать разные шаблоны.
Самый короткий это 2, но он будет зависим от id разделов, поменяешь их и надо будет править скрипт
Третий самый ушлый) вроде и зависит от того что правиться в админке, но в тоже время не самый очевидный с точки зрения идеологии разработки на umi

а вообще, в этом случае было бы удобнее на xslt делать)
Название: Re:Вывод ссылки в определенных разделах
Отправлено: alpotemkin от 28 Октября 2011, 00:53:45
Самый удобный вариант тут второй. Ибо в разделах очень много моделей. Запаришься менять шаблоны. И типы данных везде одинаковые, так что тоже не подходит. А насчет "зависим от id" - тут все нормально, ибо он не меняется.

А не подскажете ли пример? А то я в UMI слабоват как-то. Буду очень благодарен.
Название: Re:Вывод ссылки в определенных разделах
Отправлено: admin от 28 Октября 2011, 01:08:49
пишу на вскидку...
там где должна быть ссылка пишешь
%custom tableRazmer()%
,а в файле /classes/modules/custom.php , добавляешь функцию

public function tableRazmer() {
    $odejda_catalog_id=30;//id cataloga с одеждой
    $obyv_catalog_id=30;//id cataloga с обувью
    $page_id = cmsController::getInstance()->getCurrentElementId();// берем id текущей страницы
    $page = umiHierarchy::getInstance()->getElement($page_id); // получаем саму страницу
    if(!$page) return ; // если такой страницы не нашлось завершаем работу скрипта

    $allParents = umiHierarchy::getInstance()->getAllParents($id, true); //берем всех родителей страницы
    if (in_array($odejda_catalog_id, $allParents)) return '<a href="http://umihelp.ru">Наша ссылка</a>';
    if (in_array($obyv_catalog_id, $allParents)) return '<a href="http://umihelp.ru">Наша ссылка</a>';

    return ;
}
Название: Re:Вывод ссылки в определенных разделах
Отправлено: alpotemkin от 28 Октября 2011, 11:32:47
Странно, но почему-то не работает. Сделал я так:
1. В /tpls/catalog/default.tpl добавил %custom tableRazmer()%
2. В /classes/modules/custom.php добавил ваш скрипт со своими поправками.

Ниже пишу скрипт со своими поправками, вдруг где накосячил.
/// Start- Вывод ссылки "Таблица размеров"
public function tableRazmer() {
$gore_tex_id=23173;
$windstopper_id=37278;
$gornoliznaya_id=23240;
$puhovaya_id=23130;
$uteplennaya_id=23131;
$vetrozachitnaya_id=23172;
$soft_shell_id=23174;
$polartec_id=23175;
$termobelie_id=23176;
$treking_id=23242;
$multisport_id=23243;
$kids_id=23241;
$special_id=23244;
$acces_id=23245;
$page_id = cmsController::getInstance()->getCurrentElementId();// берем id текущей страницы
$page = umiHierarchy::getInstance()->getElement($page_id); // получаем саму страницу
if(!$page) return ; // если такой страницы не нашлось завершаем работу скрипта

$allParents = umiHierarchy::getInstance()->getAllParents($id, true); //берем всех родителей страницы
if (in_array($gore_tex_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($windstopper_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($gornoliznaya_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($puhovaya_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($uteplennaya_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($vetrozachitnaya_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($soft_shell_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($polartec_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($termobelie_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($treking_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($multisport_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($kids_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($special_id, $allParents)) return '<a href="#">Таблица размеров</a>';
if (in_array($acces_id, $allParents)) return '<a href="#">Таблица размеров</a>';

return;
}
/// End- Вывод ссылки "Таблица размеров"
Название: Re:Вывод ссылки в определенных разделах
Отправлено: admin от 28 Октября 2011, 11:39:06
ошибка в коде...

getAllParents($id, true) а переменной $id нет, есть $page_id, замени
Название: Re:Вывод ссылки в определенных разделах
Отправлено: alpotemkin от 28 Октября 2011, 11:49:29
Да, теперь все работает. Спасибо огромное, вы меня очень выручили!