https://wiki.umisoft.ru/api.php?action=feedcontributions&user=Yulia&feedformat=atomUmicms - Вклад участника [ru]2024-03-29T06:03:09ZВклад участникаMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%BC&diff=4458Вызов методов одного модуля в другом2013-03-04T12:49:09Z<p>Yulia: Новая страница: «Возникают задачи, когда необходимо воспользоваться функционалом модуля, находясь при это…»</p>
<hr />
<div>Возникают задачи, когда необходимо воспользоваться функционалом модуля, находясь при этом не в нем. В данном случае получить доступ к другому модулю можно через методы объекта экземпляра класса этого модуля.<br />
Для получения такого объекта необходимо вызвать метод getModule класса cmsController:<br />
<br />
<source lang="php"><br />
if ($oUsersMdl = cmsController::getInstance()->getModule("users")) {<br />
if ($oUsersMdl->is_auth()) {<br />
echo "Здравствуйте, " . $oUsersMdl->user_fullname . " (" .$oUsersMdl->user_login . ")";<br />
} else {<br />
echo "Вы гость";<br />
}<br />
} else {<br />
echo "Не удалось загрузить модуль";<br />
}<br />
</source><br />
<br />
В приведенном выше примере мы получили экземпляр модуля "users" и все доступные у него методы и свойства <br />
(в качестве примера проверили, авторизован ли пользователь).<br />
<br />
Для вызова модулей core, system и custom следует использовать запись:<br />
<br />
<source lang="php"><br />
if($macros['module'] == "core" || $macros['module'] == "system" || $macros['module'] == "custom") {<br />
$module = &system_buildin_load($macros['module']);<br />
} else {<br />
$module = cmsController::getInstance()->getModule($macros['module']);<br />
}<br />
</source><br />
<br />
Если модуль загрузить не удастся, то метод getModule вернет false.</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4457Участник:Yulia2013-03-04T12:45:23Z<p>Yulia: </p>
<hr />
<div>== Март: ==<br />
<ul><br />
<li>[[Вызов методов одного модуля в другом]]</li><br />
</ul><br />
<br />
== Февраль: ==<br />
<ul><br />
<li>[[Обрамление тегом p (Параграф)]]</li><br />
<li>[[Создание своих типов доставки]]</li><br />
</ul><br />
<br />
== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
<li>[[Вывод всех постов пользователя]]</li><br />
<li>[[Вывод превью других товаров из раздела (xslt)]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
<li>[[Скидка по карте]]</li><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&diff=4443Создание своих типов доставки2013-02-21T13:30:50Z<p>Yulia: </p>
<hr />
<div>Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
$className = "my";<br />
$deliveryName = "Моя доставка";<br />
<br />
include "standalone.php";<br />
<br />
$objectTypesCollection = umiObjectTypesCollection::getInstance();<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
<br />
// получаем родительский тип<br />
$parentTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-delivery");<br />
<br />
// Тип для внутреннего объека, связанного с публичным типом<br />
$internalTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-deliverytype");<br />
$typeId = $objectTypesCollection->addType($parentTypeId, $deliveryName);<br />
<br />
// Создаем внутренний объект<br />
$internalObjectId = $objectsCollection->addObject($deliveryName, $internalTypeId);<br />
$internalObject = $objectsCollection->getObject($internalObjectId);<br />
$internalObject->setValue("class_name", $className); // имя класса для реализации<br />
<br />
// связываем его с типом<br />
$internalObject->setValue("delivery_type_id", $typeId);<br />
$internalObject->setValue("delivery_type_guid", "user-emarket-delivery-" . $typeId);<br />
$internalObject->commit();<br />
<br />
// Связываем внешний тип и внутренний объект<br />
$type = $objectTypesCollection->getType($typeId);<br />
$type->setGUID($internalObject->getValue("delivery_type_guid"));<br />
$type->commit();<br />
<br />
echo "Готово!";<br />
?><br />
</source><br />
<br />
Мы добавили новый '''тип''' доставки с именем "Моя доставка", теперь необходимо реализовать '''способ''' доставки.<br />
Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php. <br />
Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.<br />
<br />
<source lang="php"><br />
<?php<br />
class myDelivery extends delivery {<br />
<br />
/**<br />
* Определяем, возможен ли данный способ доставки для заказа<br />
* @param order $order заказ<br />
* @return bool<br />
*/<br />
public function validate(order $order) {<br />
return ($order->getActualPrice() > 1200);<br />
}<br />
<br />
/**<br />
* Стоимость доставки для заказа<br />
* @param order $order заказ<br />
* @return int стоимость<br />
*/<br />
public function getDeliveryPrice(order $order) {<br />
return 500;<br />
}<br />
<br />
};<br />
?><br />
</source><br />
<br />
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:<br />
<br />
<source lang="php"><br />
public function getDeliveryPrice(order $order) {<br />
return $this->object->getValue('price');<br />
}<br />
</source><br />
<br />
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.<br />
<br />
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.<br />
<br />
[[Категория:Модуль Интернет магазин]][[Категория: API]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&diff=4442Создание своих типов доставки2013-02-21T13:25:07Z<p>Yulia: </p>
<hr />
<div>Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
$className = "my";<br />
$deliveryName = "Моя доставка";<br />
<br />
include "standalone.php";<br />
<br />
$objectTypesCollection = umiObjectTypesCollection::getInstance();<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
<br />
// получаем родительский тип<br />
$parentTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-delivery");<br />
<br />
// Тип для внутреннего объека, связанного с публичным типом<br />
$internalTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-deliverytype");<br />
$typeId = $objectTypesCollection->addType($parentTypeId, $deliveryName);<br />
<br />
// Создаем внутренний объект<br />
$internalObjectId = $objectsCollection->addObject($deliveryName, $internalTypeId);<br />
$internalObject = $objectsCollection->getObject($internalObjectId);<br />
$internalObject->setValue("class_name", $className); // имя класса для реализации<br />
<br />
// связываем его с типом<br />
$internalObject->setValue("delivery_type_id", $typeId);<br />
$internalObject->setValue("delivery_type_guid", "user-emarket-delivery-" . $typeId);<br />
$internalObject->commit();<br />
<br />
// Связываем внешний тип и внутренний объект<br />
$type = $objectTypesCollection->getType($typeId);<br />
$type->setGUID($internalObject->getValue("delivery_type_guid"));<br />
$type->commit();<br />
<br />
echo "Готово!";<br />
?><br />
</source><br />
<br />
Мы добавили новый '''тип''' доставки с именем "Моя доставка", теперь необходимо реализовать '''способ''' доставки.<br />
Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php. <br />
Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.<br />
<br />
<source lang="php"><br />
<?php<br />
class myDelivery extends delivery {<br />
<br />
/**<br />
* Определяем, возможен ли данный способ доставки для заказа<br />
* @param order $order заказ<br />
* @return bool<br />
*/<br />
public function validate(order $order) {<br />
return ($order->getActualPrice() > 1200);<br />
}<br />
<br />
/**<br />
* Стоимость доставки для заказа<br />
* @param order $order заказ<br />
* @return int стоимость<br />
*/<br />
public function getDeliveryPrice(order $order) {<br />
return 500;<br />
}<br />
<br />
};<br />
?><br />
</source><br />
<br />
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:<br />
<br />
<source lang="php"><br />
public function getDeliveryPrice(order $order) {<br />
return $this->object->getValue('price');<br />
}<br />
</source><br />
<br />
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.<br />
<br />
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&diff=4441Создание своих типов доставки2013-02-21T13:23:33Z<p>Yulia: </p>
<hr />
<div>Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
$className = "my";<br />
$deliveryName = "Моя доставка";<br />
<br />
include "standalone.php";<br />
<br />
$objectTypesCollection = umiObjectTypesCollection::getInstance();<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
<br />
// получаем родительский тип<br />
$parentTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-delivery");<br />
<br />
// Тип для внутреннего объека, связанного с публичным типом<br />
$internalTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-deliverytype");<br />
$typeId = $objectTypesCollection->addType($parentTypeId, $deliveryName);<br />
<br />
// Создаем внутренний объект<br />
$internalObjectId = $objectsCollection->addObject($deliveryName, $internalTypeId);<br />
$internalObject = $objectsCollection->getObject($internalObjectId);<br />
$internalObject->setValue("class_name", $className); // имя класса для реализации<br />
<br />
// связываем его с типом<br />
$internalObject->setValue("delivery_type_id", $typeId);<br />
$internalObject->setValue("delivery_type_guid", "user-emarket-delivery-" . $typeId);<br />
$internalObject->commit();<br />
<br />
// Связываем внешний тип и внутренний объект<br />
$type = $objectTypesCollection->getType($typeId);<br />
$type->setGUID($internalObject->getValue("delivery_type_guid"));<br />
$type->commit();<br />
<br />
echo "Готово!";<br />
?><br />
</source><br />
<br />
Мы добавили новый '''тип''' доставки с именем "Моя доставка", теперь необходимо реализовать '''способ''' доставки.<br />
Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php. <br />
Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.<br />
<br />
<source lang="php"><br />
<?php<br />
class myDelivery extends delivery {<br />
<br />
/**<br />
* Определяем, возможен ли данный способ доставки для заказа<br />
* @param order $order заказ<br />
* @return bool<br />
*/<br />
public function validate(order $order) {<br />
return ($order->getActualPrice() > 1200);<br />
}<br />
<br />
/**<br />
* Стоимость доставки для заказа<br />
* @param order $order заказ<br />
* @return int стоимость<br />
*/<br />
public function getDeliveryPrice(order $order) {<br />
return 500;<br />
}<br />
<br />
};<br />
?><br />
</source><br />
<br />
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:<br />
<br />
<source lang="php"><br />
public function getDeliveryPrice(order $order) {<br />
return $this->object->getValue(price);<br />
}<br />
</source><br />
<br />
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.<br />
<br />
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&diff=4440Создание своих типов доставки2013-02-21T13:18:10Z<p>Yulia: Новая страница: «Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него …»</p>
<hr />
<div>Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
$className = "my";<br />
$deliveryName = "Моя доставка";<br />
<br />
include "standalone.php";<br />
<br />
$objectTypesCollection = umiObjectTypesCollection::getInstance();<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
<br />
// получаем родительский тип<br />
$parentTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-delivery");<br />
<br />
// Тип для внутреннего объека, связанного с публичным типом<br />
$internalTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-deliverytype");<br />
$typeId = $objectTypesCollection->addType($parentTypeId, $deliveryName);<br />
<br />
// Создаем внутренний объект<br />
$internalObjectId = $objectsCollection->addObject($deliveryName, $internalTypeId);<br />
$internalObject = $objectsCollection->getObject($internalObjectId);<br />
$internalObject->setValue("class_name", $className); // имя класса для реализации<br />
<br />
// связываем его с типом<br />
$internalObject->setValue("delivery_type_id", $typeId);<br />
$internalObject->setValue("delivery_type_guid", "user-emarket-delivery-" . $typeId);<br />
$internalObject->commit();<br />
<br />
// Связываем внешний тип и внутренний объект<br />
$type = $objectTypesCollection->getType($typeId);<br />
$type->setGUID($internalObject->getValue("delivery_type_guid"));<br />
$type->commit();<br />
<br />
echo "Готово!";<br />
?><br />
</source><br />
<br />
Мы добавили новый '''тип''' доставки с именем "Моя доставка", теперь необходимо реализовать '''способ''' доставки.<br />
Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php. <br />
Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.<br />
<br />
<source lang="php"><br />
<?php<br />
class myDelivery extends delivery {<br />
<br />
/**<br />
* Определяем, возможен ли данный способ доставки для заказа<br />
* @param order $order заказ<br />
* @return bool<br />
*/<br />
public function validate(order $order) {<br />
return ($order->getActualPrice() > 1200);<br />
}<br />
<br />
/**<br />
* Стоимость доставки для заказа<br />
* @param order $order заказ<br />
* @return int стоимость<br />
*/<br />
public function getDeliveryPrice(order $order) {<br />
return 500;<br />
}<br />
<br />
};<br />
?><br />
</source><br />
<br />
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:<br />
<br />
<source lang="php"><br />
public function getDeliveryPrice(order $order) {<br />
return $this->object->getValue(price);<br />
}<br />
</source><br />
<br />
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4439Участник:Yulia2013-02-21T12:53:32Z<p>Yulia: /* Февраль: */</p>
<hr />
<div>== Февраль: ==<br />
<ul><br />
<li>[[Обрамление тегом p (Параграф)]]</li><br />
<li>[[Создание своих типов доставки]]</li><br />
</ul><br />
<br />
== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
<li>[[Вывод всех постов пользователя]]</li><br />
<li>[[Вывод превью других товаров из раздела (xslt)]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
<li>[[Скидка по карте]]</li><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4398Участник:Yulia2013-02-06T09:10:18Z<p>Yulia: </p>
<hr />
<div>== Февраль: ==<br />
<ul><br />
<li>[[Обрамление тегом p (Параграф)]]</li><br />
</ul><br />
<br />
== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
<li>[[Вывод всех постов пользователя]]</li><br />
<li>[[Вывод превью других товаров из раздела (xslt)]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
<li>[[Скидка по карте]]</li><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BF%D1%80%D0%B5%D0%B2%D1%8C%D1%8E_%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_(xslt)&diff=4395Вывод превью других товаров из раздела (xslt)2013-01-31T16:43:13Z<p>Yulia: </p>
<hr />
<div>Задача: необходимо в карточке товара вывести превью других товаров из этого же раздела каталога.<br />
<br />
Получим все товары в разделе с помощью выборки Usel, для этого создадим файл /usels/optional.xml и поместим в него следующий код:<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="utf-8"?><br />
<selection><br />
<target result="pages"><br />
<type module="catalog" method="object" /><br />
<category depth="1">{parent}</category><br />
</target><br />
<extended><br />
<properties>photo</properties><br />
</extended><br />
</selection><br />
</source><br />
<br />
В шаблоне вывода карточки товара в файле /www/templates/demodizzy/xslt/modules/catalog/object-view.xsl в нужном месте прописываем вызов Usel. Предварительно заведем переменную, в которой будет id текущего раздела, и передадим ее в качестве параметра для Usel:<br />
<br />
<source lang="xml"><br />
<xsl:variable name="par" > <br />
<xsl:value-of select=".//page/@parentId" /><br />
</xsl:variable><br />
<br />
<xsl:apply-templates select="document(concat('usel://optional/?parent=',$par))" mode="other" /><br />
</source><br />
<br />
Заведем переменную, в которую будет передаваться id страницы текущего товара, чтобы впоследствии не отображать его в результатах выборки:<br />
<source lang="xml"><br />
<xsl:variable name="current"><br />
<xsl:value-of select="result/page/@id" /><br />
</xsl:variable><br />
</source><br />
<br />
Далее пропишем шаблон обработки результатов выборки:<br />
<source lang="xml"><br />
<xsl:template match="page" mode="other"><br />
<xsl:variable name="oth"> <br />
<xsl:value-of select=".//@id" /> <br />
</xsl:variable><br />
<xsl:if test="$current!=$oth"><br />
<xsl:variable name="pic_path" select=".//property[@name='photo']/value" /><br />
<xsl:variable name="pic_min" select="document(concat('udata://system/makeThumbnail/(.', $pic_path, ')/100/100'))/udata/src"/><br />
<xsl:variable name="obj_path" select=".//@link" /><br />
<a href="{$obj_path}"><img src="{$pic_min}"/></a><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
В результате получим уменьшенные изображения остальных товаров, которые являются ссылками на страницы этих товаров.<br />
<br />
[[Категория:Модуль Каталог]][[Категория:Верстка в XSLT]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BF%D1%80%D0%B5%D0%B2%D1%8C%D1%8E_%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_(xslt)&diff=4394Вывод превью других товаров из раздела (xslt)2013-01-31T11:42:00Z<p>Yulia: Новая страница: «Задача: необходимо в карточке товара вывести превью других товаров из этого же раздела ка…»</p>
<hr />
<div>Задача: необходимо в карточке товара вывести превью других товаров из этого же раздела каталога.<br />
<br />
Получим все товары в разделе с помощью выборки Usel, для этого создадим файл /usels/optional.xml и поместим в него следующий код:<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="utf-8"?><br />
<selection><br />
<target result="pages"><br />
<type module="catalog" method="object" /><br />
<category depth="1">{parent}</category><br />
</target><br />
<extended><br />
<properties>photo</properties><br />
</extended><br />
</selection><br />
</source><br />
<br />
В шаблоне вывода карточки товара в файле /www/templates/demodizzy/xslt/modules/catalog/object-view.xsl в нужном месте прописываем вызов Usel. Предварительно заведем переменную, в которой будет id текущего раздела, и передадим ее в качестве параметра для Usel:<br />
<br />
<source lang="xml"><br />
<xsl:variable name="par" > <br />
<xsl:value-of select=".//page/@parentId" /><br />
</xsl:variable><br />
<br />
<xsl:apply-templates select="document(concat('usel://optional/?parent=',$par))" mode="other" /><br />
</source><br />
<br />
Заведем переменную, в которую будет передаваться id страницы текущего товара, чтобы впоследствии не отображать его в результатах выборки:<br />
<source lang="xml"><br />
<xsl:variable name="current"><br />
<xsl:value-of select="result/page/@id" /><br />
</xsl:variable><br />
</source><br />
<br />
Далее пропишем шаблон обработки результатов выборки:<br />
<source lang="xml"><br />
<xsl:template match="page" mode="other"><br />
<xsl:variable name="oth"> <br />
<xsl:value-of select=".//@id" /> <br />
</xsl:variable><br />
<xsl:if test="$current!=$oth"><br />
<xsl:variable name="pic_path" select=".//property[@name='photo']/value" /><br />
<xsl:variable name="pic_min" select="document(concat('udata://system/makeThumbnail/(.', $pic_path, ')/100/100'))/udata/src"/><br />
<xsl:variable name="obj_path" select=".//@link" /><br />
<a href="{$obj_path}"><img src="{$pic_min}"/></a><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
В результате получим уменьшенные изображения остальных товаров, которые являются ссылками на страницы этих товаров.</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4393Участник:Yulia2013-01-31T11:19:21Z<p>Yulia: </p>
<hr />
<div>== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
<li>[[Вывод всех постов пользователя]]</li><br />
<li>[[Вывод превью других товаров из раздела (xslt)]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
<li>[[Скидка по карте]]</li><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%B2%D1%81%D0%B5%D1%85_%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D0%B2_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&diff=4392Вывод всех постов пользователя2013-01-30T06:04:56Z<p>Yulia: </p>
<hr />
<div>Задача: вывести все посты в блогах, созданные определенным пользователем.<br />
<br />
Для реализации данной задачи напишем кастомный макрос в файле /classes/modules/custom.php:<br />
<br />
<source lang="php"><br />
public function postList($id){<br />
$posts = new selector('pages');<br />
$posts->types('hierarchy-type')->name('blogs20', 'post');<br />
$posts->where('owner')->equals($id);<br />
$res = "";<br />
foreach ($posts as $post){<br />
$res.= "<li><a href=\"{$post->link}\">{$post->name}</a>\n";<br />
}<br />
return $res;<br />
}<br />
</source><br />
<br />
Каждый найденный пост будет оформляться в виде ссылки и выводиться списком.<br />
<br />
Вызов кастома пропишем в шаблоне /templates/demoold/tpls/users/profile/default.tpl, который отвечает за вывод страницы с профилем пользователя. При вызове кастома передаем id пользователя:<br />
<br />
<pre><br />
Посты в блогах:<br />
<ul>%custom postList(%id%)%</ul><br />
</pre><br />
<br />
[[Категория:Написание кастомных макросов]][[Категория:Модуль Блоги20]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%B2%D1%81%D0%B5%D1%85_%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D0%B2_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&diff=4391Вывод всех постов пользователя2013-01-30T06:04:20Z<p>Yulia: Новая страница: «Задача: вывести все посты в блогах, созданные определенным пользователем. Для реализации …»</p>
<hr />
<div>Задача: вывести все посты в блогах, созданные определенным пользователем.<br />
<br />
Для реализации данной задачи напишем кастомный макрос в файле /classes/modules/custom.php:<br />
<br />
<source lang="php"><br />
public function postList($id){<br />
$posts = new selector('pages');<br />
$posts->types('hierarchy-type')->name('blogs20', 'post');<br />
$posts->where('owner')->equals($id);<br />
$res = "";<br />
foreach ($posts as $post){<br />
$res.= "<li><a href=\"{$post->link}\">{$post->name}</a>\n";<br />
}<br />
return $res;<br />
}<br />
</source><br />
<br />
Каждый найденный пост будет оформляться в виде ссылки и выводиться списком.<br />
<br />
Вызов кастома пропишем в шаблоне \templates\demoold\tpls\users\profile\default.tpl, который отвечает за вывод страницы с профилем пользователя. При вызове кастома передаем id пользователя:<br />
<br />
<pre><br />
Посты в блогах:<br />
<ul>%custom postList(%id%)%</ul><br />
</pre><br />
<br />
[[Категория:Написание кастомных макросов]][[Категория:Модуль Блоги20]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4390Участник:Yulia2013-01-30T05:43:17Z<p>Yulia: </p>
<hr />
<div>== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
<li>[[Вывод всех постов пользователя]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul><br />
<ul><br />
<li>[[Скидка по карте]]</li><br />
</ul><br />
<ul><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4374Участник:Yulia2013-01-04T09:26:54Z<p>Yulia: </p>
<hr />
<div>== Январь: ==<br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
</ul><br />
<br />
== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul><br />
<ul><br />
<li>[[Скидка по карте]]</li><br />
</ul><br />
<ul><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4368Участник:Yulia2012-12-29T12:39:09Z<p>Yulia: </p>
<hr />
<div>== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul><br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
</ul><br />
<ul><br />
<li>[[Скидка по карте]]</li><br />
</ul><br />
<ul><br />
<li>[[Отображение в счёте для юридических лиц цены с НДС]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%81%D1%87%D1%91%D1%82%D0%B5_%D0%B4%D0%BB%D1%8F_%D1%8E%D1%80%D0%B8%D0%B4%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BB%D0%B8%D1%86_%D1%86%D0%B5%D0%BD%D1%8B_%D1%81_%D0%9D%D0%94%D0%A1&diff=4367Отображение в счёте для юридических лиц цены с НДС2012-12-29T12:37:03Z<p>Yulia: </p>
<hr />
<div>Задача: нужно в счёте для юридических лиц выводить цену с указанным НДС.<br />
<br />
Решение: редактируем шаблон, по которому выводится упомянутый выше счет. Находится он в файле \templates\demodizzy\xslt\sys-tpls\emarket-invoice.xsl.<br />
<br />
Следует завести несколько переменных после строчки <br />
<source lang="xml"><br />
<table bgcolor="#FFFFFF" width="620" height="1000" cellpadding="1" cellspacing="0" border="1"><br />
</source><br />
чтобы не было проблем с областью видимости:<br />
<br />
1) НДС 18%: <br />
<source lang="xml"><xsl:variable name="nds" select="0.18" /> </source><br />
2) получим значение первоначальной цены: <br />
<source lang="xml"><xsl:variable name="price"><br />
<xsl:value-of select="$total_price" /><br />
</xsl:variable></source><br />
3) в этой переменной будет рассчитываться сам НДС в зависимости от цены:<br />
<source lang="xml"><xsl:variable name="nds_count" select="$price * $nds" /></source><br />
4) в этой переменной рассчитывается окончательная цена, с учетом НДС:<br />
<source lang="xml"><xsl:variable name="price_nds" select="$price + $nds_count" /></source><br />
<br />
Далее вносим изменения в сами ячейки квитанции. <br />
После строчки <br />
<source lang="xml"><br />
<td colspan="5" align="right" valign="top"><b>В том числе НДС (18%):</b></td> <br />
</source><br />
следует написать:<br />
<source lang="xml"><br />
<td align="center" valign="top"><xsl:value-of select="format-number($nds_count, '#.##')" /></td><br />
</source><br />
это сформирует вывод значения, котрое мы получили в переменной в п.3.<br />
<br />
После строчки <br />
<source lang="xml"><br />
<td colspan="5" align="right" valign="top"><b>Всего к оплате:</b></td> <br />
</source><br />
пишем:<br />
<source lang="xml"><br />
<td align="right" valign="top"><xsl:value-of select="format-number($price_nds, '#.##')" /></td><br />
</source><br />
эта строка выведет значение, которое мы получили в переменной в п.4.<br />
<br />
Затем в строчке<br />
<source lang="xml"><br />
Всего наименований <xsl:value-of select="//property[@name='total_amount']/value" />, на сумму <xsl:value-of select="format-number(//property[@name='total_price']/value, '#.##')" /> руб.<br />
</source><br />
и в строчке <br />
<source lang="xml"><br />
<b>(<xsl:value-of select="php:function('sumToString', number(//property[@name='total_price']/value))" />)</b><br />
</source><br />
следует заменить //property[@name='total_price']/value на $price_nds, чтобы выводить сумму с учетом налога.<br />
<br />
[[Категория:Модуль Интернет магазин]] [[Категория:XSLT шаблонизатор]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%BA%D0%B0%D1%80%D1%82%D0%B5&diff=4366Скидка по карте2012-12-28T14:13:31Z<p>Yulia: Новая страница: «Задача: активировать скидку, если у пользователя есть дисконтная карта. Создадим новый ти…»</p>
<hr />
<div>Задача: активировать скидку, если у пользователя есть дисконтная карта.<br />
<br />
Создадим новый тип данных "номер карты" в модуле "шаблоны данных" и отметим галочки Общедоступный и Можно использовать как справочник. В справочнике, который соответствует этому типу, будут храниться номера дисконтных карт.<br />
Далее нужно создать новый тип, дочерний к типу "правила скидок". Идентификатор - counts, Тип скидки - на заказ, тип данных - id созданного ранее типа данных с номерами карт.<br />
В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете). В примере - card_discount.<br />
При создании новой скидки выберем тип "на заказ" и в качестве правила скидки - созданное выше.<br />
В файле /classes/modules/emarket/classes/discounts/rules/counts.php (его необходимо создать) пишем следующий код:<br />
<source lang="php"><br />
<?php<br />
class countsDiscountRule extends discountRule implements orderDiscountRule {<br />
<br />
public function validateOrder(order $order) {<br />
<br />
$permissions = permissionsCollection::getInstance();<br />
$currentUserId = $permissions->getUserId();<br />
$objects = umiObjectsCollection::getInstance();<br />
$userObject = $objects->getObject($currentUserId);<br />
<br />
if($userObject instanceof umiObject) {<br />
$cardNum = $userObject->getValue("card_discount"); <br />
$nums = new selector ('objects');<br />
$nums->types('object-type')->id('127');<br />
$nums->where('name')->equals($cardNum);<br />
$res=$nums->result;<br />
if(count($res)){<br />
return true;<br />
}else{<br />
return false;<br />
}<br />
}<br />
}<br />
};<br />
?><br />
</source><br />
<br />
В данном примере 127 - это id созданного справочника с номерами карт.<br />
Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.<br />
[[Категория:Модуль Интернет магазин]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4365Участник:Yulia2012-12-28T14:08:19Z<p>Yulia: </p>
<hr />
<div>== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul><br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
</ul><br />
<ul><br />
<li>[[Скидка по карте]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2&diff=4364Вывод общего количества проданных товаров2012-12-27T15:12:12Z<p>Yulia: Новая страница: «Для решения этой задачи используем кастомный макрос, который будет делать выборку заказо…»</p>
<hr />
<div>Для решения этой задачи используем кастомный макрос, который будет делать выборку заказов со статусом "готов" и подсчитывать количество товаров в них. Для этого в файле /classes/modules/custom.php пишем следующий код после строки //TODO: Write your own macroses here:<br />
<source lang="php"><br />
public function soldItemsTotal(){<br />
$orders = new selector('objects');<br />
$orders->types('object-type')->name('emarket','order');<br />
$orders->where('status_id')->equals('20'); <br />
$itemsTotal = 0; <br />
foreach($orders as $order){ <br />
$itemsOrder = $order->getValue('total_amount'); <br />
$itemsTotal += $itemsOrder; <br />
} <br />
return $itemsTotal; <br />
}<br />
</source><br />
<br />
Вызвать этот макрос можно в шаблоне следующим образом: %custom soldItemsTotal()%, выведется общее количество проданных товаров.<br />
<br />
[[Категория:Написание кастомных макросов]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4363Участник:Yulia2012-12-27T15:04:01Z<p>Yulia: </p>
<hr />
<div>== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul><br />
<ul><br />
<li>[[Вывод общего количества проданных товаров]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%87%D0%B5%D0%BA%D0%B1%D0%BE%D0%BA%D1%81%D0%BE%D0%B2_%D0%BF%D1%80%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&diff=4362Использование чекбоксов при фильтрации2012-12-27T14:59:51Z<p>Yulia: Новая страница: «Задача: в фильтре товаров выводить значения свойства не выпадающим списком, а в виде чекбо…»</p>
<hr />
<div>Задача: в фильтре товаров выводить значения свойства не выпадающим списком, а в виде чекбоксов.<br />
<br />
Необходимо добавить следующий код в шаблон /templates/имя_шаблона/xslt/modules/catalog/search-filter.xsl :<br />
<source lang="xml"><br />
<xsl:template match="field[@name = 'cvet']" mode="search"><br />
<div><br />
<label><br />
<xsl:value-of select="@title" /><br />
<xsl:apply-templates select="values/item" mode="searchTest" /><br />
</label><br />
</div><br />
</xsl:template><br />
<br />
<xsl:template match="values/item" mode="searchTest"><br />
<span><br />
<input type="checkbox" name="fields_filter[cvet][]" value="{@id}"> <br />
<xsl:if test="checked"><br />
<xsl:attribute name="checked">checked</xsl:attribute><br />
</xsl:if><br />
</input><br />
<xsl:value-of select="." /><br />
</span><br />
</xsl:template> <br />
</source><br />
<br />
В данном примере 'cvet' - это идентификатор поля "цвет" для товара. <br />
Таким образом, все варианты цвета будут выводиться в виде чекбоксов и будет возможна смешанная фильтрация.<br />
<br />
Данный способ был проверен в версии 2.8.6.<br />
<br />
[[Категория:Модуль Каталог]]</div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4361Участник:Yulia2012-12-27T14:46:06Z<p>Yulia: </p>
<hr />
<div>== Декабрь: ==<br />
<br />
<ul><br />
<li>[[Использование чекбоксов при фильтрации]]</li><br />
</ul></div>Yuliahttps://wiki.umisoft.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Yulia&diff=4360Участник:Yulia2012-12-25T11:10:33Z<p>Yulia: Новая страница: «== Декабрь: == <ul> <li></li> </ul>»</p>
<hr />
<div>== Декабрь: ==<br />
<br />
<ul><br />
<li></li><br />
</ul></div>Yulia