Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Требуется у свойства "В наличии" и "Нет в наличии" сделать разные цвета.

Автор koroganРаздел Шаблоны TPL

Ответов: 2
Просмотров: 3063
Последний ответ 09 Января 2012, 16:25:59
от korogan
Как сделать "Заказ в 1 шаг" на сайте выведенном с UMI

Автор tbm-mРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 3487
Последний ответ 01 Января 2016, 06:47:54
от admin
Как сделать ссылками элементы справочника из типа "Выпадающий список"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 2366
Последний ответ 08 Ноября 2014, 01:11:45
от admin
Как сделать вывод товаров в корзине отдельным скриптом на ajax

Автор volchovРаздел JS и AJAX

Ответов: 10
Просмотров: 9793
Последний ответ 16 Октября 2012, 17:15:13
от volchov
Возможно ли сделать это Показано 1 - 12 (всего 28 позиций)

Автор koroganРаздел Макросы UMI.CMS

Ответов: 1
Просмотров: 2384
Последний ответ 07 Января 2012, 11:42:00
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
Нужно сделать 2 кнопки в форме товара: переход к следующему, переход к предыдущему товару.
Мне хотя-бы идею, алгоритм для начала, там уже буду пробовать

я не знаю как мне получить id следующего, предыдущего товара, и передать его в вызов шаблона

<xsl:template match="/result[@module = 'catalog' and @method = 'object']">
<xsl:apply-templates select="document(concat('upage://', page/@id,'?show-empty'))/udata" mode="object-view" />
</xsl:template>

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
getCategoryList по ид объекта находите позицию (pos), повтороно вызвав getCategoryList и по позиции pos+1 pos-1 берете два ид следующего и предыдущего товара, а по ид и название и ссылка на объект.

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
не совсем понял, где вызывать getCategoryList, и зачем мне список категорий  :(

как мне кажется: (мой вариант)
в шаблоне обработки товара
<xsl:template match="udata" mode="object-view">
мы знаем parentId, т.е. Id родителя, потом вызываем что-то типа
document(concat('udata://catalog/getObjectsList/void/', page/@parentId, '////2/'))/udata
получаем список товаров в этой категории, потом нужен какой-то алгоритм, который на выходе давал два id (пред и след)
и потом создавать кнопки..

если есть у кого другие варианты, велком  :)
на сколько замедлит метод getObjectsList работу, хотя у меня пишет generation-time="0.074229", т.е. терпимо
еще нужно учитывать пейджинг, сортировку..

Было-бы лучше написать кастом на php, и вызывать типа getPrevNextId/@id
за основу взять
Кастомизация макроса catalog getObjectsList для ускорения формирования страницы
только переделать не umiSelection, а на selector, может кто возьмется
« Последнее редактирование: 17 Августа 2012, 09:54:54 от KTI »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
самый простой вариант пользоваться макросами udata://system/getNext и udata://system/getPrevious

или на основе данных макросов написать свой единый который сразу выводит и то и другое

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
на основе getNext, getPrev набросал свой (правда не учитывает сортировку, но мне и не надо):

	    public function getPrevNextId($elem_id = NULL) {
if(!$elem_id) return;
$element = umiHierarchy::getInstance()->getElement($elem_id);
if(!$element) return;
$parent_id = $element->getParentId();
$childs = umiHierarchy::getInstance()->getChilds($parent_id, false);
$result = array_keys($childs);
// print_r($result);
if (($sz = sizeof($result)) > 1) {
$block_arr = Array();
$empty_arr = array();
$empty_arr['attribute:link'] = "#";
$empty_arr['attribute:id'] = 0;

$prev_id = false;
$next_id = false;
foreach($result as $element_id) {
if($element_id == $elem_id) {
$next_id = current($result);
break;
} else {
$prev_id = $element_id;
}
}

if($prev_id !== false) {
$list = Array();
$list['attribute:id'] = $prev_id;
$list['attribute:link'] = umiHierarchy::getInstance()->getPathById($prev_id);
$block_arr['nodes:prev'][] = $list;
} else {
$block_arr['nodes:prev'][] = $empty_arr;
}
if($next_id !== false) {
$list = Array();
$list['attribute:id'] = $next_id;
$list['attribute:link'] = umiHierarchy::getInstance()->getPathById($next_id);
$block_arr['nodes:next'][] = $list;
} else {
$block_arr['nodes:next'][] = $empty_arr;
}
return $block_arr;
}
}


возвращает типа

<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="catalog" method="getPrevNextId" generation-time="0.011779">
<prev id="25" link="/shop/dvd_tehnika/dvd_pleery/akai_apa206c/"/>
<next id="28" link="/shop/dvd_tehnika/dvd_pleery/toshiba_srq660/"/>
</udata>
<!-- This page generated in 0.079422 secs -->

примечательно, что работает и на категориях, т.е. если ему передать id категории, то вернет id следующей и предыдущей категории.

Почему-то используется цикл (для поиска id в массиве), я хочу переделать, на что-то типа:
				$key = array_search($elem_id, $result);  
if ($key === false) {
return $empty_arr;}
switch ($key) {
case 0:
$next_id = $result[1];
$prev_id = 0;
break;
case $sz-1:
$prev_id = $result[$key-1];
$next_id = 0;
break;
default:
$next_id = $result[$key+1];
$prev_id = $result[$key-1];
break;
}         
 

« Последнее редактирование: 21 Августа 2012, 09:55:34 от KTI »