Вывод скидки в карточке товара (TPL)

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.5

Задача - вывести скидку на товар (независимо от цены, т.е., к примеру, название скидки или ее описание) в карточке товара - точно также, как она выводится в корзине товаров. Для решения данной задачи воспользуемся кастомным макросом. В директории /classes/modules/emarket/ в файл __custom.php необходимо добавить следующий код:

public function fullDiscountInfo($elementId = null, $template = 'discount_info') {
    
    if(!$elementId) return null;
    $hierarchy = umiHierarchy::getInstance();
    $elementId = $this->analyzeRequiredPath($elementId);

    if($elementId == false) {
        throw new publicException("Wrong element id given");
    }
			
    $element = $hierarchy->getElement($elementId);
    if($element instanceof iUmiHierarchyElement == false) {
	throw new publicException("Wrong element id given");
    }

    list($tpl_block, $tpl_block_empty) = def_module::loadTemplates("emarket/discounts/".$template, 'discount_block', 'discount_block_empty');
			
    $discount = itemDiscount::search($element);
    $result = array(
        'attribute:element-id' => $elementId
    );
    if(!($discount instanceof discount)) return def_module::parseTemplate($tpl_block_empty, $result);
			
    $result['void:name'] = $discount->getName();
    $result['void:description'] = $discount->getValue('description');
    $result['void:discount_id'] = $discount->id;

    return def_module::parseTemplate($tpl_block, $result);
}

Теперь необходимо добавить шаблон discount_info.tpl в папку /tpls/emarket/discounts/ . В самом шаблоне пропишите следующий код:

<?php
$FORMS = array();

$FORMS['discount_block'] = <<<END

Название скидки - %name%, ее описание - %description%

END;

$FORMS['discount_block_empty'] = <<<END

Скидки нет

END;

?>

Далее, необходимо дать права на использования данного макроса. Для этого нужно создать файл permissions.custom.php в директории /classes/modules/emarket/ со следующим содержанием:

<?php
  $permissions = array('purchasing' => array('fullDiscountInfo'));
?>


Параметры: emarket fullDiscountInfo($elementId, $template)



$elementId

  Передаем id товара

$template

  Передаем шаблон отображения.

Вывод информации осуществляется по шаблону, указанному в параметре template. Вы можете не указывать этот параметр, тогда для вывода будет использован шаблон по умолчанию — discount_info.tpl.

Используемые шаблоны


Макрос оперирует шаблонами, находящимися в каталоге /tpls/emarket/discounts/


Используемые блоки шаблона


discount_block
   Блок оформления описания скидки.

%name%

   Название скидки.

%description%

   Описание скидки.

%discount_id%

   Идентификатор скидки.
discount_block_empty
   Используется в том случае, если необходимо вывести на страницу сообщение о том, что у товара нет скидки.