https://wiki.umisoft.ru/api.php?action=feedcontributions&user=Stexe&feedformat=atomUmicms - Вклад участника [ru]2024-03-28T21:52:59ZВклад участникаMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5_tpl&diff=7897Изменение количества товаров в корзине tpl2014-08-15T11:00:42Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9'''<br />
<br />
Для того, чтобы пользователь мог в корзине менять количество товаров открываем шаблон корзины, предварительно убедившись, что у вас в шаблоне используются макросы<br />
<source lang="php"><br />
%system includeQuickEditJs()%<br />
%system includeEditInPlaceJs()%<br />
</source><br />
Открываем его.(если вы ничего не меняли, то он находиться по адресу /templates/demoold/tpls/emarket/default.tpl)<br />
и после блока<br />
<source lang="php"><br />
$FORMS['order_block'] = <<<END<br />
<h3>Информация о покупателе</h3><br />
<p>%emarket getCustomerInfo()%</p><br />
<h3>Список покупок</h3><br />
</source><br />
Вставляем вот такой код:<br />
<source lang="php"><br />
<script language="JavaScript" type="text/javascript"><br />
function change_but(id) {<br />
var getvalue = $('#input-amount-'+id).val();<br />
if (getvalue==0) {<br />
return;<br />
}else{<br />
jQuery.post("/emarket/basket/put/element/"+id+"/", {amount: getvalue});<br />
}<br />
alert(getvalue);<br />
location.reload();<br />
}<br />
</script><br />
</source><br />
<br />
Затем ищем код<br />
<source lang="php"><br />
$FORMS['order_item'] = <<<END<br />
<tr><br />
<td><br />
#<br />
</td><br />
<br />
<td><br />
<a href="%link%">%name%</a><br />
</td><br />
<br />
<td><br />
%options%<br />
</td><br />
<br />
<td><br />
</source><br />
<br />
И после тэга <td> вставляем следующий код<br />
<br />
<source lang="php"><br />
<input id="input-amount-%element_id%" type="text" value="%amount%"><br />
<input type='button' value='Change' onClick="change_but(%element_id%)"><br />
</source><br />
<br />
Сохраняем шаблон. и на этом всё. Теперь пользователь сможет в корзине изменять количество товара<br />
<br />
Внимание!<br />
Работа этого кода проверена только в версии системы 2.8.6 - в остальных версиях код может не работать.<br />
<br />
Если вас интересует вариант для xslt, то смотрите стандартный шаблон demodizzy "интернет-магазин современный", там это уже по умолчанию реализовано.<br />
<br />
[[Категория:Модуль Интернет магазин]][[Категория:Верстка в TPL]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D0%BB%D0%B8%D1%82%D1%82%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=7865Добавление нового сплиттера для импорта данных2014-06-01T11:34:37Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Добавить новый сплиттер для импорта данных<br/><br/><br />
'''Реализация:''' <br />
В данной статье будет рассказан пример добавления нового сплиттера для импорта данных в модуле "Обмен данными". Исходные данные,<br />
которые мы будем импортировать находятся в файле формата CSV:<br />
<pre><br />
id;Название;Псевдостатический адрес;Активен;Номер заявки;Контрагент;Состояние заявки<br />
;5076;;1;5076;Иванов А.А.;Документы выданы;<br />
;5313;;1;5313;Петров К.А.;Документы выданы;<br />
;5789;;1;5789;Сидоров В.Л.;Документы выданы;<br />
</pre><br />
<br />
Аналогично информации описанной в статье [http://wiki.umisoft.ru/Добавление_нового_формата_экспорта_данных Добавление нового формата экспорта данных], добавим новый формат импорта, с названием "Импорт из CSV" и с Идентификатором = csv.<br />
Далее в папку '''/classes/system/subsystems/import/splitters/''' добавим файл '''csvSplitter.php''' следующего содержания:<br />
<source lang="php"><br />
<?php<br />
<br />
class csvSplitter extends umiImportSplitter {<br />
<br />
protected function readDataBlock() {<br />
$xml_start ='<?xml version="1.0" encoding="UTF-8"?><br />
<umidump xmlns:xlink="http://www.w3.org/TR/xlink" version="2.0"><br />
<meta><br />
<source-name>csv</source-name><br />
</meta><br />
<types><br />
<type id="root-catalog-object-type" title="Объект каталога" parent-id="root-pages-type" locked="locked"><br />
<base module="catalog" method="object">Объекты каталога</base><br />
</type><br />
</types><br />
<pages>';<br />
<br />
$start = ($this->offset) ? $this->offset + 1 : 1;<br />
$end = ($this->offset) ? $start + $this->block_size - 1: $this->block_size;<br />
$handle = fopen($this->file_path, "r");<br />
$xml_begin = "";<br />
<br />
$row = 1;<br />
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {<br />
if($row == 1) {<br />
$row++;<br />
continue;<br />
}<br />
if($row >= $start and $row <= $end){<br />
// в данном случае, ereg_replace убирает лишние пробелы в значении<br />
$nomer = ereg_replace(" +"," ",iconv("CP1251", "UTF-8//IGNORE", $data[4]));<br />
$kontragent = ereg_replace(" +"," ",iconv("CP1251", "UTF-8//IGNORE", $data[5]));<br />
$sostoyanie = ereg_replace(" +"," ",iconv("CP1251", "UTF-8//IGNORE", $data[6]));<br />
<br />
$xml_begin_temp ='<page id="tu_{$row}" is-active="1" parentId="30271" type-id="root-catalog-object-type"><br />
<basetype module="catalog" method="object">Объекты каталога</basetype><br />
<name>$nomer</name><br />
<properties><br />
<group name="common"><br />
<title>Основные параметры</title><br />
<property name="h1" type="string"><br />
<title>Поле H1</title><br />
<default-value>$nomer</default-value><br />
</property><br />
</group><br />
<group name="harki_zayavki"><br />
<title>Хар-ки заявки</title><br />
<property name="nomer_zayavki" type="string"><br />
<title>Номер заявки</title><br />
<value>$nomer</value><br />
</property><br />
<property name="kontragent_zayavki" type="string"><br />
<title>Контрагент заявки</title><br />
<value>$kontragent</value><br />
</property><br />
<property name="sostoyanie_zayavki" type="string"><br />
<title>Состояние заявки</title><br />
<value>$sostoyanie</value><br />
</property><br />
</group><br />
</properties><br />
</page>';<br />
<br />
$xml_begin .= $xml_begin_temp . "\n";<br />
}<br />
if($row > $end) break;<br />
$row++; <br />
<br />
<br />
}<br />
fclose($handle);<br />
<br />
$xml_end ='</pages></umidump>';<br />
<br />
$finish = $xml_start ."\n". $xml_begin ."\n". $xml_end;<br />
<br />
$doc = new DomDocument();<br />
$doc->loadXML($finish);<br />
<br />
$this->offset += $this->block_size;<br />
<br />
if (!$data) $this->complete = true;<br />
<br />
return $doc;<br />
<br />
}<br />
<br />
public function translate(DomDocument $doc) {<br />
// do nothing<br />
<br />
}<br />
<br />
}<br />
?><br />
</source><br />
<br />
<br />
В методе '''readDataBlock''', в переменной $xml_begin_temp прописан id раздела каталога (id=30271) в который мы будем импортировать объекты каталога. Теперь осталось в модуле "Обмен данными" добавить новый сценарий импорта, указав "Формат данных" -> "Импорт из CSV" и CSV-файл с данными.<br />
[[Категория:Модуль Обмен данными]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_YML_%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82&diff=7864Настройка экспорта в YML Яндекс-маркет2014-06-01T11:16:25Z<p>Stexe: </p>
<hr />
<div>Для настройки экспорта в YML, первое что необходимо сделать, это в модуле "Обмен данными", во вкладке "Экспорт" создать сценарий экспорта, указав формат экспорта: "Каталог в формате Яндекс-маркет(yml)", также указав разделы каталога, которые необходимо экспортировать. Произведя экспорт в YML и указав вариант "Получить ссылку на результат экспорта", мы указываем полученную ссылку в аккаунте Яндекс-Маркета, ссылка примерно следующего вида:<br />
<pre><br />
_http://ваш_сайт/admin/exchange/get_export/27697/?as_file=0<br />
</pre><br />
<br />
Также указываем логин/пароль пользователя, у которого в настройках, для блока "Обмен данными" стоит галка "Доступ к экспорту данных по http", либо можно просто для пользователя "Гость" поставить эту галку, тогда логин/пароль не надо будет указывать.<br />
<br />
В настройках сценария экспорта можно прописать значение для параметра "Время кэширования результатов экспорта (в минутах)", это будет означать, что в течении времени между первым экспортом данных (time = X) и временем X+указанное_значение, данные будут браться из кэша, допустим из файла sys-temp/export/27697.xml. Каждый раз новый файл с данными формироваться не будет, т.е. необходимо учитывать, что при изменении цены товара на сайте, может возникнуть момент, что в Яндекс-маркет не сразу поступят обновленные данные, когда он их будет запрашивать по ссылке.<br />
<br />
Теперь перейдем к настройкам формирования самого XML-файла для Яндекс-Маркета, ознакомиться с форматом YML, его требованиями, можно на данной странице: [http://partner.market.yandex.ru/legal/tt/ Описание формата данных YML]<br />
<br />
Основным шаблоном формирования XML-файла для Яндекс-маркета является xsl/export/YML.xsl. Если необходимо изменить формирование итогового файла, то необходимо переназначать существующие шаблоны из оригинального файла, записывая их в xsl/export/custom/YML.xsl. При обновлении сайта шаблон xsl/export/YML.xsl перезаписывается.<br />
<br />
<br />
Одной из основных настроек которую требуется сделать, это исключить из экспорта неактивные объекты каталога в UMI.CMS, по мимо этого можно также исключить объекты каталога, которые находятся в неактивном разделе, но сами они могут быть активными.<br />
Для этого скопируем шаблон:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"> <br />
...<br />
</xsl:template><br />
</pre><br />
<br />
в файл xsl/export/custom/YML.xsl, в основной узел stylesheet. Можно скопировать целиком или только те элементы, которые вы используете. Для примера рассмотрим следующий шаблон:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <br />
xmlns:php="http://php.net/xsl" <br />
xmlns:udt="http://umi-cms.ru/2007/UData/templates" <br />
extension-element-prefixes="php" <br />
exclude-result-prefixes="xsl php udt"><br />
<br />
<xsl:template match="page[basetype/@method = 'object']"><br />
<xsl:param name="price" select="number(.//property[@name = 'price']/value)" /><br />
<xsl:param name="parentactive" select="document(concat('upage://',@parentId))/udata/page/@is-active" /><br />
<xsl:if test="$price &gt; 0 and $parentactive = '1'"><br />
<offer><br />
<xsl:attribute name="available"><br />
<xsl:text>true</xsl:text><br />
</xsl:attribute><br />
<url><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, @link)" /><br />
</url><br />
<price><br />
<xsl:value-of select="$price"/><br />
</price><br />
<currencyId><br />
<xsl:choose><br />
<xsl:when test="string-length($default-currency)"><br />
<xsl:value-of select="$default-currency" /><br />
</xsl:when><br />
<xsl:otherwise>RUR</xsl:otherwise><br />
</xsl:choose><br />
</currencyId><br />
<categoryId><br />
<xsl:value-of select="@parentId"/><br />
</categoryId><br />
<xsl:if test=".//property[@name = 'image']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'image']/value)"/><br />
</picture><br />
</xsl:if><br />
<delivery>true</delivery><br />
<name><br />
<xsl:value-of select="name"/><br />
</name><br />
<description><br />
<xsl:value-of select="properties/group/property[@name = 'opisanie']/value"/>Цвет:<br />
<xsl:value-of select="properties/group/property[@name = 'vid']/value/item/@name" />; Вес:<br />
<xsl:value-of select="properties/group/property[@name = 'ves']/value" />;<br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
</description><br />
</offer><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template match="property[value = '1']"><br />
<xsl:value-of select="title" />;<br />
</xsl:template><br />
<br />
<xsl:template match="page[basetype/@method = 'object'][not(@is-active)]"></xsl:template><br />
<br />
</xsl:stylesheet><br />
</source><br />
в его начало мы добавили параметр:<br />
<pre><br />
<xsl:param name="parentactive" select="document(concat('upage://',@parentId))/udata/page/@is-active" /><br />
</pre><br />
и изменили следующий за ним if, т.е. добавили проверку на активность раздела в котором находится объект.<br />
Экспорт неактивных объектов был исключен добавление шаблона:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object'][not(@is-active)]"></xsl:template><br />
</pre><br />
<br />
В данном примере считается, что в административной части нигде не указывается, сколько единиц того или иного товара осталось на складе, поэтому конструкция:<br />
<pre><br />
<xsl:attribute name="available"><br />
<xsl:choose><br />
<xsl:when test=".//property[@name = 'common_quantity']/value &gt; 0"><xsl:text>true</xsl:text></xsl:when><br />
<xsl:otherwise><xsl:text>false</xsl:text></xsl:otherwise><br />
</xsl:choose><br />
</xsl:attribute> <br />
</pre><br />
<br />
была заменена на:<br />
<pre><br />
<xsl:attribute name="available"><br />
<xsl:text>true</xsl:text><br />
</xsl:attribute><br />
</pre><br />
Т.к. поле с изображением товара, в данном примере, имеет идентификатор image, то конструкция:<br />
<pre><br />
<xsl:if test=".//property[@name = 'photo']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'photo']/value)"/><br />
</picture><br />
</xsl:if><br />
</pre><br />
<br />
была заменена на:<br />
<pre><br />
<xsl:if test=".//property[@name = 'image']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'image']/value)"/><br />
</picture><br />
</xsl:if><br />
</pre><br />
<br />
С учетом того, что доставка имеется, была добавлена строка:<br />
<pre><br />
<delivery>true</delivery><br />
</pre><br />
<br />
Блок описание (<description >) был оформлен следующим образом:<br />
<pre><br />
<description><br />
<xsl:value-of select="properties/group/property[@name = 'opisanie']/value"/><br />
Цвет: <xsl:value-of select="properties/group/property[@name = 'vid']/value/item/@name" />;<br />
Вес: <xsl:value-of select="properties/group/property[@name = 'ves']/value" />;<br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
<description><br />
</pre><br />
<br />
Поле Цвет имеет тип "Выпадающий список", поле Вес – "Строка". Для понимания запросов с помощью которых берутся те или иные значения, необходимо иметь представление об XSLT. UMI.CMS формирует XML-Данные в формате [http://api.umi-cms.ru/umiDump20.html UMIDump2.0], с помощью нашего XSL-Шаблона мы трансформируем один XML-Файл в другой. Узел <page> в UMIDump, практически идентичен xml-данным полученным следующим образом: _http://ваш_сайт/upage/47 , используется протокол [http://help-dev.umi-cms.ru/chapter.XSLTTemplates.Upage.html upage ]<br />
<br />
Данный вызов:<br />
<pre><br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
</pre><br />
и сам шаблон:<br />
<pre><br />
<xsl:template match="property[value = '1']"><br />
<xsl:value-of select="title" />;<br />
</xsl:template><br />
</pre><br />
служат для проверки поля типа чекбокс, с идентификатором 'dvd', в случае если чекбокс установлен, будет выведено название данного поля.<br />
<br />
<br />
<br />
'''Отключение экспорта определенных товаров.'''<br />
<br />
Если необходимо исключить из выгрузки в YML определенные товары, то можно воспользоваться описанной ниже схемой.<br />
В модуле "Шаблоны данных", в вашем типе данных объекта каталога, допустим в группе полей "Ценовые свойства", добавляется<br />
поле "Не выгружать в YML" со строковым идентификатором 'nonyml' и типом "Кнопка-флажок". Далее для нужных объектов<br />
каталога, устанавливаем данный чек-бокс. Также необходимо изменить шаблон:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
</pre><br />
в файле:<br />
<pre><br />
xsl/export/custom/YML.xsl<br />
</pre><br />
в самом начале шаблона, необходимо прописать параметр nonyml:<br />
<pre><br />
<xsl:param name="nonyml" select="properties/group[@name = 'cenovye_svojstva']/property[@name = 'nonyml']/value" /><br />
</pre><br />
и изменить if условие, т.е. добавить проверку по чекбоксу "Не выгружать в YML" :<br />
<pre><br />
<xsl:if test="$price &gt; 0 and not($nonyml)"><br />
</pre><br />
<br />
<br />
<br />
'''Цена со скидкой.'''<br />
<br />
Если на сайте планируется использование скидок, то в начале шаблона:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
...<br />
</xsl:template><br />
</pre><br />
необходимо вместо стандартного параметра 'price' прописать:<br />
<source lang=xml><br />
<xsl:param name="price" select="document(concat('udata://emarket/price/', @id, '/0/0'))/udata/price/actual" /><br />
</source><br />
<br />
Тогда в YML-файле цена будет указана со скидкой.<br />
<br />
<br />
<br />
'''Произвольный товар (vendor.model)'''<br />
<br />
Если необходимо использовать схему '''vendor.model''', о которой более подробно рассказано на [http://help.yandex.ru/partnermarket/?id=1111483 help.yandex.ru] , то в файле '''\xsl\export\custom\YML.xsl''', в шаблоне:<br />
<source lang="xml"><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
...<br />
</xsl:template><br />
</source><br />
<br />
необходимо в блоке:<br />
<source lang="xml"><br />
<xsl:when test=".//property[@name = $vendor]/value != '' and .//property[@name = $model]/value != ''"><br />
<xsl:attribute name="type">vendor.model</xsl:attribute><br />
</xsl:when><br />
</source><br />
<br />
указать строковые идентификаторы полей для '''vendor''' и '''model''', в вашем объекте каталога на сайте, к примеру:<br />
<source lang="xml"><br />
<xsl:when test=".//property[@name = 'vendor_object']/value != '' and .//property[@name = 'model_object']/value != ''"><br />
<xsl:attribute name="type">vendor.model</xsl:attribute><br />
</xsl:when><br />
</source><br />
<br />
на вашем сайте, строковые идентификаторы скорее всего другие, поэтому проверьте это.<br />
Далее, в блоке:<br />
<source lang="xml"><br />
<xsl:when test="(.//property[@name = $vendor]/value != '') and (.//property[@name = $model]/value != '')"><br />
<xsl:if test=".//property[@name = $typePrefix]/value != ''"><br />
<typePrefix><xsl:value-of select=".//property[@name = $typePrefix]/value"/></typePrefix><br />
</xsl:if><br />
<vendor><xsl:value-of select=".//property[@name = $vendor]/value"/></vendor><br />
<model><xsl:value-of select=".//property[@name = $model]/value"/></model><br />
</xsl:when><br />
</source><br />
<br />
необходимо еще раз заменить переменные $vendor и $model на строковые идентификаторы. В случае, если хотите указать также узел:<br />
<source lang="xml"><br />
<typePrefix>Принтер</typePrefix><br />
</source><br />
<br />
то необходимо вместо '''$typePrefix''' указать идентификатор для этого поля.<br />
[[Категория:Модуль Обмен данными]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_YML_%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82&diff=7862Настройка экспорта в YML Яндекс-маркет2014-06-01T11:13:14Z<p>Stexe: переименовал «Настройка экспорта в YML (Яндекс-маркет)» в «Настройка экспорта в YML Яндекс-маркет»</p>
<hr />
<div>Для настройки экспорта в YML, первое что необходимо сделать, это в модуле "Обмен данными", во вкладке "Экспорт" создать сценарий экспорта, указав формат экспорта: "Каталог в формате Яндекс-маркет(yml)", также указав разделы каталога, которые необходимо экспортировать. Произведя экспорт в YML и указав вариант "Получить ссылку на результат экспорта", мы указываем полученную ссылку в аккаунте Яндекс-Маркета, ссылка примерно следующего вида:<br />
<pre><br />
_http://ваш_сайт/admin/exchange/get_export/27697/?as_file=0<br />
</pre><br />
<br />
Также указываем логин/пароль пользователя, у которого в настройках, для блока "Обмен данными" стоит галка "Доступ к экспорту данных по http", либо можно просто для пользователя "Гость" поставить эту галку, тогда логин/пароль не надо будет указывать.<br />
<br />
В настройках сценария экспорта можно прописать значение для параметра "Время кэширования результатов экспорта (в минутах)", это будет означать, что в течении времени между первым экспортом данных (time = X) и временем X+указанное_значение, данные будут браться из кэша, допустим из файла sys-temp/export/27697.xml. Каждый раз новый файл с данными формироваться не будет, т.е. необходимо учитывать, что при изменении цены товара на сайте, может возникнуть момент, что в Яндекс-маркет не сразу поступят обновленные данные, когда он их будет запрашивать по ссылке.<br />
<br />
Теперь перейдем к настройкам формирования самого XML-файла для Яндекс-Маркета, ознакомиться с форматом YML, его требованиями, можно на данной странице: [http://partner.market.yandex.ru/legal/tt/ Описание формата данных YML]<br />
<br />
Основным шаблоном формирования XML-файла для Яндекс-маркета является xsl/export/YML.xsl. Если необходимо изменить формирование итогового файла, то необходимо переназначать существующие шаблоны из оригинального файла, записывая их в xsl/export/custom/YML.xsl. При обновлении сайта шаблон xsl/export/YML.xsl перезаписывается.<br />
<br />
В итоговом файле, значение элемента <name> берется из первой вкладки модуля "Конфигурация", поле "Название сайта". У Яндекс-Маркета требование к этому полю, оно не должно быть длиной более 20 символов. В случаи надобности можно шаблон:<br />
<pre><br />
<xsl:template match="umidump[@version='2.0']"><br />
...<br />
</xsl:template><br />
</pre><br />
скопировать в файл xsl/export/custom/YML.xsl, в основной узел "stylesheet", и уже там вручную прописать значение элемента <name>:<br />
<pre><br />
<name><xsl:value-of select="meta/site-name" /></name><br />
</pre><br />
<br />
Одной из основных настроек которую требуется сделать, это исключить из экспорта неактивные объекты каталога в UMI.CMS, по мимо этого можно также исключить объекты каталога, которые находятся в неактивном разделе, но сами они могут быть активными.<br />
Для этого скопируем шаблон:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"> <br />
...<br />
</xsl:template><br />
</pre><br />
<br />
в файл xsl/export/custom/YML.xsl, в основной узел stylesheet. Можно скопировать целиком или только те элементы, которые вы используете. Для примера рассмотрим следующий шаблон:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <br />
xmlns:php="http://php.net/xsl" <br />
xmlns:udt="http://umi-cms.ru/2007/UData/templates" <br />
extension-element-prefixes="php" <br />
exclude-result-prefixes="xsl php udt"><br />
<br />
<xsl:template match="page[basetype/@method = 'object']"><br />
<xsl:param name="price" select="number(.//property[@name = 'price']/value)" /><br />
<xsl:param name="parentactive" select="document(concat('upage://',@parentId))/udata/page/@is-active" /><br />
<xsl:if test="$price &gt; 0 and $parentactive = '1'"><br />
<offer><br />
<xsl:attribute name="available"><br />
<xsl:text>true</xsl:text><br />
</xsl:attribute><br />
<url><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, @link)" /><br />
</url><br />
<price><br />
<xsl:value-of select="$price"/><br />
</price><br />
<currencyId><br />
<xsl:choose><br />
<xsl:when test="string-length($default-currency)"><br />
<xsl:value-of select="$default-currency" /><br />
</xsl:when><br />
<xsl:otherwise>RUR</xsl:otherwise><br />
</xsl:choose><br />
</currencyId><br />
<categoryId><br />
<xsl:value-of select="@parentId"/><br />
</categoryId><br />
<xsl:if test=".//property[@name = 'image']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'image']/value)"/><br />
</picture><br />
</xsl:if><br />
<delivery>true</delivery><br />
<name><br />
<xsl:value-of select="name"/><br />
</name><br />
<description><br />
<xsl:value-of select="properties/group/property[@name = 'opisanie']/value"/>Цвет:<br />
<xsl:value-of select="properties/group/property[@name = 'vid']/value/item/@name" />; Вес:<br />
<xsl:value-of select="properties/group/property[@name = 'ves']/value" />;<br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
</description><br />
</offer><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template match="property[value = '1']"><br />
<xsl:value-of select="title" />;<br />
</xsl:template><br />
<br />
<xsl:template match="page[basetype/@method = 'object'][not(@is-active)]"></xsl:template><br />
<br />
</xsl:stylesheet><br />
</source><br />
в его начало мы добавили параметр:<br />
<pre><br />
<xsl:param name="parentactive" select="document(concat('upage://',@parentId))/udata/page/@is-active" /><br />
</pre><br />
и изменили следующий за ним if, т.е. добавили проверку на активность раздела в котором находится объект.<br />
Экспорт неактивных объектов был исключен добавление шаблона:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object'][not(@is-active)]"></xsl:template><br />
</pre><br />
<br />
В данном примере считается, что в административной части нигде не указывается, сколько единиц того или иного товара осталось на складе, поэтому конструкция:<br />
<pre><br />
<xsl:attribute name="available"><br />
<xsl:choose><br />
<xsl:when test=".//property[@name = 'common_quantity']/value &gt; 0"><xsl:text>true</xsl:text></xsl:when><br />
<xsl:otherwise><xsl:text>false</xsl:text></xsl:otherwise><br />
</xsl:choose><br />
</xsl:attribute> <br />
</pre><br />
<br />
была заменена на:<br />
<pre><br />
<xsl:attribute name="available"><br />
<xsl:text>true</xsl:text><br />
</xsl:attribute><br />
</pre><br />
Т.к. поле с изображением товара, в данном примере, имеет идентификатор image, то конструкция:<br />
<pre><br />
<xsl:if test=".//property[@name = 'photo']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'photo']/value)"/><br />
</picture><br />
</xsl:if><br />
</pre><br />
<br />
была заменена на:<br />
<pre><br />
<xsl:if test=".//property[@name = 'image']/value != ''"><br />
<picture><br />
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'image']/value)"/><br />
</picture><br />
</xsl:if><br />
</pre><br />
<br />
С учетом того, что доставка имеется, была добавлена строка:<br />
<pre><br />
<delivery>true</delivery><br />
</pre><br />
<br />
Блок описание (<description >) был оформлен следующим образом:<br />
<pre><br />
<description><br />
<xsl:value-of select="properties/group/property[@name = 'opisanie']/value"/><br />
Цвет: <xsl:value-of select="properties/group/property[@name = 'vid']/value/item/@name" />;<br />
Вес: <xsl:value-of select="properties/group/property[@name = 'ves']/value" />;<br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
<description><br />
</pre><br />
<br />
Поле Цвет имеет тип "Выпадающий список", поле Вес – "Строка". Для понимания запросов с помощью которых берутся те или иные значения, необходимо иметь представление об XSLT. UMI.CMS формирует XML-Данные в формате [http://api.umi-cms.ru/umiDump20.html UMIDump2.0], с помощью нашего XSL-Шаблона мы трансформируем один XML-Файл в другой. Узел <page> в UMIDump, практически идентичен xml-данным полученным следующим образом: _http://ваш_сайт/upage/47 , используется протокол [http://help-dev.umi-cms.ru/chapter.XSLTTemplates.Upage.html upage ]<br />
<br />
Данный вызов:<br />
<pre><br />
<xsl:apply-templates select="properties/group/property[@name = 'dvd']" /><br />
</pre><br />
и сам шаблон:<br />
<pre><br />
<xsl:template match="property[value = '1']"><br />
<xsl:value-of select="title" />;<br />
</xsl:template><br />
</pre><br />
служат для проверки поля типа чекбокс, с идентификатором 'dvd', в случае если чекбокс установлен, будет выведено название данного поля.<br />
<br />
<br />
<br />
'''Отключение экспорта определенных товаров.'''<br />
<br />
Если необходимо исключить из выгрузки в YML определенные товары, то можно воспользоваться описанной ниже схемой.<br />
В модуле "Шаблоны данных", в вашем типе данных объекта каталога, допустим в группе полей "Ценовые свойства", добавляется<br />
поле "Не выгружать в YML" со строковым идентификатором 'nonyml' и типом "Кнопка-флажок". Далее для нужных объектов<br />
каталога, устанавливаем данный чек-бокс. Также необходимо изменить шаблон:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
</pre><br />
в файле:<br />
<pre><br />
xsl/export/custom/YML.xsl<br />
</pre><br />
в самом начале шаблона, необходимо прописать параметр nonyml:<br />
<pre><br />
<xsl:param name="nonyml" select="properties/group[@name = 'cenovye_svojstva']/property[@name = 'nonyml']/value" /><br />
</pre><br />
и изменить if условие, т.е. добавить проверку по чекбоксу "Не выгружать в YML" :<br />
<pre><br />
<xsl:if test="$price &gt; 0 and not($nonyml)"><br />
</pre><br />
<br />
<br />
<br />
'''Цена со скидкой.'''<br />
<br />
Если на сайте планируется использование скидок, то в начале шаблона:<br />
<pre><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
...<br />
</xsl:template><br />
</pre><br />
необходимо вместо стандартного параметра 'price' прописать:<br />
<source lang=xml><br />
<xsl:param name="price" select="document(concat('udata://emarket/price/', @id, '/0/0'))/udata/price/actual" /><br />
</source><br />
<br />
Тогда в YML-файле цена будет указана со скидкой.<br />
<br />
<br />
<br />
'''Произвольный товар (vendor.model)'''<br />
<br />
Если необходимо использовать схему '''vendor.model''', о которой более подробно рассказано на [http://help.yandex.ru/partnermarket/?id=1111483 help.yandex.ru] , то в файле '''\xsl\export\custom\YML.xsl''', в шаблоне:<br />
<source lang="xml"><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
...<br />
</xsl:template><br />
</source><br />
<br />
необходимо в блоке:<br />
<source lang="xml"><br />
<xsl:when test=".//property[@name = $vendor]/value != '' and .//property[@name = $model]/value != ''"><br />
<xsl:attribute name="type">vendor.model</xsl:attribute><br />
</xsl:when><br />
</source><br />
<br />
указать строковые идентификаторы полей для '''vendor''' и '''model''', в вашем объекте каталога на сайте, к примеру:<br />
<source lang="xml"><br />
<xsl:when test=".//property[@name = 'vendor_object']/value != '' and .//property[@name = 'model_object']/value != ''"><br />
<xsl:attribute name="type">vendor.model</xsl:attribute><br />
</xsl:when><br />
</source><br />
<br />
на вашем сайте, строковые идентификаторы скорее всего другие, поэтому проверьте это.<br />
Далее, в блоке:<br />
<source lang="xml"><br />
<xsl:when test="(.//property[@name = $vendor]/value != '') and (.//property[@name = $model]/value != '')"><br />
<xsl:if test=".//property[@name = $typePrefix]/value != ''"><br />
<typePrefix><xsl:value-of select=".//property[@name = $typePrefix]/value"/></typePrefix><br />
</xsl:if><br />
<vendor><xsl:value-of select=".//property[@name = $vendor]/value"/></vendor><br />
<model><xsl:value-of select=".//property[@name = $model]/value"/></model><br />
</xsl:when><br />
</source><br />
<br />
необходимо еще раз заменить переменные $vendor и $model на строковые идентификаторы. В случае, если хотите указать также узел:<br />
<source lang="xml"><br />
<typePrefix>Принтер</typePrefix><br />
</source><br />
<br />
то необходимо вместо '''$typePrefix''' указать идентификатор для этого поля.<br />
[[Категория:Модуль Обмен данными]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_YML_(%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82)&diff=7863Настройка экспорта в YML (Яндекс-маркет)2014-06-01T11:13:14Z<p>Stexe: переименовал «Настройка экспорта в YML (Яндекс-маркет)» в «Настройка экспорта в YML Яндекс-маркет»</p>
<hr />
<div>#перенаправление [[Настройка экспорта в YML Яндекс-маркет]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5_tpl&diff=7861Динамическое изменение количества отображаемых товаров на странице tpl2014-06-01T10:55:52Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:'''<br />
<br />
В форме для фильтрации объектов каталога, необходимо вывести выпадающий список с выбором количества товаров, выбрав которое, на странице отобразится указанное количество объектов каталога.<br />
<br />
'''Решение:'''<br />
<br />
В файл '''classes/modules/custom.php''', после слов "//TODO: Write your own macroses here" добавим два коротких кастомных метода:<br />
<source lang="php"><br />
public function getCount(){<br />
$count = intval(getRequest('count'));<br />
if ($count > 0) return $count;<br />
return '';<br />
}<br />
<br />
public function is_sel($count){<br />
$count = intval($count);<br />
$current_sel = intval(getRequest('count'));<br />
if ($count == $current_sel) return "selected='selected'";<br />
} <br />
</source><br />
<br />
В шаблоне, по которому выводится список объектов каталога (обычно это tpls/catalog/default.tpl), в блоке '''category''',<br />
для макроса '''getObjectsList''' пропишем третий параметр:<br />
<pre><br />
%catalog getObjectsList('default', '%category_id%', '%custom getcount()%')% <br />
</pre><br />
<br />
<br />
В блоке '''objects_block''', может быть прописан такой код:<br />
<pre><br />
<table style="width: 100%;"><br />
<tr><br />
<td><br />
%catalog search('%category_id%', 'cenovye_svojstva short_info common', 'search')%<br />
</td> <br />
</tr><br />
</table><br />
<br /><br />
%system numpages(%total%, %per_page%, 'catalog')%<br />
<br /><br />
<div umi:method="catalog" umi:module="category" umi:element-id="%category_id%"><br />
%lines%<br />
</div><br />
<div style="clear: both;"></div><br />
<br />
%system numpages(%total%, %per_page%, 'catalog')%<br />
<br />
<br /><br /><br />
</pre><br />
<br />
<br />
Если макрос '''search''' использует шаблон tpls/catalog/search.tpl, как в данном примере, то в этом шаблоне, в блок '''search_block''', после макроса '''%lines%''', пропишем следующий select:<br />
<pre><br />
<select name="count" onchange="this.form.submit()"><br />
<option %custom is_sel(10)%>10</option><br />
<option %custom is_sel(20)%>20</option><br />
<option %custom is_sel(30)%>30</option><br />
</select><br />
</pre><br />
<br />
В итоге, при выборе в выпадающем списке нужного значения: 10, 20 или 30, страница перегрузится и будет отображено указанное количество объектов каталога.<br />
[[Категория:Модуль Каталог]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5_tpl&diff=7860Динамическое изменение количества отображаемых товаров на странице tpl2014-06-01T10:55:30Z<p>Stexe: </p>
<hr />
<div>'''Задача:'''<br />
<br />
В форме для фильтрации объектов каталога, необходимо вывести выпадающий список с выбором количества товаров, выбрав которое, на странице отобразится указанное количество объектов каталога.<br />
<br />
'''Решение:'''<br />
<br />
В файл '''classes/modules/custom.php''', после слов "//TODO: Write your own macroses here" добавим два коротких кастомных метода:<br />
<source lang="php"><br />
public function getCount(){<br />
$count = intval(getRequest('count'));<br />
if ($count > 0) return $count;<br />
return '';<br />
}<br />
<br />
public function is_sel($count){<br />
$count = intval($count);<br />
$current_sel = intval(getRequest('count'));<br />
if ($count == $current_sel) return "selected='selected'";<br />
} <br />
</source><br />
<br />
В шаблоне, по которому выводится список объектов каталога (обычно это tpls/catalog/default.tpl), в блоке '''category''',<br />
для макроса '''getObjectsList''' пропишем третий параметр:<br />
<pre><br />
%catalog getObjectsList('default', '%category_id%', '%custom getcount()%')% <br />
</pre><br />
<br />
<br />
В блоке '''objects_block''', может быть прописан такой код:<br />
<pre><br />
<table style="width: 100%;"><br />
<tr><br />
<td><br />
%catalog search('%category_id%', 'cenovye_svojstva short_info common', 'search')%<br />
</td> <br />
</tr><br />
</table><br />
<br /><br />
%system numpages(%total%, %per_page%, 'catalog')%<br />
<br /><br />
<div umi:method="catalog" umi:module="category" umi:element-id="%category_id%"><br />
%lines%<br />
</div><br />
<div style="clear: both;"></div><br />
<br />
%system numpages(%total%, %per_page%, 'catalog')%<br />
<br />
<br /><br /><br />
</pre><br />
<br />
<br />
Если макрос '''search''' использует шаблон tpls/catalog/search.tpl, как в данном примере, то в этом шаблоне, в блок '''search_block''', после макроса '''%lines%''', пропишем следующий select:<br />
<pre><br />
<select name="count" onchange="this.form.submit()"><br />
<option %custom is_sel(10)%>10</option><br />
<option %custom is_sel(20)%>20</option><br />
<option %custom is_sel(30)%>30</option><br />
</select><br />
</pre><br />
<br />
В итоге, при выборе в выпадающем списке нужного значения: 10, 20 или 30, страница перегрузится и будет отображено указанное количество объектов каталога.<br />
[[Категория:Модуль Каталог]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%BD%D0%B5%D0%B5_%D1%81%D0%BE%D0%B2%D0%B5%D1%80%D1%88%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0&diff=7859Повторение ранее совершенного заказа2014-06-01T10:29:13Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Реализовать возможность повторного оформления заказа<br/><br/><br />
'''Реализация:''' <br/><br />
В данной статье описан пример кастомного макроса, с помощью которого можно повторить ранее совершенный заказ, т.е. одним кликом перенести его в текущею корзину и оформить заказ.<br />
Код метода repeatOrder необходимо добавить в файл '''/classes/modules/emarket/__custom.php''':<br />
<source lang="php"><br />
public function repeatOrder() {<br />
$permissions = permissionsCollection::getInstance();<br />
$userId = $permissions->getUserId();<br />
$objects = umiObjectsCollection::getInstance();<br />
$order_id = (int) getRequest('param0');<br />
$order = $objects->getObject($order_id);<br />
<br />
if (!$order || $order->customer_id != $userId) {<br />
$referer = getServer('HTTP_REFERER');<br />
$this->redirect($referer);<br />
}<br />
$orderItems = $order->order_items;<br />
<br />
if (is_array($orderItems)) {<br />
$_REQUEST['no-redirect'] = 1;<br />
$this->basket('remove_all');<br />
<br />
foreach ($orderItems as $orderItemId) {<br />
<br />
$orderItem = orderItem::get($orderItemId);<br />
<br />
if ($orderItem) {<br />
$element = $orderItem->getItemElement();<br />
if ($element) {<br />
<br />
$element_id = $element->getId();<br />
$_REQUEST['no-redirect'] = 1;<br />
<br />
$_REQUEST['amount'] = $orderItem->getAmount();<br />
<br />
$options_arr = array();<br />
foreach ($orderItem->options as $item) {<br />
$index = $item['varchar'];<br />
$options_arr[$index] = $item['rel'];<br />
}<br />
if (count($options_arr))<br />
$_REQUEST['options'] = $options_arr;<br />
$_REQUEST['redirect-uri'] = '';<br />
$this->basket('put', 'element', $element_id);<br />
}<br />
}<br />
}<br />
<br />
}<br />
$referer = getServer('HTTP_REFERER');<br />
$this->redirect($referer);<br />
}<br />
</source><br />
<br />
В той же папке необходимо добавить файл '''permissions.custom.php''' следующего содержания:<br />
<source lang="php"><br />
<?php<br />
$permissions = array('purchasing' => array('repeatOrder'));<br />
?><br />
</source><br />
<br />
<h2>TPL-шаблонизатор</h2><br />
В шаблоне '''tpls/emarket/default.tpl''', должны быть примерно следующие блоки:<br />
<pre><br />
$FORMS['personal'] = <<<END<br />
%emarket ordersList()%<br />
END;<br />
<br />
$FORMS['orders_block'] = <<<END<br />
<p>Список ваших заказов:</p><br />
<ul><br />
%items%<br />
</ul><br />
END;<br />
<br />
$FORMS['orders_block_empty'] = <<<END<br />
<p>Заказов нет</p><br />
END;<br />
<br />
$FORMS['orders_item'] = <<<END<br />
<li>%name% <a href="/emarket/repeatOrder/%id%/">Повторить</a></li><br />
END;<br />
</pre><br />
<br />
Когда пользователь зайдет в личный кабинет Интернет-магазина по ссылке: _http://sait.ru/emarket/personal/ , он увидит список заказов возле которых будет ссылка '''Повторить'''. Кликнув по ссылке Повторить, в текущею корзину товаров добавятся товары из ранее совершенного заказа, с сохранением количества товара и опционных свойств.<br />
<h2>XSLT-шаблонизатор</h2><br />
В демонстрационном дизайне "Современный интернет-магазин" ("demodizzy") в файле \templates\demodizzy\xslt\modules\emarket\orders-list.xsl в шаблон <xsl:template match="udata[@module = 'emarket'][@method = 'order']"> для вывода ссылки на повторения ранее совершенного заказа можно воспользоваться следующей конструкцией:<br />
<source lang="xml"><br />
<a href="/emarket/repeatOrder/{@id}/">Повторить</a><br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&diff=7858Добавление нового правила скидки2014-06-01T09:58:05Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Добавить новое правило скидок<br/><br/><br />
'''Реализация:''' <br />
<br />
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю.<br />
<br />
Допустим, у товаров есть поле Производитель, типа выпадающий список, идентификатор поля '''proizvoditel''', справочник для поля - «Производитель». Тогда добавим дочерний тип по отношению к «Правила скидок», модуль "Шаблоны данных". Назовем новый тип «На раздел и производителя». В поле «Назначение типа» выберем «Правило скидки», добавим поле "Раздел" с типом «Ссылка на дерево», строковый идентификатор 'razdely'. Также добавим поле "Производитель", с типом выпадающий список, а справочник укажем такой же как и для товаров, т.е. «Производитель». Будем считать, что новый тип данных имеет object_id = 1062.<br />
<br />
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя», Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.<br />
<br />
Далее в папку '''\classes\modules\emarket\classes\discounts\rules\''' добавим файл '''brand.php''', со следующим содержанием:<br />
<source lang="php"><br />
<?php<br />
<br />
class brandDiscountRule extends discountRule implements itemDiscountRule {<br />
public function validateItem(iUmiHierarchyElement $orderItem) {<br />
if(!is_array($this->razdely)) {<br />
return false;<br />
}<br />
// слева, proizvoditel - идентификатор поля в Правиле скидки<br />
// справа, proizvoditel - идентификатор поля у товара<br />
if($this->proizvoditel == $orderItem->proizvoditel){<br />
<br />
foreach($this->razdely as $catalogItem) {<br />
if($catalogItem->id == $orderItem->getParentId()) {<br />
return true;<br />
}<br />
}<br />
} <br />
return false;<br />
}<br />
};<br />
?><br />
</source><br />
<br />
Теперь остается добавить саму скидку. В модуле Интернет-магазин, вкладка «Скидки», добавляем скидку:<br />
*Тип скидки - На товары каталога<br />
*Модификатор цены - Процент от суммы<br />
*Правила валидации - На раздел и производителя<br />
<br />
Указываем необходимые параметры скидки:<br />
*Процент скидки<br />
*Разделы<br />
*Производитель<br />
<br />
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.<br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BC%D0%B5%D0%BD%D0%B0_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BD%D0%B0_%D1%8D%D1%82%D0%B0%D0%BF%D0%B5_delivery&diff=7857Смена шагов оформления заказа на этапе delivery2014-06-01T09:53:07Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br />
<br />
В данной статье будет описан механизм смены шагов оформления заказа на этапе delivery. Необходимо, чтобы была следуюшая последовательность:<br />
* выбор способа доставки;<br />
* проверка на то какой способ доставки выбран:<br />
если выбран "Самовывоз", то перейти к следующему этапу, если "Доставка", то предложить заполнить Адрес доставки.<br />
<br />
<br />
В файл '''classes/modules/emarket/__custom.php''', добавим четыре метода, все они написаны на основе существующих:<br />
<source lang="php"><br />
public function purchasecust(){<br />
$customer = customer::get();<br />
// Проверка на то, что покупатель Гость, и все ли обязательные поля заполнены в объекте <br />
if(!$customer->isUser() && !$customer->isFilled()) {<br />
$this->redirect('/emarket/purchase/');<br />
}else{<br />
$this->redirect('/emarket/purchase/delivery/choose/');<br />
}<br />
}<br />
<br />
public function personalcust(){<br />
$cmsController = cmsController::getInstance();<br />
$data = $cmsController->getModule('data');<br />
$data->saveEditedObject(customer::get()->id, false, true);<br />
$this->redirect($this->pre_lang . '/emarket/purchase/delivery/choose/');<br />
}<br />
<br />
public function choosecust(){<br />
$ini = cmsController::getInstance()->getModule("emarket");<br />
$order = $ini->getBasketOrder(false);<br />
$deliveryId = (int) getRequest('delivery-id');<br />
<br />
if(!$deliveryId) {<br />
$this->redirect($ini->pre_lang . '/emarket/purchase/delivery/choose/');<br />
}<br />
<br />
if(@isset($_SESSION['emarket']['delivery'][$deliveryId])) {<br />
$deliveryPrice = (float) $_SESSION['emarket']['delivery'][$deliveryId];<br />
} else {<br />
$delivery = delivery::get($deliveryId);<br />
$deliveryPrice = (float) $delivery->getDeliveryPrice($order);<br />
}<br />
<br />
$order->setValue('delivery_id', $deliveryId);<br />
$order->setValue('delivery_price', $deliveryPrice);<br />
$order->refresh();<br />
$order->commit();<br />
if($deliveryId == 27255){<br />
$this->redirect($this->pre_lang . '/emarket/purchase/payment/choose/');<br />
}else{<br />
$this->redirect($this->pre_lang . '/emarket/purchase/delivery/address/');<br />
} <br />
}<br />
<br />
public function addresscust(){<br />
$ini = cmsController::getInstance()->getModule("emarket");<br />
$order = $ini->getBasketOrder(false);<br />
$addressId = (int) getRequest('delivery-address');<br />
if($addressId == 'new') {<br />
$controller = cmsController::getInstance();<br />
$collection = umiObjectsCollection::getInstance();<br />
$types = umiObjectTypesCollection::getInstance();<br />
$typeId = $types->getBaseType("emarket", "delivery_address");<br />
$customer = customer::get();<br />
$addressId = $collection->addObject("Address for customer #".$customer->id, $typeId);<br />
$dataModule = $controller->getModule("data");<br />
if($dataModule) {<br />
$dataModule->saveEditedObject($addressId, true, true);<br />
}<br />
$customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );<br />
}<br />
$order->delivery_address = $addressId;<br />
$order->commit();<br />
<br />
$this->redirect($this->pre_lang . '/emarket/purchase/payment/choose/'); <br />
}<br />
</source><br />
<br />
<br />
также в папке '''classes/modules/emarket/''' создадим файл '''permissions.custom.php''' следующего содержания:<br />
<source lang="php"><br />
<?php<br />
$permissions = array('purchasing' => array('purchasecust', 'personalcust', 'choosecust', 'addresscust'));<br />
?><br />
</source><br />
В методе '''choosecust()''', в строке:<br />
<pre><br />
if($deliveryId == 27255){<br />
</pre><br />
<br />
необходимо прописать ваш $object_id способа доставки "Самовывоз", id можно узнать в модуле Интернет-магазин, вкладка "Доставка".<br />
<br />
Если говорить о TPL-шаблонах, то в шаблоне '''/tpls/emarket/default.tpl''', в блоке '''order_block''', необходимо прописать для формы следующий action:<br />
<pre><br />
<form action="%pre_lang%/emarket/purchasecust/"><br />
</pre><br />
<br />
В шаблоне '''tpls/emarket/required/default.tpl''', action:<br />
<pre><br />
<form action="%pre_lang%/emarket/personalcust/" method="post"><br />
</pre><br />
<br />
В шаблоне '''tpls/emarket/delivery/default.tpl''', в блоке '''delivery_block''', action:<br />
<pre><br />
<form action="%pre_lang%/emarket/choosecust/" method="post"><br />
</pre><br />
а в блоке '''delivery_address_block''', action:<br />
<pre><br />
<form action="%pre_lang%/emarket/addresscust/" method="post"><br />
</pre><br />
<br />
<br />
В XSLT-шаблонах правки аналогичные.<br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://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%BA%D0%B8%D0%B4%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_emarket-%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_API&diff=7856Создание скидки для emarket-а с помощью API2014-06-01T09:49:52Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Средствами API UMI.CMS добавить скидку<br/><br/><br />
'''Реализация:'''<br/> <br />
В данной статье будет рассмотрен пример кода для создание скидки в модуле Интернет-магазин (emarket). В качестве примера будет создана скидка со следующими параметрами:<br />
<br />
'''Тип''': На товары каталога<br />
<br />
'''Модификатор цены''': Процент от суммы<br />
<br />
'''Правила валидации''': На пользователей<br />
<br />
<br />
Код stanalone скрипта:<br />
<source lang="php"><br />
include './standalone.php';<br />
$objects = umiObjectsCollection::getInstance();<br />
$objectTypes = umiObjectTypesCollection::getInstance();<br />
// процент скидки<br />
$percent = 20; <br />
// object_id пользователя<br />
$user_id = 2873;<br />
$name_discount = "newDiscount"; <br />
$typeIdDiscount = $objectTypes->getBaseType("emarket", "discount");<br />
$newDiscount = $objects->addObject($name_discount, $typeIdDiscount);<br />
$newDiscountObject = $objects->getObject($newDiscount);<br />
if($newDiscountObject instanceof umiObject) {<br />
<br />
// 27131 - object_id элемента справочника "Тип скидки" - "На товары каталога"<br />
$discount_type_id = $objects->getObject(27131);<br />
$newDiscountObject->setValue('discount_type_id', $discount_type_id);<br />
// 768 - id типа данных "Процен от суммы заказа", дочерний по отношению к "Модификаторы цены скидок"<br />
$modif_id = $objects->addObject('',768);<br />
$mod_object = $objects->getObject($modif_id);<br />
$mod_object->setValue('proc', $percent);<br />
// 27136 - object_id элемента справочника "Типы модификаторов скидок" - "Процент от суммы"<br />
$modificator_type_id = $objects->getObject(27136);<br />
$mod_object->setValue('modificator_type_id', $modificator_type_id);<br />
$mod_object->commit();<br />
$newDiscountObject->setValue('discount_modificator_id', $mod_object);<br />
//798 - тип данных "На пользователей", дочерний по отношению к "Правила скидок"<br />
$rules_discount_id = $objects->addObject('user',798);<br />
$rules_discoun_object = $objects->getObject($rules_discount_id);<br />
//27397 - object_id элемента справочника "Типы правил для скидок" - "На пользователей"<br />
$rule_type_id = $objects->getObject(27397);<br />
$rules_discoun_object->setValue('rule_type_id', $rule_type_id);<br />
$object_user = $objects->getObject($user_id);<br />
$users[] = $object_user;<br />
$rules_discoun_object->setValue('users', $users);<br />
$rules_discoun_object->commit();<br />
$rules_discount_id_arr[] = $objects->getObject($rules_discount_id);<br />
$newDiscountObject->setValue('discount_rules_id', $rules_discount_id_arr);<br />
$newDiscountObject->setValue('is_active', 1);<br />
$desc = $percent."%";<br />
$newDiscountObject->setValue('description', $desc);<br />
$newDiscountObject->commit();<br />
}<br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://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%BA%D0%B8%D0%B4%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_emarket-%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_API&diff=7855Создание скидки для emarket-а с помощью API2014-06-01T09:49:41Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Средствами API UMI.CMS добавить скидку<br/><br/><br />
'''Реализация:''' <br />
В данной статье будет рассмотрен пример кода для создание скидки в модуле Интернет-магазин (emarket). В качестве примера будет создана скидка со следующими параметрами:<br />
<br />
'''Тип''': На товары каталога<br />
<br />
'''Модификатор цены''': Процент от суммы<br />
<br />
'''Правила валидации''': На пользователей<br />
<br />
<br />
Код stanalone скрипта:<br />
<source lang="php"><br />
include './standalone.php';<br />
$objects = umiObjectsCollection::getInstance();<br />
$objectTypes = umiObjectTypesCollection::getInstance();<br />
// процент скидки<br />
$percent = 20; <br />
// object_id пользователя<br />
$user_id = 2873;<br />
$name_discount = "newDiscount"; <br />
$typeIdDiscount = $objectTypes->getBaseType("emarket", "discount");<br />
$newDiscount = $objects->addObject($name_discount, $typeIdDiscount);<br />
$newDiscountObject = $objects->getObject($newDiscount);<br />
if($newDiscountObject instanceof umiObject) {<br />
<br />
// 27131 - object_id элемента справочника "Тип скидки" - "На товары каталога"<br />
$discount_type_id = $objects->getObject(27131);<br />
$newDiscountObject->setValue('discount_type_id', $discount_type_id);<br />
// 768 - id типа данных "Процен от суммы заказа", дочерний по отношению к "Модификаторы цены скидок"<br />
$modif_id = $objects->addObject('',768);<br />
$mod_object = $objects->getObject($modif_id);<br />
$mod_object->setValue('proc', $percent);<br />
// 27136 - object_id элемента справочника "Типы модификаторов скидок" - "Процент от суммы"<br />
$modificator_type_id = $objects->getObject(27136);<br />
$mod_object->setValue('modificator_type_id', $modificator_type_id);<br />
$mod_object->commit();<br />
$newDiscountObject->setValue('discount_modificator_id', $mod_object);<br />
//798 - тип данных "На пользователей", дочерний по отношению к "Правила скидок"<br />
$rules_discount_id = $objects->addObject('user',798);<br />
$rules_discoun_object = $objects->getObject($rules_discount_id);<br />
//27397 - object_id элемента справочника "Типы правил для скидок" - "На пользователей"<br />
$rule_type_id = $objects->getObject(27397);<br />
$rules_discoun_object->setValue('rule_type_id', $rule_type_id);<br />
$object_user = $objects->getObject($user_id);<br />
$users[] = $object_user;<br />
$rules_discoun_object->setValue('users', $users);<br />
$rules_discoun_object->commit();<br />
$rules_discount_id_arr[] = $objects->getObject($rules_discount_id);<br />
$newDiscountObject->setValue('discount_rules_id', $rules_discount_id_arr);<br />
$newDiscountObject->setValue('is_active', 1);<br />
$desc = $percent."%";<br />
$newDiscountObject->setValue('description', $desc);<br />
$newDiscountObject->commit();<br />
}<br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://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%BA%D0%B8%D0%B4%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_emarket-%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_API&diff=7854Создание скидки для emarket-а с помощью API2014-06-01T09:48:38Z<p>Stexe: </p>
<hr />
<div>В данной статье будет рассмотрен пример кода для создание скидки в модуле Интернет-магазин (emarket). В качестве примера будет создана скидка со следующими параметрами:<br />
<br />
'''Тип''': На товары каталога<br />
<br />
'''Модификатор цены''': Процент от суммы<br />
<br />
'''Правила валидации''': На пользователей<br />
<br />
<br />
Код stanalone скрипта:<br />
<source lang="php"><br />
include './standalone.php';<br />
$objects = umiObjectsCollection::getInstance();<br />
$objectTypes = umiObjectTypesCollection::getInstance();<br />
// процент скидки<br />
$percent = 20; <br />
// object_id пользователя<br />
$user_id = 2873;<br />
$name_discount = "newDiscount"; <br />
$typeIdDiscount = $objectTypes->getBaseType("emarket", "discount");<br />
$newDiscount = $objects->addObject($name_discount, $typeIdDiscount);<br />
$newDiscountObject = $objects->getObject($newDiscount);<br />
if($newDiscountObject instanceof umiObject) {<br />
<br />
// 27131 - object_id элемента справочника "Тип скидки" - "На товары каталога"<br />
$discount_type_id = $objects->getObject(27131);<br />
$newDiscountObject->setValue('discount_type_id', $discount_type_id);<br />
// 768 - id типа данных "Процен от суммы заказа", дочерний по отношению к "Модификаторы цены скидок"<br />
$modif_id = $objects->addObject('',768);<br />
$mod_object = $objects->getObject($modif_id);<br />
$mod_object->setValue('proc', $percent);<br />
// 27136 - object_id элемента справочника "Типы модификаторов скидок" - "Процент от суммы"<br />
$modificator_type_id = $objects->getObject(27136);<br />
$mod_object->setValue('modificator_type_id', $modificator_type_id);<br />
$mod_object->commit();<br />
$newDiscountObject->setValue('discount_modificator_id', $mod_object);<br />
//798 - тип данных "На пользователей", дочерний по отношению к "Правила скидок"<br />
$rules_discount_id = $objects->addObject('user',798);<br />
$rules_discoun_object = $objects->getObject($rules_discount_id);<br />
//27397 - object_id элемента справочника "Типы правил для скидок" - "На пользователей"<br />
$rule_type_id = $objects->getObject(27397);<br />
$rules_discoun_object->setValue('rule_type_id', $rule_type_id);<br />
$object_user = $objects->getObject($user_id);<br />
$users[] = $object_user;<br />
$rules_discoun_object->setValue('users', $users);<br />
$rules_discoun_object->commit();<br />
$rules_discount_id_arr[] = $objects->getObject($rules_discount_id);<br />
$newDiscountObject->setValue('discount_rules_id', $rules_discount_id_arr);<br />
$newDiscountObject->setValue('is_active', 1);<br />
$desc = $percent."%";<br />
$newDiscountObject->setValue('description', $desc);<br />
$newDiscountObject->commit();<br />
}<br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D1%8F_%D0%BF%D1%80%D0%B8_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0&diff=7853Добавление комментария при оформлении заказа2014-06-01T09:22:01Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Реализовать возможность добавления покупателю комментария к заказу<br/><br/><br />
'''Реализация:''' <br />
<br />
В модуле "Шаблоны данных" откроем на редактирование тип данных "Заказ" и в группу "Свойства заказа" добавим поле с названием "Комментарий", с идентификатором 'comment' и типом "Простой текст". Далее в шаблон, который формирует отображение корзины с товарами, рядом с кнопкой "Оформить заказ" пропишем следующее поле:<br />
<pre><br />
Ваш комментарий:<br /><br />
<textarea style="width: 300px; height: 50px;" name="comment"/></textarea><br />
<br /><br /><br />
</pre><br />
<br />
также необходимо поменять action формы с:<br />
<pre><br />
/emarket/purchase/<br />
</pre><br />
на:<br />
<pre><br />
/emarket/purchasecomment/<br />
</pre><br />
<br />
<br />
Далее, в файле '''/classes/modules/emarket/__custom.php''' добавляем код следующего метода:<br />
<source lang="php"><br />
public function purchasecomment(){<br />
$comment = htmlspecialchars(getRequest('comment'));<br />
$ini = cmsController::getInstance()->getModule('emarket');<br />
<br />
$order = $ini->getBasketOrder(false);<br />
$order->setValue('comment', $comment);<br />
$order->commit();<br />
$ini->redirect('/emarket/purchase/');<br />
}<br />
</source><br />
<br />
<br />
В директории '''/classes/modules/emarket''' создаем файл '''permissions.custom.php''' со следующим содержанием:<br />
<source lang="php"><br />
<?php<br />
$permissions = array('purchasing' => array('purchasecomment'));<br />
?><br />
</source><br />
<br />
Теперь при оформлении заказа пользователь сможет оставить комментарий к заказу. При просмотре заказа в административной части, комментарий будет отображаться в блоке "Свойства заказа".<br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B8_%22%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C%22_%D0%BF%D1%80%D0%B8_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BA%D0%B2%D0%B8%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8&diff=7852Добавление кнопки "Печать" при отображении квитанции2014-06-01T08:13:47Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Вывести кнопку "Печать" в платежной квитанции<br/><br/><br />
'''Реализация:''' <br />
<br />
При отображении квитанции, для пользователей сайта бывает не очевидно, каким образом ее распечатать. Можно добавить мини-инструкцию покупателям, в которой описать один из вариантов - комбинация клавиш '''Ctrl+P'''<br />
Либо, использовать js-скрипт. Для этого, необходимо в файл '''xsltTpls/sys-tpls/emarket-receipt.xsl''' после слов "''Вы сможете произвести по ней оплату в Сбербанке или любом другом банке, обслуживающем физических лиц.''" добавить:<br />
<br />
<source lang="javascript"><br />
<input type="button" value="Печать" onClick="javascript:print(document);"/><br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D1%83_%D1%81_%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%9A%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=7851Добавление товара в корзину с указанием Количества2014-06-01T08:02:50Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Передавать количество товара при его добавлении в корзину <br/><br/><br />
'''Реализация:'''<br />
Чтобы при добавлении товара в Корзину, можно было за один раз добавить более одного товара, необходимо<br />
передать параметр amount. Можно воспользоваться приведенным ниже примером для TPL-шаблонизатора:<br />
<source lang="html4strict"><br />
<form id="basket_%id%" action="/emarket/basket/put/element/%id%/" method="get"><br />
<input name="amount" value="1" style="width: 20px;" type="text" /><br />
<a href="#" onclick="document.getElementById('basket_%id%').submit()">Добавить в корзину</a><br />
</form><br />
</source><br />
[[Категория:Модуль Интернет магазин]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81_%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B9_%D0%B1%D1%8B%D0%BB%D0%B0_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%B0_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BF%D0%B8%D1%8F&diff=7850Определение страницы с которой была сделана виртуальная копия2014-06-01T07:52:40Z<p>Stexe: </p>
<hr />
<div> [[category:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/><br />
'''Реализация:'''<br/><br />
Виртуальной копия страницы - это страница, которая может иметь свои: псевдостатический адрес, название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям "h1", "title", "Контент" и т.д., то есть источником данных виртуальной копии будет объект исходной страницы.<br />
<br />
В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: [http://api.umi-cms.ru/api.umiHierarchy.getObjectInstances.html getObjectInstances]<br />
<br />
<br />
Добавим в файл '''classes/modules/custom.php''' следующий метод:<br />
<source lang="php"><br />
public function getSourcePageId($pageId = false) {<br />
if ( !$pageId ) {<br />
$pageId = getRequest('param0');<br />
}<br />
$hierarchy = umiHierarchy::getInstance();<br />
//экземпляр страницы<br />
$page = $hierarchy->getElement($pageId);<br />
if( $page instanceof umiHierarchyElement ){<br />
//objectId источника данных<br />
$objectId = $page->getObjectId();<br />
// список всех страниц, которые используют данный объект<br />
$pageIdsList = $hierarchy->getObjectInstances($objectId);<br />
<br />
if ( isset($pageIdsList[0]) ) {<br />
return $pageIdsList[0];<br />
}<br />
}<br />
return $pageId; <br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
<pre><br />
%custom getSourcePageId(%id%)%<br />
</pre><br />
,где %id% - id страницы.<br />
<h2>XSLT-шаблонизатор</h2><br />
<br />
<source lang="xml"><br />
<xsl:variable name="first_id" select="document(concat('udata://custom/getSourcePageId/' , $page-id))/udata" /><br />
</source><br />
$page-id - определенная переменная с id страницы.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%BD%D1%83%D1%8E_%D0%BA%D0%B2%D0%B8%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8E_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5&diff=7849Ссылка на платежную квитанцию в личном кабинете2014-06-01T07:51:56Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Модуль Интернет магазин]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' В некоторых проектах, при просмотре списка совершенных покупок, возникает необходимость вывести ссылку на платежную квитанцию, если при оформлении заказа был выбран данный способ оплаты.<br/><br/><br />
'''Реализация:''' <br/><br />
<br />
<br />
Можно использовать так называемый личный кабинет:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
для просмотра списка заказов.<br />
<br />
В файл '''/classes/modules/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function receipt_link($order_id){<br />
if ( !$order_id ) {<br />
$order_id = getRequest('param0');<br />
}<br />
$objects = umiObjectsCollection::getInstance();<br />
$object_order = $objects->getObject($order_id);<br />
<br />
$payment_id = $object_order->getValue('payment_id');<br />
if ( !$payment_id ) {<br />
return "";<br />
}<br />
$payment_type_id = $objects->getObject($payment_id)->getValue('payment_type_id');<br />
$class_name = $objects->getObject($payment_type_id)->getValue('class_name'); <br />
if($class_name == 'receipt'){<br />
$customer_id = $object_order->getValue('customer_id');<br />
$customer_mail = $objects->getObject($customer_id)->getValue('email'); <br />
$date = $object_order->order_date;<br />
$getcode = sha1("{$customer_id}:{$customer_mail}:{$date}");<br />
$url = "/emarket/receipt/{$order_id}/{$getcode}/";<br />
return "<a href=\"{$url}\">Платежная квитанция</a>";<br />
}else{<br />
return "";<br />
}<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Системная страница /emarket/personal/ использует шаблон:<br />
<pre><br />
tpls/emarket/default.tpl<br />
</pre><br />
в котором должен быть блок personal:<br />
<pre><br />
$FORMS['personal'] = <<<END<br />
%emarket ordersList()%<br />
END;<br />
</pre><br />
<br />
также, в этом же самом шаблоне необходимо прописать данные блоки если их еще нет:<br />
<pre><br />
$FORMS['orders_block'] = <<<END<br />
<p>Список ваших заказов:</p><br />
<ul><br />
%items%<br />
</ul><br />
END;<br />
<br />
$FORMS['orders_block_empty'] = <<<END<br />
<p>Заказов нет</p><br />
END;<br />
<br />
$FORMS['orders_item'] = <<<END<br />
<li>%name% (%id%) %custom receipt_link(%id%)%</li><br />
END;<br />
</pre><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
В демонстрационном дизайне "Современный интернет-магазин" ("demodizzy") в файле \templates\demodizzy\xslt\modules\emarket\orders-list.xsl в шаблон xsl:template match="udata[@module = 'emarket'][@method = 'order']"> для вывода ссылки на платежную квитанцию можно воспользоваться следующей конструкцией:<br />
<source lang="xml"><br />
<xsl:value-of select="document(concat('udata://custom/receipt_link/', @id))/udata" /><br />
</source><br />
<br />
<br />
В итоге, при просмотре списка совершенный заказов на системной странице:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
рядом с теми заказами, при формировании которых был выбран способ оплаты "Платежная квитанция", будет ссылка на просмотр квитанции.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%BD%D1%83%D1%8E_%D0%BA%D0%B2%D0%B8%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8E_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5&diff=7848Ссылка на платежную квитанцию в личном кабинете2014-06-01T07:51:02Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Модуль Интернет магазин]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' В некоторых проектах, при просмотре списка совершенных покупок, возникает необходимость вывести ссылку на платежную квитанцию, если при оформлении заказа был выбран данный способ оплаты.<br/><br/><br />
'''Реализация:''' <br/><br />
<br />
<br />
Можно использовать так называемый личный кабинет:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
для просмотра списка заказов.<br />
<br />
В файл '''/classes/modules/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function receipt_link($order_id){<br />
if ( !$order_id ) {<br />
$order_id = getRequest('param0');<br />
}<br />
$objects = umiObjectsCollection::getInstance();<br />
$object_order = $objects->getObject($order_id);<br />
<br />
$payment_id = $object_order->getValue('payment_id');<br />
if ( !$payment_id ) {<br />
return "";<br />
}<br />
$payment_type_id = $objects->getObject($payment_id)->getValue('payment_type_id');<br />
$class_name = $objects->getObject($payment_type_id)->getValue('class_name'); <br />
if($class_name == 'receipt'){<br />
$customer_id = $object_order->getValue('customer_id');<br />
$customer_mail = $objects->getObject($customer_id)->getValue('email'); <br />
$date = $object_order->order_date;<br />
$getcode = sha1("{$customer_id}:{$customer_mail}:{$date}");<br />
$url = "/emarket/receipt/{$order_id}/{$getcode}/";<br />
return "<a href=\"{$url}\">Платежная квитанция</a>";<br />
}else{<br />
return "";<br />
}<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Системная страница /emarket/personal/ использует шаблон:<br />
<pre><br />
tpls/emarket/default.tpl<br />
</pre><br />
в котором должен быть блок personal:<br />
<pre><br />
$FORMS['personal'] = <<<END<br />
%emarket ordersList()%<br />
END;<br />
</pre><br />
<br />
также, в этом же самом шаблоне необходимо прописать данные блоки если их еще нет:<br />
<pre><br />
$FORMS['orders_block'] = <<<END<br />
<p>Список ваших заказов:</p><br />
<ul><br />
%items%<br />
</ul><br />
END;<br />
<br />
$FORMS['orders_block_empty'] = <<<END<br />
<p>Заказов нет</p><br />
END;<br />
<br />
$FORMS['orders_item'] = <<<END<br />
<li>%name% (%id%) %custom receipt_link(%id%)%</li><br />
END;<br />
</pre><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
В демонстрационном дизайне "Современный интернет-магазин" ("demodizzy") в файле \templates\demodizzy\xslt\modules\emarket\orders-list.xsl в шаблон xsl:template match="udata[@module = 'emarket'][@method = 'order']"> для вывода ссылки на платежную квитанцию можно воспользоваться следующей конструкцией:<br />
<source lang="xml"><br />
<xsl:value-of select="document(concat('udata://custom/receipt_link/', $document-page-id))/udata" /><br />
</source><br />
<br />
<br />
В итоге, при просмотре списка совершенный заказов на системной странице:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
рядом с теми заказами, при формировании которых был выбран способ оплаты "Платежная квитанция", будет ссылка на просмотр квитанции.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%BD%D1%83%D1%8E_%D0%BA%D0%B2%D0%B8%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8E_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5&diff=7847Ссылка на платежную квитанцию в личном кабинете2014-06-01T07:50:30Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Модуль Интернет магазин]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' В некоторых проектах, при просмотре списка совершенных покупок, возникает необходимость вывести ссылку на платежную квитанцию, если при оформлении заказа был выбран данный способ оплаты.<br/><br/><br />
'''Реализация:''' <br/><br />
<br />
<br />
Можно использовать так называемый личный кабинет:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
для просмотра списка заказов.<br />
<br />
В файл '''/classes/modules/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function receipt_link($order_id){<br />
if ( !$order_id ) {<br />
$order_id = getRequest('param0');<br />
}<br />
$objects = umiObjectsCollection::getInstance();<br />
$object_order = $objects->getObject($order_id);<br />
<br />
$payment_id = $object_order->getValue('payment_id');<br />
if ( !$payment_id ) {<br />
return "";<br />
}<br />
$payment_type_id = $objects->getObject($payment_id)->getValue('payment_type_id');<br />
$class_name = $objects->getObject($payment_type_id)->getValue('class_name'); <br />
if($class_name == 'receipt'){<br />
$customer_id = $object_order->getValue('customer_id');<br />
$customer_mail = $objects->getObject($customer_id)->getValue('email'); <br />
$date = $object_order->order_date;<br />
$getcode = sha1("{$customer_id}:{$customer_mail}:{$date}");<br />
$url = "/emarket/receipt/{$order_id}/{$getcode}/";<br />
return "<a href=\"{$url}\">Платежная квитанция</a>";<br />
}else{<br />
return "";<br />
}<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Системная страница /emarket/personal/ использует шаблон:<br />
<pre><br />
tpls/emarket/default.tpl<br />
</pre><br />
в котором должен быть блок personal:<br />
<pre><br />
$FORMS['personal'] = <<<END<br />
%emarket ordersList()%<br />
END;<br />
</pre><br />
<br />
также, в этом же самом шаблоне необходимо прописать данные блоки если их еще нет:<br />
<pre><br />
$FORMS['orders_block'] = <<<END<br />
<p>Список ваших заказов:</p><br />
<ul><br />
%items%<br />
</ul><br />
END;<br />
<br />
$FORMS['orders_block_empty'] = <<<END<br />
<p>Заказов нет</p><br />
END;<br />
<br />
$FORMS['orders_item'] = <<<END<br />
<li>%name% (%id%) %custom receipt_link(%id%)%</li><br />
END;<br />
</pre><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
В демонстрационном дизайне "Современный интернет-магазин" ("demodizzy") в файле \templates\demodizzy\xslt\modules\emarket\orders-list.xsl в шаблон xsl:template match="udata[@module = 'emarket'][@method = 'order']"> для вывода ссылки на платежную квитанцию можно воспользоваться следующей конструкцией:<br />
<source lang="xml"><br />
<xsl:value-of select="document(concat('udata://custom/receipt_link/', $document-page-id))/udata"/><br />
</source><br />
<br />
<br />
В итоге, при просмотре списка совершенный заказов на системной странице:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
рядом с теми заказами, при формировании которых был выбран способ оплаты "Платежная квитанция", будет ссылка на просмотр квитанции.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%BD%D1%83%D1%8E_%D0%BA%D0%B2%D0%B8%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8E_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5&diff=7846Ссылка на платежную квитанцию в личном кабинете2014-06-01T06:38:00Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Модуль Интернет магазин]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' <br/><br/><br />
'''Реализация:''' <br />
<h2>TPL-шаблонизатор</h2><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
<br />
В некоторых проектах, при просмотре списка совершенных покупок, возникает необходимость вывести ссылку на платежную квитанцию, если при оформлении заказа был выбран данный способ оплаты.<br />
Можно использовать так называемый личный кабинет:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
для просмотра списка заказов.<br />
<br />
В tpl шаблонах, данная системная страница использует шаблон:<br />
<pre><br />
tpls/emarket/default.tpl<br />
</pre><br />
в котором должен быть блок personal:<br />
<pre><br />
$FORMS['personal'] = <<<END<br />
%emarket ordersList()%<br />
END;<br />
</pre><br />
<br />
также, в этом же самом шаблоне необходимо прописать данные блоки если их еще нет:<br />
<pre><br />
$FORMS['orders_block'] = <<<END<br />
<p>Список ваших заказов:</p><br />
<ul><br />
%items%<br />
</ul><br />
END;<br />
<br />
$FORMS['orders_block_empty'] = <<<END<br />
<p>Заказов нет</p><br />
END;<br />
<br />
$FORMS['orders_item'] = <<<END<br />
<li>%name% (%id%) %custom receipt_link(%id%)%</li><br />
END;<br />
</pre><br />
<br />
<br />
После чего, в файл classes/modules/custom.php, после слов //TODO добавим дополнительный метод:<br />
<source lang="php"><br />
public function receipt_link($order_id){<br />
<br />
$objects = umiObjectsCollection::getInstance();<br />
$object_order = $objects->getObject($order_id); <br />
$payment_id = $object_order->payment_id;<br />
$payment_type_id = $objects->getObject($payment_id)->getValue('payment_type_id');<br />
$class_name = $objects->getObject($payment_type_id)->getValue('class_name'); <br />
if($class_name == 'receipt'){<br />
$customer_id = $object_order->customer_id;<br />
$customer_mail = $objects->getObject($customer_id)->getValue('email'); <br />
$date = $object_order->order_date;<br />
$getcode = sha1("{$customer_id}:{$customer_mail}:{$date}");<br />
$url = "/emarket/receipt/{$order_id}/{$getcode}/";<br />
return "<a href=\"{$url}\">Платежная квитанция</a>";<br />
}else{<br />
return "";<br />
}<br />
}<br />
</source><br />
<br />
В итоге, при просмотре списка совершенный заказов на системной странице:<br />
<pre><br />
http://ваш_сайт/emarket/personal/<br />
</pre><br />
рядом с теми заказами, при формировании которых был выбран способ оплаты "Платежная квитанция", будет ссылка на просмотр квитанции.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81_%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B9_%D0%B1%D1%8B%D0%BB%D0%B0_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%B0_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BF%D0%B8%D1%8F&diff=7845Определение страницы с которой была сделана виртуальная копия2014-06-01T06:22:36Z<p>Stexe: </p>
<hr />
<div> [[category:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' По id виртуальной копии страницы определять id исходной страницы.<br/><br/><br />
'''Реализация:'''<br/><br />
Виртуальной копия страницы - это страница, которая может иметь свои: псевдостатический адрес, название, активность, шаблон дизайна, но эта страница будет ссылаться на те же самые данные по стандартным полям "h1", "title", "Контент" и т.д., то есть источником данных виртуальной копии будет объект исходной страницы.<br />
<br />
В некоторых случаях, бывает необходимо зная id новой страницы, определить id исходной страницы с которой делалась виртуальная копия. В решении данной задачи нам поможет метод из API UMI.CMS: [http://api.umi-cms.ru/api.umiHierarchy.getObjectInstances.html getObjectInstances]<br />
<br />
<br />
Добавим в файл '''classes/modules/custom.php''' следующий метод:<br />
<source lang="php"><br />
public function getSourcePageId($pageId = false) {<br />
if ( !$pageId ) {<br />
$pageId = getRequest('param0');<br />
}<br />
$hierarchy = umiHierarchy::getInstance();<br />
//экземпляр страницы<br />
$page = $hierarchy->getElement($pageId);<br />
if( $page instanceof umiHierarchyElement ){<br />
//objectId источника данных<br />
$objectId = $page->getObjectId();<br />
// список всех страниц, которые используют данный объект<br />
$pageIdsList = $hierarchy->getObjectInstances($objectId);<br />
<br />
if ( isset($pageIdsList[0]) ) {<br />
return $pageIdsList[0];<br />
}<br />
}<br />
return $pageId; <br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
<pre><br />
%custom first_id(%id%)%<br />
</pre><br />
,где %id% - id страницы.<br />
<h2>XSLT-шаблонизатор</h2><br />
<br />
<source lang="xml"><br />
<xsl:variable name="first_id" select="document(concat('udata://custom/first_id/' , $page-id))/udata" /><br />
</source><br />
$page-id - определенная переменная с id страницы.</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BA%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D0%BC&diff=7844Скачивание файла только зарегистрированным пользователям2014-06-01T05:59:59Z<p>Stexe: </p>
<hr />
<div>[[Категория: Верстка в XSLT]][[Категория: Вопросы и уроки разработки сайтов на UMI.CMS]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:'''<br />
<br />
Сделать скачивание файлов доступным только для зарегистрированных пользователей, а для незарегистрированных (Гостей) пользователей делать пенаправление на соответствующую страницу. По умолчанию, выставление прав доступа к этой странице только зарегистрированным пользователям, не решит нашу задачу, потому что гость будет попадать на страницу и видеть: <br />
"Имя файла:<br />
Размер файла: Kb<br />
Если закачивание файла не начнется через 10 сек, кликните по этой ссылке". <br />
<br />
'''Решение:'''<br />
<br />
Мы будем рассматривать реализацию этой задачи на примере демонстрационного дизайна "Современный интернет-магазин" ("demodizzy"), в котором используется XSLT-шаблонизатор.<br/><br />
В файл '''\templates\demodizzy\xslt\modules\filemanager\shared_file.xsl''' в шаблон:<br />
<source lang="xml">result[@module = 'filemanager'][@method = 'shared_file']</source><br />
<br />
вместо вызова:<br />
<source lang="xml"><xsl:apply-templates select="document(concat('udata://filemanager/shared_file//', $document-page-id))/udata" /></source><br />
<br />
добавим условие на текущего пользователя:<br />
<source lang="xml"><xsl:choose><br />
<xsl:when test="$user-type = 'guest'"><br />
Файл доступен только для зарегистрированных пользователей.<br />
<xsl:apply-templates select="document('udata://users/auth/')/udata" /><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:apply-templates select="document(concat('udata://filemanager/shared_file//', $document-page-id))/udata" /><br />
</xsl:otherwise><br />
</xsl:choose> </source><br />
<br />
т.е. если Гость, ты вызываем форму авторизации:<br />
<source lang="xml"><xsl:apply-templates select="document('udata://users/auth/')/udata" /></source><br />
<br />
<br />
если не Гость, то выполняем стандартный вызов, который отобразит данные о файле.<br /><br />
В основном шаблоне '''\templates\demodizzy\xslt\default.xsl''' должны быть определены следующие переменные:<br />
<source lang="xml"><br />
<xsl:variable name="user-type" select="/result/user/@type" /><br />
<xsl:variable name="document-page-id" select="/result/@pageId" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%B8%D0%B4%D0%B6%D0%B5%D1%82_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B5%D0%B2_%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5_%D0%BD%D0%B0_%D0%92%D0%B0%D1%88%D0%B5%D0%BC_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7843Виджет комментариев вконтакте на Вашем сайте2014-06-01T05:46:07Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
<br />
'''Задача:'''<br />
<br />
Добавить один из виджетов ВКонтакте на свой сайт. Мы будем рассматривать добавление виджета, на примере комментариев ВКонтакте. Пользователи смогут комментировать Ваши материалы без дополнительной регистрации. При желании, каждый оставленный комментарий может транслироваться на страницу комментатора во ВКонтакте со ссылкой на исходную статью. Со страницы автора и из раздела Новости о статье узнают друзья автора и смогут присоединиться к дискуссии. В этом случае комментарии второго уровня будут синхронизироваться между ВКонтакте и виджетом на Вашем сайте, так что обсуждение будет происходить одновременно на двух площадках, привлекая внимание новых участников. <br />
<br />
'''Решение:'''<br />
Подробно рассмотрим как реализовать данную задачу.<br />
<br />
Шаг 1. Создаем приложение ВКонтакте (если оно уже есть можно приступить к Шагу 2)<br />
<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем подключить сайт.<br />
<br />
[[Файл:2qqq.png]]<br />
<br />
Заполняем необходимые поля.<br />
<br />
[[Файл:3qqq.png]]<br />
<br />
В течении минуты, на телефонный номер, по которому был привязан аккаунт с которого вы создавали приложение, придет код, который необходимо ввести в появившееся окно.<br />
<br />
[[Файл:4qqq.png]]<br />
<br />
Далее, в новом окне мы получаем ID приложения (apiID).<br />
<br />
[[Файл:5qqq.png]]<br />
<br />
Шаг 2. Подключение, непосредственно самого виджета.<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем виджеты и сторонние сайты.<br />
<br />
[[Файл:6qqq.png]]<br />
<br />
Получаем необходимый код, для вставки на Ваш сайт. Единственное изменение, которое необходимо внести - это apiID, ввести Ваш apiID (полученный в Шаге 1)<br />
<br />
[[Файл:7qqq.png]]<br />
<br />
<br />
Вставляем код <br />
<source lang="javascript"><br />
<!-- Вставьте этот тег script между тегами <head> и </head> в шаблоне--><br />
<script type="text/javascript" src="http://vkontakte.ru/js/api/openapi.js?9" charset="windows-1251"></script><br />
<br />
<script type="text/javascript"><br />
VK.init({apiId: 1234567, onlyWidgets: true});<br />
</script><br />
<br />
<!-- Вставьте этот тег div в то место, где должен располагаться блок комментариев --><br />
<div id="vk_comments"></div><br />
<script type="text/javascript"><br />
VK.Widgets.Comments("vk_comments", {limit: 10, width: "596"});<br />
</script><br />
</source><br />
Первую часть кода (до строчки "Вставьте этот тег div в то место, где должен располагаться блок комментариев") вставьте между тегами <head> и </head> в шаблоне.<br /> При использовании XSLT-шаблонизатора, по умолчанию, в файле '''/xsltTpls/layouts/default.xsl''' или '''/templates/имя_шаблона/xslt/layouts/default.xsl''' <br /><br />
При использовании TPL-шаблонизатора файл в директории '''/tpls/content''' или '''/templates/имя_шаблона/tpls/content'''<br />
<br />
Вторую часть кода - в HTML-код шаблона, страницы или блока, где должен отображаться виджет (html-код страницы или блока, редактируемого через wysiwyg-редактор можно открыть, нажав на кнопку HTML при редактировании страницы или блока).</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%B8%D0%B4%D0%B6%D0%B5%D1%82_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B5%D0%B2_%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5_%D0%BD%D0%B0_%D0%92%D0%B0%D1%88%D0%B5%D0%BC_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7842Виджет комментариев вконтакте на Вашем сайте2014-06-01T05:40:32Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
<br />
'''Задача:'''<br />
<br />
Добавить один из виджетов ВКонтакте на свой сайт. Мы будем рассматривать добавление виджета, на примере комментариев ВКонтакте. Пользователи смогут комментировать Ваши материалы без дополнительной регистрации. При желании, каждый оставленный комментарий может транслироваться на страницу комментатора во ВКонтакте со ссылкой на исходную статью. Со страницы автора и из раздела Новости о статье узнают друзья автора и смогут присоединиться к дискуссии. В этом случае комментарии второго уровня будут синхронизироваться между ВКонтакте и виджетом на Вашем сайте, так что обсуждение будет происходить одновременно на двух площадках, привлекая внимание новых участников. <br />
<br />
'''Решение:'''<br />
Подробно рассмотрим как реализовать данную задачу.<br />
<br />
Шаг 1. Создаем приложение ВКонтакте (если оно уже есть можно приступить к Шагу 2)<br />
<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем подключить сайт.<br />
<br />
[[Файл:2qqq.png]]<br />
<br />
Заполняем необходимые поля.<br />
<br />
[[Файл:3qqq.png]]<br />
<br />
В течении минуты, на телефонный номер, по которому был привязан аккаунт с которого вы создавали приложение, придет код, который необходимо ввести в появившееся окно.<br />
<br />
[[Файл:4qqq.png]]<br />
<br />
Далее, в новом окне мы получаем ID приложения (apiID).<br />
<br />
[[Файл:5qqq.png]]<br />
<br />
Шаг 2. Подключение, непосредственно самого виджета.<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем виджеты и сторонние сайты.<br />
<br />
[[Файл:6qqq.png]]<br />
<br />
Получаем необходимый код, для вставки на Ваш сайт. Единственное изменение, которое необходимо внести - это apiID, ввести Ваш apiID (полученный в Шаге 1)<br />
<br />
[[Файл:7qqq.png]]<br />
<br />
<br />
Вставляем код <br />
<source lang="javascript"><br />
<!-- Вставьте этот тег script между тегами <head> и </head> в шаблоне--><br />
<script type="text/javascript" src="http://vkontakte.ru/js/api/openapi.js?9" charset="windows-1251"></script><br />
<br />
<script type="text/javascript"><br />
VK.init({apiId: 1234567, onlyWidgets: true});<br />
</script><br />
<br />
<!-- Вставьте этот тег div в то место, где должен располагаться блок комментариев --><br />
<div id="vk_comments"></div><br />
<script type="text/javascript"><br />
VK.Widgets.Comments("vk_comments", {limit: 10, width: "596"});<br />
</script><br />
</source><br />
Первую часть кода (до строчки "Вставьте этот тег div в то место, где должен располагаться блок комментариев") вставьте между тегами <head> и </head> в шаблоне.<br />
<br />
Вторую часть кода - в HTML-код шаблона, страницы или блока, где должен отображаться виджет (html-код страницы или блока, редактируемого через wysiwyg-редактор можно открыть, нажав на кнопку HTML при редактировании страницы или блока).</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%B8%D0%B4%D0%B6%D0%B5%D1%82_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B5%D0%B2_%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5_%D0%BD%D0%B0_%D0%92%D0%B0%D1%88%D0%B5%D0%BC_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7841Виджет комментариев вконтакте на Вашем сайте2014-06-01T05:29:09Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
<br />
'''Задача:'''<br />
<br />
Добавить один из виджетов ВКонтакте на свой сайт. Мы будем рассматривать добавление виджете на примере виджета комментариев ВКонтакте. Пользователи смогут комментировать Ваши материалы без дополнительной регистрации.При желании, каждый оставленный комментарий может транслироваться на страницу комментатора ВКонтакте со ссылкой на исходную статью. Со страницы автора и из раздела Новости о статье узнают друзья автора и смогут присоединиться к дискуссии. В этом случае комментарии второго уровня будут синхронизироваться между ВКонтакте и виджетом на Вашем сайте, так что обсуждение будет происходить одновременно на двух площадках, привлекая внимание новых участников. <br />
<br />
'''Решение:'''<br />
Подробно рассмотрим как реализовать данную задачу.<br />
<br />
Шаг 1. Создаем приложение ВКонтакте (если оно уже есть можно приступить к Шагу 2)<br />
<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем подключить сайт.<br />
<br />
[[Файл:2qqq.png]]<br />
<br />
Заполняем необходимые поля.<br />
<br />
[[Файл:3qqq.png]]<br />
<br />
В течении минуты, на телефонный номер, по которому был привязан аккаунт с которого вы создавали приложение, придет код, который необходимо ввести в появившееся окно.<br />
<br />
[[Файл:4qqq.png]]<br />
<br />
Далее, в новом окне мы получаем ID приложения (apiID).<br />
<br />
[[Файл:5qqq.png]]<br />
<br />
Шаг 2. Подключение, непосредственно самого виджета.<br />
Нажимаем на "Разработчикам" на сайте ВКонтакте на своей странице.<br />
[[Файл:1qqq.png]]<br />
<br />
Нажимаем виджеты и сторонние сайты.<br />
<br />
[[Файл:6qqq.png]]<br />
<br />
Получаем необходимый код, для вставки на Ваш сайт. Единственное изменение, которое необходимо внести это apiID ввести Ваш apiID (полученный в Шаге1)<br />
<br />
[[Файл:7qqq.png]]<br />
<br />
<br />
Вставляем код <br />
<source lang="java"><br />
<!-- Put this script tag to the <head> of your page --><br />
<script type="text/javascript" src="http://vkontakte.ru/js/api/openapi.js?9" charset="windows-1251"></script><br />
<br />
<script type="text/javascript"><br />
VK.init({apiId: 1234567, onlyWidgets: true});<br />
</script><br />
<br />
<!-- Put this div tag to the place, where the Comments block will be --><br />
<div id="vk_comments"></div><br />
<script type="text/javascript"><br />
VK.Widgets.Comments("vk_comments", {limit: 10, width: "596"});<br />
</script><br />
</source><br />
Первую часть кода (до строчки Put this div tag to the place, where the Comments block will be) вставьте внутрь тега <head></head> в шаблоне HTML (редактор шаблонов находится в разделе Сайт -> Редактор тем).<br />
<br />
Вторую часть кода - в HTML-код шаблона, страницы или блока, где должен отображаться виджет (html-код страницы или блока, редактируемого через wysiwyg-редактор можно открыть, нажав на кнопку HTML при редактировании страницы или блока).</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&diff=7810Переход с триальной версии на коммерческую версию системы UMI.CMS2014-05-21T09:11:32Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:'''<br />
Активировать систему лицензионным ключом коммерческой редакции<br />
<br />
'''Решение:'''<br />
Для активации системы нам необходимо войти в модуль "Конфигурация", и на вкладке "Домены" очистить поле "Доменный ключ" и затем нажать кнопку "Сохранить". При выполнении данных действий фактический домен должен совпадать с основным доменом, который указан на вкладке "Домены" модуля "Конфигурация".<br />
<br />
[[Файл:key2.png]]<br />
<br />
<br />
Далее, появляется окно "Неверный лицензионный ключ", в этом окне присутствует поле для ввода лицензионного ключа, соответственно вводим ключ и нажимаем на кнопку "Проверить". <br />
<br />
[[Файл:key4.png]]<br />
<br />
<br />
Если ключ не принимается, обращаемся к статье [http://wiki.umisoft.ru/Не_принимается_лицензионный_ключ]<br />
<br />
При переходе с одной редакции системы на другую происходит следующее:<br />
<br />
1. Модули, которые отсутствуют в Вашей редакции удаляются (если Вы переходите на редакцию с большим числом модулей, то для того чтобы новые модули появились в системе, необходимо обновить систему или обновить принудительно, если версия системы актуальная)<br />
<br />
2. Ваш сайт будет работать неограниченное время (на триальном ключе только 30 дней)</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&diff=7809Переход с триальной версии на коммерческую версию системы UMI.CMS2014-05-21T09:09:33Z<p>Stexe: </p>
<hr />
<div>'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:'''<br />
Активировать систему лицензионным ключом коммерческой редакции<br />
<br />
'''Решение:'''<br />
Для активации системы нам необходимо войти в модуль "Конфигурация", и на вкладке "Домены" очистить поле "Доменный ключ" и затем нажать кнопку "Сохранить".<br />
<br />
[[Файл:key2.png]]<br />
<br />
<br />
Далее, появляется окно "Неверный лицензионный ключ", в этом окне присутствует поле для ввода лицензионного ключа, соответственно вводим ключ и нажимаем на кнопку "Проверить". <br />
<br />
[[Файл:key4.png]]<br />
<br />
<br />
Если ключ не принимается, обращаемся к статье [http://wiki.umisoft.ru/Не_принимается_лицензионный_ключ]<br />
<br />
При переходе с одной редакции системы на другую происходит следующее:<br />
<br />
1. Модули, которые отсутствуют в Вашей редакции удаляются (если Вы переходите на редакцию с большим числом модулей, то для того чтобы новые модули появились в системе, необходимо обновить систему или обновить принудительно, если версия системы актуальная)<br />
<br />
2. Ваш сайт будет работать неограниченное время (на триальном ключе только 30 дней)</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&diff=7808Переход с триальной версии на коммерческую версию системы UMI.CMS2014-05-21T09:08:58Z<p>Stexe: </p>
<hr />
<div>'''Задача:'''<br />
Активировать систему лицензионным ключом коммерческой редакции<br />
<br />
'''Решение:'''<br />
Для активации системы нам необходимо войти в модуль "Конфигурация", и на вкладке "Домены" очистить поле "Доменный ключ" и затем нажать кнопку "Сохранить".<br />
<br />
[[Файл:key2.png]]<br />
<br />
<br />
Далее, появляется окно "Неверный лицензионный ключ", в этом окне присутствует поле для ввода лицензионного ключа, соответственно вводим ключ и нажимаем на кнопку "Проверить". <br />
<br />
[[Файл:key4.png]]<br />
<br />
<br />
Если ключ не принимается, обращаемся к статье [http://wiki.umisoft.ru/Не_принимается_лицензионный_ключ]<br />
<br />
При переходе с одной редакции системы на другую происходит следующее:<br />
<br />
1. Модули, которые отсутствуют в Вашей редакции удаляются (если Вы переходите на редакцию с большим числом модулей, то для того чтобы новые модули появились в системе, необходимо обновить систему или обновить принудительно, если версия системы актуальная)<br />
<br />
2. Ваш сайт будет работать неограниченное время (на триальном ключе только 30 дней)</div>Stexehttps://wiki.umisoft.ru/index.php?title=WYSIWYG:_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0&diff=7715WYSIWYG: Пользовательская настройка2014-04-28T09:29:20Z<p>Stexe: </p>
<hr />
<div>[[Категория: Вопросы и уроки разработки сайтов на UMI.CMS]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Начиная с версии 2.6 появилась возможность "тонкой" настройки визуального редактора, например, подключить свой файл стилей (CSS), настроить классы для типовых элементов, изменить настройки по "чистке" избыточного кода и многое другое. Подробное описание всех параметров для настройки WYSIWYG можно прочитать [http://wiki.moxiecode.com/index.php/TinyMCE:Configuration здесь].<br/><br/><br />
'''Реализация:''' <br />
<br />
Для настройки визуального редактора появился custom конфигурационный файл. Этот файл не будет перезаписан при обновлении.<br />
Путь к файлу:<br />
'''/js/cms/wysiwyg/tinymce/jscripts/tiny_mce/tinymce_custom.js'''<br />
<br />
Файл содержит код javascript-объекта window.mceCustomSettings, в начальной поставке файл выглядит примерно так:<br />
<source lang="javascript"><br />
// index/reference page for all available core configuration options in TinyMCE:<br />
// http://wiki.moxiecode.com/index.php/TinyMCE:Configuration<br />
<br />
window.mceCustomSettings = {<br />
convert_fonts_to_spans : true, // convert <font ..> tags to <span style="color:red,..."><br />
cleanup : true, // remove all unknown tags and attributes<br />
<br />
extended_valid_elements : "script[type=text/javascript|src|languge|lang],map[*],area[*],umi:*[*],input[*]", // extended tags and atributes<br />
content_css : "/css/cms/style.css", // enable custom CSS<br />
theme_advanced_styles : "Table=my-table;Table Cell=my-table-cell;Table Row=my-table-row" // custom css classes<br />
}<br />
</source><br />
<br />
'''Обратите внимание:''' при модификации объекта следите за тем, чтобы после последней опции (перед }) не было запятой. В противном случае редактор перестанет работать в браузере Internet Explorer.</div>Stexehttps://wiki.umisoft.ru/index.php?title=WYSIWYG:_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0&diff=7714WYSIWYG: Пользовательская настройка2014-04-28T09:28:27Z<p>Stexe: </p>
<hr />
<div>[[Категория: Вопросы и уроки разработки сайтов на UMI.CMS]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Начиная с версии 2.6 появилась возможность "тонкой" настройки визуального редактора, например, подключить свой файл стилей (CSS), настроить классы для типовых элементов, изменить настройки по "чистке" избыточного кода и многое другое. Подробное описание всех параметров для настройки WYSIWYG можно прочитать [http://wiki.moxiecode.com/index.php/TinyMCE:Configuration здесь].<br/><br/><br />
'''Реализация:''' <br />
<br />
Для настройки визуального редактора появился custom конфигурационный файл. Этот файл не будет перезаписан при обновлении.<br />
Путь к файлу:<br />
'''/js/cms/wysiwyg/tinymce/jscripts/tiny_mce/tinymce_custom.js'''<br />
<br />
Файл содержит код javascript-объекта window.mceCustomSettings, в начальной поставке файл выглядит примерно так:<br />
<source lang="javascript"><br />
// index/reference page for all available core configuration options in TinyMCE:<br />
// http://wiki.moxiecode.com/index.php/TinyMCE:Configuration<br />
<br />
window.mceCustomSettings = {<br />
convert_fonts_to_spans : true, // convert <font ..> tags to <span style="color:red,..."><br />
cleanup : true, // remove all unknown tags and attributes<br />
<br />
extended_valid_elements : "script[type=text/javascript|src|languge|lang],map[*],area[*],umi:*[*],input[*]", // extended tags and atributes<br />
content_css : "/css/cms/style.css", // enable custom CSS<br />
theme_advanced_styles : "Table=my-table;Table Cell=my-table-cell;Table Row=my-table-row" // custom css classes<br />
}<br />
</source><br />
<br />
'''Обратите внимание:''' при модификации объекта следите за тем, чтобы после последней опции (перед }) не было запятой. В противном случае редактор перестанет работать в IE</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D1%83%D1%88%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7713Заглушка на сайте2014-04-28T09:16:06Z<p>Stexe: </p>
<hr />
<div>[[Категория:Вопросы установки настройки и переноса]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Поставить заглушку на сайт <br/><br/><br />
'''Реализация:''' <br/><br />
Управление заглушкой сайта осуществляется с помощью изменений значений директив в файле '''config.ini''', который расположен в корневой директории системы.<br/><br />
Информация об установке заглушки на сайт находится в документации по макросам и шаблонам UMI.CMS <br/><br />
http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_stub/</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D1%83%D1%88%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7712Заглушка на сайте2014-04-28T09:13:23Z<p>Stexe: </p>
<hr />
<div>[[Категория:Вопросы установки настройки и переноса]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Поставить заглушку на сайт <br/><br/><br />
'''Реализация:''' <br/><br />
Информация об установке заглушки на сайт находится в документации по макросам и шаблонам UMI.CMS <br/><br />
http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_stub/</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D1%83%D1%88%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7711Заглушка на сайте2014-04-28T09:13:05Z<p>Stexe: </p>
<hr />
<div>[[Категория:Вопросы установки настройки и переноса]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Поставить заглушку на сайт <br/><br/><br />
'''Реализация:''' <br/><br />
Информация об установке заглушки на сайт находится в документации по макросам и шаблонам UMI.CMS<br />
http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_stub/</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D1%83%D1%88%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B5&diff=7709Заглушка на сайте2014-04-28T09:10:02Z<p>Stexe: переименовал «Заглушка 2.8» в «Заглушка на сайте»</p>
<hr />
<div>Ранее способы создания "заглушки", например, [[Заглушка (Настройки)|такой]], были не слишком удобны для разработчика, заглушки не скрывали весь сайт и имели прочие побочные эффекты. <br />
<br />
В версии '''UMI.CMS 2.8''' появилась специальная настройка в файле '''config.ini''', которая делает заглушку удобной для разработчика:<br />
<br />
Секция '''[stub]''' в файле '''config.ini''' отвечает за включение\выключение заглушки, а так же за настройку исключений.<br />
<br />
=== Параметры: ===<br />
'''enabled''' может иметь значение "'''1'''"(вкл.) или "'''0'''"(выкл.). <br />
<br />
Пример: <br />
<source lang="ini">enabled = 1</source><br />
'''filter.ip[]''' - ip-адрес, которому сайт будет отдаваться в нормальном виде(без заглушки).<br />
<br />
Пример:<br />
<source lang="ini">filter.ip[] = "127.0.0.1"</source><br />
<br />
=== Внешний вид: ===<br />
В папке '''/errors/''' находится файл '''stub.php''', содержащий html-код "заглушки". Вы можете изменять его по своему усмотрению.<br />
<br />
[[category:Вопросы установки настройки и переноса]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D1%83%D1%88%D0%BA%D0%B0_2.8&diff=7710Заглушка 2.82014-04-28T09:10:02Z<p>Stexe: переименовал «Заглушка 2.8» в «Заглушка на сайте»</p>
<hr />
<div>#перенаправление [[Заглушка на сайте]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2&diff=7708Вывод количества фотографий и фотоальбомов2014-04-28T08:49:47Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.<br/><br/><br />
'''Реализация:''' <br />
<br />
В файл \classes\modules\custom.php добавим код макросов '''getPhotosInAlbumCount()''' и '''getSubAlbumsCount()''', а также вспомогательного метода '''getPagesCount()'''.<br />
<source lang="php"><br />
public function getPhotosInAlbumCount ($parentId) {<br />
$maxDepth = 99;<br />
return self::getPagesCount($parentId, 'photoalbum-photo', $maxDepth);<br />
}<br />
<br />
public function getSubAlbumsCount ($parentId) {<br />
return self::getPagesCount($parentId, 'photoalbum-album', 1);<br />
}<br />
<br />
protected function getPagesCount($parentId, $hierarchyTypeModuleMethod, $depth) {<br />
if ( !$parentId ) {<br />
$parentId = getRequest('param0');<br />
}<br />
if ( !$depth || !is_numeric($depth) ) {<br />
$depth = 0;<br />
}<br />
list($typeModule, $typeMethod) = explode('-', $hierarchyTypeModuleMethod);<br />
$hierarchyTypesColl = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypesColl->getTypeByName($typeModule, $typeMethod);<br />
<br />
if ( $hierarchyType instanceof iumiHierarchyType ) {<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
$hierarchy = umiHierarchy::getInstance();<br />
$onlyActive = false;<br />
$withUnVisible = true;<br />
$childsCount = $hierarchy->getChildsCount($parentId, $onlyActive, $withUnVisible, $depth, $hierarchyTypeId);<br />
return intval( $childsCount );<br />
}<br />
return 0;<br />
<br />
}<br />
</source><br />
<br />
<ul><br />
<li>Макрос '''getPhotosInAlbumCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.</li><br />
<li>Макрос '''getSubAlbumsCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество альбомов в нем.</li><br />
</ul><br />
<h2>TPL-шаблонизатор</h2><br />
Примеры вызовов:<br />
<source lang="html4strict"><br />
%custom getPhotosInAlbumCount(%pid%)%<br />
%custom getPhotosInAlbumCount('22')%<br />
%custom getSubAlbumsCount(%pid%)%<br />
%custom getSubAlbumsCount('22')%<br />
</source><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
Примеры вызовов:<br />
<br />
<source lang="xml"><br />
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', page/@id))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', '22'))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', page/@id))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', '22'))/udata"/><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2&diff=7707Вывод количества фотографий и фотоальбомов2014-04-28T08:49:26Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.<br/><br/><br />
'''Реализация:''' <br />
<br />
В файл \classes\modules\custom.php добавим код макросов '''getPhotosInAlbumCount()''' и '''getSubAlbumsCount()''', а также вспомогательного метода '''getPagesCount()'''.<br />
<source lang="php"><br />
public function getPhotosInAlbumCount ($parentId) {<br />
$maxDepth = 99;<br />
return self::getPagesCount ($parentId, 'photoalbum-photo', $maxDepth);<br />
}<br />
<br />
public function getSubAlbumsCount ($parentId) {<br />
return self::getPagesCount ($parentId, 'photoalbum-album', 1);<br />
}<br />
<br />
protected function getPagesCount($parentId, $hierarchyTypeModuleMethod, $depth) {<br />
if ( !$parentId ) {<br />
$parentId = getRequest('param0');<br />
}<br />
if ( !$depth || !is_numeric($depth) ) {<br />
$depth = 0;<br />
}<br />
list($typeModule, $typeMethod) = explode('-', $hierarchyTypeModuleMethod);<br />
$hierarchyTypesColl = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypesColl->getTypeByName($typeModule, $typeMethod);<br />
<br />
if ( $hierarchyType instanceof iumiHierarchyType ) {<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
$hierarchy = umiHierarchy::getInstance();<br />
$onlyActive = false;<br />
$withUnVisible = true;<br />
$childsCount = $hierarchy->getChildsCount($parentId, $onlyActive, $withUnVisible, $depth, $hierarchyTypeId);<br />
return intval( $childsCount );<br />
}<br />
return 0;<br />
<br />
}<br />
</source><br />
<br />
<ul><br />
<li>Макрос '''getPhotosInAlbumCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.</li><br />
<li>Макрос '''getSubAlbumsCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество альбомов в нем.</li><br />
</ul><br />
<h2>TPL-шаблонизатор</h2><br />
Примеры вызовов:<br />
<source lang="html4strict"><br />
%custom getPhotosInAlbumCount(%pid%)%<br />
%custom getPhotosInAlbumCount('22')%<br />
%custom getSubAlbumsCount(%pid%)%<br />
%custom getSubAlbumsCount('22')%<br />
</source><br />
<br />
<h2>XSLT-шаблонизатор</h2><br />
Примеры вызовов:<br />
<br />
<source lang="xml"><br />
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', page/@id))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getPhotosInAlbumCount/', '22'))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', page/@id))/udata"/><br />
<xsl:value-of select="document(concat('udata://custom/getSubAlbumsCount/', '22'))/udata"/><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2&diff=7706Вывод количества фотографий и фотоальбомов2014-04-28T08:47:02Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.<br/><br/><br />
'''Реализация:''' <br />
<br />
В файл \classes\modules\custom.php добавим код макросов '''getPhotosInAlbumCount()''' и '''getSubAlbumsCount()''', а также вспомогательного метода '''getPagesCount()'''.<br />
<source lang="php"><br />
public function getPhotosInAlbumCount ($parentId) {<br />
$maxDepth = 99;<br />
return self::getPagesCount ($parentId, 'photoalbum-photo', $maxDepth);<br />
}<br />
<br />
public function getSubAlbumsCount ($parentId) {<br />
return self::getPagesCount ($parentId, 'photoalbum-album', 1);<br />
}<br />
<br />
protected function getPagesCount($parentId, $hierarchyTypeModuleMethod, $depth) {<br />
if ( !$parentId ) {<br />
$parentId = getRequest('param0');<br />
}<br />
if ( !$depth || !is_numeric($depth) ) {<br />
$depth = 0;<br />
}<br />
list($typeModule, $typeMethod) = explode('-', $hierarchyTypeModuleMethod);<br />
$hierarchyTypesColl = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypesColl->getTypeByName($typeModule, $typeMethod);<br />
<br />
if ( $hierarchyType instanceof iumiHierarchyType ) {<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
$hierarchy = umiHierarchy::getInstance();<br />
$onlyActive = false;<br />
$withUnVisible = true;<br />
$childsCount = $hierarchy->getChildsCount($parentId, $onlyActive, $withUnVisible, $depth, $hierarchyTypeId);<br />
return intval( $childsCount );<br />
}<br />
return 0;<br />
<br />
}<br />
</source><br />
<br />
<ul><br />
<li>Макрос '''getPhotosInAlbumCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.</li><br />
<li>Макрос '''getSubAlbumsCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество альбомов в нем.</li><br />
</ul><br />
<h2>TPL-шаблонизатор</h2><br />
Примеры вызовов:<br />
<source lang="html4strict"><br />
%custom getPhotosInAlbumCount(%pid%)%<br />
%custom getPhotosInAlbumCount('22')%<br />
%custom getSubAlbumsCount(%pid%)%<br />
%custom getSubAlbumsCount('22')%<br />
</source><br />
<br />
<h2>XSLT-шаблонизатор</h2></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2&diff=7705Вывод количества фотографий и фотоальбомов2014-04-28T08:45:10Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Фотогалереи]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Вывести количество фотографий в фотоальбоме на всей глубине вложенности и количество дочерних альбомов в фотоальбоме.<br/><br/><br />
'''Реализация:''' <br />
<br />
В файл \classes\modules\custom.php добавим код макросов '''getPhotosInAlbumCount()''' и '''getSubAlbumsCount()''', а также вспомогательного метода '''getPagesCount()'''.<br />
<source lang="php"><br />
public function getPhotosInAlbumCount ($parentId) {<br />
$maxDepth = 99;<br />
return self::getPagesCount ($parentId, 'photoalbum-photo', $maxDepth);<br />
}<br />
<br />
public function getSubAlbumsCount ($parentId) {<br />
return self::getPagesCount ($parentId, 'photoalbum-album', 1);<br />
}<br />
<br />
protected function getPagesCount($parentId, $hierarchyTypeModuleMethod, $depth) {<br />
if ( !$parentId ) {<br />
$parentId = getRequest('param0');<br />
}<br />
if ( !$depth || !is_numeric($depth) ) {<br />
$depth = 0;<br />
}<br />
list($typeModule, $typeMethod) = explode('-', $hierarchyTypeModuleMethod);<br />
$hierarchyTypesColl = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypesColl->getTypeByName($typeModule, $typeMethod);<br />
<br />
if ( $hierarchyType instanceof iumiHierarchyType ) {<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
$hierarchy = umiHierarchy::getInstance();<br />
$onlyActive = false;<br />
$withUnVisible = true;<br />
$childsCount = $hierarchy->getChildsCount($parentId, $onlyActive, $withUnVisible, $depth, $hierarchyTypeId);<br />
return intval( $childsCount );<br />
}<br />
return 0;<br />
<br />
}<br />
</source><br />
<br />
<ul><br />
<li>Макрос '''getPhotosInAlbumCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество фотографий в нем на всей глубине вложенности.</li><br />
<li>Макрос '''getSubAlbumsCount()''' в качестве параметра принимает единственный параметр ''$parentId'' - id родительского фотоальбома, и возвращает количество альбомов в нем.</li><br />
</ul><br />
<h2>TPL-шаблонизатор</h2><br />
<br />
<h2>XSLT-шаблонизатор</h2></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2&diff=7703Вывод количества фотографий и фотоальбомов2014-04-28T08:35:08Z<p>Stexe: переименовал «Вывод количества фотографий во всех подразделах» в «Вывод количества фотографий и фотоальбомов»</p>
<hr />
<div>== Задача ==<br />
Необходимо в описании раздела вывести общее количество фотографий во всех его подразделах.<br />
<br />
== Решение ==<br />
Воспользуемся кастомным макросом:<br />
<br />
<source lang="php"><br />
public function phtShowPhotoCountTotal($pid = 0) {<br />
if(!$pid) {<br />
return false;<br />
}<br />
<br />
// Получаем id типа данных "Фотография"<br />
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyTypeId = $hierarchyTypes->getTypeByName('photoalbum', 'photo')->getId();<br />
<br />
// Считаем количество дочерних объектов типа "Фотография"<br />
// Скрытые и неактивные не считаем<br />
$hierarchy = umiHierarchy::getInstance();<br />
$childsCount = $hierarchy->getChildsCount($pid, false, false, 0, $hierarchyTypeId);<br />
<br />
if($childsCount){<br />
return $childsCount;<br />
} else {<br />
return false;<br />
}<br />
}<br />
</source><br />
<br />
Далее, в шаблон Фотогалереи добавим в нужное место строчку:<br />
<br />
%custom phtShowPhotoCountTotal(%pid%)%<br />
<br />
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B2%D0%BE_%D0%B2%D1%81%D0%B5%D1%85_%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0%D1%85&diff=7704Вывод количества фотографий во всех подразделах2014-04-28T08:35:08Z<p>Stexe: переименовал «Вывод количества фотографий во всех подразделах» в «Вывод количества фотографий и фотоальбомов»</p>
<hr />
<div>#перенаправление [[Вывод количества фотографий и фотоальбомов]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7702Вывод случайного изображения фотогалереи2014-04-27T09:21:12Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
Макрос '''getLinkToRandomPhoto(''') возвращает путь до изображения случайной фотографии (элемент иерархии).<br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7700Вывод случайного изображения фотогалереи2014-04-27T09:20:13Z<p>Stexe: переименовал «Вывод случайного изображения фотогалереи с помощью umiSelection» в «Вывод случайного изображения фотогалереи»</p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
Макрос '''getLinkToRandomPhoto(''') возвращает путь до изображения случайной фотографии (элемент иерархии).<br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_umiSelection&diff=7701Вывод случайного изображения фотогалереи с помощью umiSelection2014-04-27T09:20:13Z<p>Stexe: переименовал «Вывод случайного изображения фотогалереи с помощью umiSelection» в «Вывод случайного изображения фотогалереи»</p>
<hr />
<div>#перенаправление [[Вывод случайного изображения фотогалереи]]</div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7699Вывод случайного изображения фотогалереи2014-04-27T09:19:47Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
Макрос '''getLinkToRandomPhoto(''') возвращает путь до изображения случайной фотографии (элемент иерархии).<br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7698Вывод случайного изображения фотогалереи2014-04-27T09:19:39Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
Макроса '''getLinkToRandomPhoto(''') возвращает путь до изображения случайной фотографии (элемент иерархии).<br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7697Вывод случайного изображения фотогалереи2014-04-27T09:17:54Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном случае мы будем использовать механизм формирования выборок '''selector'''. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7696Вывод случайного изображения фотогалереи2014-04-27T09:17:29Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном варианте мы будем использовать механизм формирования выборок selector. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata}" alt="photo" title="random photo" /><br />
</source></div>Stexehttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B8&diff=7695Вывод случайного изображения фотогалереи2014-04-27T09:17:12Z<p>Stexe: </p>
<hr />
<div>[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]<br />
'''Актуально для версии 2.9.6'''<br/><br/><br />
'''Задача:''' Выводить путь до изображения случайной фотографии.<br/><br/><br />
'''Реализация:''' <br />
<br />
В данном варианте мы будем использовать механизм формирования выборок selector. <br/>В файл '''\classes\modules\custom.php''' добавим код custom макроса '''getLinkToRandomPhoto('''):<br />
<br />
<source lang="php"><br />
public function getLinkToRandomPhoto() {<br />
$photos = new selector('pages');<br />
$photos->types('object-type')->name('photoalbum', 'photo');<br />
$photos->order('rand');<br />
$randomPhoto = $photos->first;<br />
<br />
if ( $randomPhoto instanceof iumiHierarchyElement ) {<br />
$imagePath = $randomPhoto->getValue('photo')->getFilePath();<br />
$imagePath = preg_replace('/^\./', '', $imagePath, 1);<br />
return $imagePath;<br />
}<br />
return '';<br />
}<br />
</source><br />
<h2>TPL-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="html4strict"><br />
<img src="%custom getLinkToRandomPhoto()%" alt="photo" title="random photo" /><br />
</source><br />
<h2>XSLT-шаблонизатор</h2><br />
Пример вызова макроса:<br />
<source lang="xml"><br />
<img src="{document('udata://custom/getLinkToRandomPhoto')}/udata" alt="photo" title="random photo" /><br />
</source></div>Stexe