https://wiki.umisoft.ru/api.php?action=feedcontributions&user=Kublan&feedformat=atomUmicms - Вклад участника [ru]2024-03-29T01:32:55ZВклад участникаMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%D0%BF%D1%80%D0%B8_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5_%D0%B8%D0%B7_1%D0%A1_zip_%D0%B0%D1%80%D1%85%D0%B8%D0%B2%D0%BE%D0%B2&diff=8722Ошибка при выгрузке из 1С zip архивов2018-09-30T14:24:15Z<p>Kublan: </p>
<hr />
<div>'''Актуально 19'''<br />
<br />
Если у вас в config.ini включена директива '''exchange.commerceML.accept-zip''', то при выгрузке, на стороне 1С, может возникнуть ошибка:<br />
<br />
[0.0000620] Непредвиденная ошибка. [0.0000701]<br />
<br />
classes/system/utils/UmiZipArchive/UmiZipArchive.php(2): UmiZipArchive->open() <br />
<br />
Она происходит, потому что вес zip архива превысил норму указанную в директиве: <br />
'''exchange.commerceML.maxFileSize'''<br />
<br />
Для решения проблемы вам необходимо увеличить данную директиву.<br />
<br />
[[category:Модуль Обмен данными]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%D0%BF%D1%80%D0%B8_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5_%D0%B8%D0%B7_1%D0%A1_zip_%D0%B0%D1%80%D1%85%D0%B8%D0%B2%D0%BE%D0%B2&diff=8721Ошибка при выгрузке из 1С zip архивов2018-09-30T14:24:05Z<p>Kublan: Новая страница: «'''Актуально 19''' Если у вас в config.ini включена директива '''exchange.commerceML.accept-zip''', то при выгрузк…»</p>
<hr />
<div>'''Актуально 19'''<br />
<br />
Если у вас в config.ini включена директива '''exchange.commerceML.accept-zip''', то при выгрузке, на стороне 1С, может возникнуть ошибка:<br />
<br />
[0.0000620] Непредвиденная ошибка. [0.0000701]<br />
classes/system/utils/UmiZipArchive/UmiZipArchive.php(2): UmiZipArchive->open() <br />
<br />
Она происходит, потому что вес zip архива превысил норму указанную в директиве: <br />
'''exchange.commerceML.maxFileSize'''<br />
<br />
Для решения проблемы вам необходимо увеличить данную директиву.<br />
<br />
[[category:Модуль Обмен данными]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=YML_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%BB%D1%8F_vendor_%D0%B8_model_%D1%81_%D1%82%D0%B8%D0%BF%D0%BE%D0%BC_%D0%BF%D0%BE%D0%BB%D1%8F_%D0%92%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=8720YML шаблон для vendor и model с типом поля Выпадающий список2018-09-30T10:04:08Z<p>Kublan: Новая страница: «'''Актуально 19''' Если поля c идентификаторами proizvoditel и model у вас реализованы с типом данны…»</p>
<hr />
<div>'''Актуально 19'''<br />
<br />
Если поля c идентификаторами proizvoditel и model у вас реализованы с типом данных выпадающий список, <br />
то вам необходимо добавить кастомный шаблон в файл /xsl/export/custom/YML.xsl<br />
<br />
Сам шаблон находится в файле /xsl/export/YML.xsl между тэгами:<br />
<source lang='xml'><br />
<xsl:template match="page[basetype/@method = 'object']"><br />
<!-- код в шаблоне --><br />
</xsl:template><br />
</source><br />
<br />
Необходимо скопировать его и перенести в файл /xsl/export/custom/YML.xsl<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 />
<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 />
<xsl:choose><br />
<xsl:when test=".//property[@name = $vendor and @type = 'relation']"><br />
<xsl:variable name="relation-vendor" select=".//property[@name = $vendor]/value/item/@id" /><br />
<vendor><xsl:value-of select="document(concat('uobject://', $relation-vendor))/udata/object/@name"/></vendor><br />
</xsl:when><br />
<xsl:otherwise><br />
<vendor><xsl:value-of select=".//property[@name = $vendor]/value"/></vendor><br />
</xsl:otherwise><br />
</xsl:choose><br />
<xsl:choose><br />
<xsl:when test=".//property[@name = $model and @type = 'relation']"><br />
<xsl:variable name="relation-model" select=".//property[@name = $model]/value/item/@id" /><br />
<model><xsl:value-of select="document(concat('uobject://', $relation-model))/udata/object/@name"/></model><br />
</xsl:when><br />
<xsl:otherwise><br />
<model><xsl:value-of select=".//property[@name = $model]/value"/></model><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:when><br />
</source><br />
<br />
<br />
[[category:Модуль Обмен данными]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%B8%D0%B7_1%D0%A1_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%D0%BC&diff=8687Выгрузка из 1С информации по складам2018-08-27T12:08:15Z<p>Kublan: </p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вы хотите чтобы из 1С в систему выгружалась информация из тегов:<br />
<source lang='xml'><br />
<Склад ИдСклада="6257b501-c90c-11e2-bd93-001e67494c74" КоличествоНаСкладе="84"/><br />
<Склад ИдСклада="885f414e-4d67-11e5-ac2e-001e67494c75" КоличествоНаСкладе="20"/><br />
</source><br />
<br />
То вам необходимо добавить следующий шаблон в файл /xsl/import/custom/commerceML2.xsl<br />
<source lang='xml'><br />
<xsl:template match="ПакетПредложений"><br />
<objects><br />
<xsl:for-each select="Склады/Склад"><br />
<object id="{Ид}" type-id="81" name="{Наименование}" /><br />
</xsl:for-each><br />
</objects><br />
<pages><br />
<xsl:apply-templates select="Предложения/Предложение" /><br />
</pages><br />
<options><br />
<xsl:for-each select="Предложения/Предложение"><br />
<entity page-id="{Ид}" field-name="stores_state"><br />
<xsl:for-each select="Предложения/Предложение/Склад"><br />
<option int="{@КоличествоНаСкладе}" float="0" object-id="{@ИдСклада}" /><br />
</xsl:for-each><br />
</entity><br />
</xsl:for-each><br />
</options><br />
</xsl:template><br />
</source><br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%B8%D0%B7_1%D0%A1_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%D0%BC&diff=8686Выгрузка из 1С информации по складам2018-08-27T08:57:13Z<p>Kublan: </p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вы хотите чтобы из 1С в систему выгружалась информация из тегов:<br />
<source lang='xml'><br />
<Склад ИдСклада="6257b501-c90c-11e2-bd93-001e67494c74" КоличествоНаСкладе="84"/><br />
<Склад ИдСклада="885f414e-4d67-11e5-ac2e-001e67494c75" КоличествоНаСкладе="20"/><br />
</source><br />
<br />
То вам необходимо добавить следующий шаблон в файл /xsl/import/custom/commerceML2.xsl<br />
<source lang='xml'><br />
<xsl:template match="ПакетПредложений"><br />
<objects><br />
<xsl:for-each select="Склады/Склад"><br />
<object id="{Ид}" type-id="81" name="{Наименование}" /><br />
</xsl:for-each><br />
</objects><br />
<pages><br />
<xsl:apply-templates select="Предложения/Предложение" /><br />
</pages><br />
<options><br />
<xsl:for-each select="Предложения/Предложение"><br />
<entity page-id="{Предложения/Предложение/Ид}" field-name="stores_state"><br />
<xsl:for-each select="Предложения/Предложение/Склад"><br />
<option int="{@КоличествоНаСкладе}" float="0" object-id="{@ИдСклада}" /><br />
</xsl:for-each><br />
</entity><br />
</xsl:for-each><br />
</options><br />
</xsl:template><br />
</source><br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%B8%D0%B7_1%D0%A1_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%D0%BC&diff=8685Выгрузка из 1С информации по складам2018-08-26T15:37:39Z<p>Kublan: Новая страница: «'''Актуально 18''' Если Вы хотите чтобы из 1С в систему выгружалась информация из тегов: <source…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вы хотите чтобы из 1С в систему выгружалась информация из тегов:<br />
<source lang='xml'><br />
<Склад ИдСклада="6257b501-c90c-11e2-bd93-001e67494c74" КоличествоНаСкладе="84"/><br />
<Склад ИдСклада="885f414e-4d67-11e5-ac2e-001e67494c75" КоличествоНаСкладе="20"/><br />
</source><br />
<br />
То вам необходимо добавить следующий шаблон в файл /xsl/import/custom/commerceML2.xsl<br />
<source lang='xml'><br />
<xsl:template match="ПакетПредложений"><br />
<objects><br />
<xsl:for-each select="Склады/Склад"><br />
<object id="{Ид}" type-id="81" name="{Наименование}" /><br />
</xsl:for-each><br />
</objects><br />
<pages><br />
<xsl:apply-templates select="Предложения/Предложение" /><br />
</pages><br />
<options><br />
<entity page-id="{Предложения/Предложение/Ид}" field-name="stores_state"><br />
<xsl:for-each select="Предложения/Предложение/Склад"><br />
<option int="{@КоличествоНаСкладе}" float="0" object-id="{@ИдСклада}" /><br />
</xsl:for-each><br />
</entity><br />
</options><br />
</xsl:template><br />
</source><br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=CSV_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%BF%D0%BE_%D0%BA%D1%80%D0%BE%D0%BD%D1%83&diff=8675CSV импорт по крону2018-08-19T09:47:20Z<p>Kublan: </p>
<hr />
<div>''' Актуально 18 '''<br />
<br />
Для того чтобы настроить CSV импорт по расписанию необходим модуль "Обмен данными" и следующий код:<br />
<br />
Создадим файл custom_events.php в папке /components/exchange и добавим в него следующий код:<br />
<br />
<source lang='php'><br />
<?php<br />
<br />
new umiEventListener('cron', 'exchange', 'onCronCsvUpdate');<br />
</source><br />
<br />
В файл customMacros.php добавим обработчик события:<br />
<br />
<source lang='php'><br />
<?php<br />
<br />
use UmiCms\Service;<br />
<br />
/** Класс пользовательских макросов */<br />
class ExchangeCustomMacros {<br />
/** @var exchange $module */<br />
public $module;<br />
<br />
public function onCronCsvUpdate(iUmiEventPoint $event) {<br />
$id = 38853; // идентификатор выгрузки<br />
$umiObjects = umiObjectsCollection::getInstance();<br />
<br />
$settings = $umiObjects->getObject($id);<br />
<br />
if (!$settings instanceof iUmiObject) {<br />
throw new publicException(getLabel('exchange-err-settings_notfound'));<br />
}<br />
<br />
$importFile = $settings->getValue('file');<br />
if (!($importFile instanceof umiFile) || $importFile->getIsBroken()) {<br />
throw new publicException(getLabel('exchange-err-importfile'));<br />
}<br />
<br />
$format_id = $settings->getValue('format');<br />
$importFormat = $umiObjects->getObject($format_id);<br />
if (!$importFormat instanceof iUmiObject) {<br />
throw new publicException(getLabel('exchange-err-format_undefined'));<br />
}<br />
<br />
$suffix = $importFormat->getValue('sid');<br />
$session = Service::Session();<br />
$importOffset = (int) $session->get('import_offset_' . $id);<br />
$umiConfig = mainConfiguration::getInstance();<br />
$blockSize = $umiConfig->get('modules', 'exchange.splitter.limit') ?: 25;<br />
<br />
$splitter = umiImportSplitter::get($suffix);<br />
if ($splitter instanceof csvSplitter) {<br />
$this->setCsvEncoding($splitter, $settings);<br />
}<br />
<br />
$splitter->load($importFile->getFilePath(), $blockSize, $importOffset);<br />
$doc = $splitter->getDocument();<br />
$dump = $splitter->translate($doc);<br />
<br />
umiHierarchy::$ignoreSiteMap = true;<br />
<br />
$importer = new xmlImporter();<br />
$importer->loadXmlString($dump);<br />
<br />
$elements = $settings->getValue('elements');<br />
<br />
if (is_array($elements) && umiCount($elements)) {<br />
$importer->setDestinationElement($elements[0]);<br />
}<br />
<br />
$importer->setIgnoreParentGroups($splitter->ignoreParentGroups);<br />
$importer->setAutoGuideCreation($splitter->autoGuideCreation);<br />
$importer->setRenameFiles($splitter->getRenameFiles());<br />
<br />
$importer->execute();<br />
}<br />
<br />
public function setCsvEncoding(csvSplitter $splitter, iUmiObject $settings) {<br />
$scenarioEncodingId = $settings->getValue('encoding_import');<br />
$scenarioEncodingCode = '';<br />
$scenarioEncoding = umiObjectsCollection::getInstance()<br />
->getObject($scenarioEncodingId);<br />
<br />
if ($scenarioEncoding instanceof iUmiObject) {<br />
$scenarioEncodingCode = $scenarioEncoding->getName();<br />
}<br />
<br />
$configEncoding = mainConfiguration::getInstance()<br />
->get('system', 'default-exchange-encoding');<br />
$defaultEncoding = 'windows-1251';<br />
$encoding = $scenarioEncodingCode ?: $configEncoding;<br />
<br />
try {<br />
$splitter->setEncoding($encoding);<br />
} catch (InvalidArgumentException $e) {<br />
$splitter->setEncoding($defaultEncoding);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Теперь осталось только настроить автоматический запуск cron на какое-то время, это вы самостоятельно устанавливаете на хостинге, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .<br />
[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0_%D0%BF%D1%80%D0%B8_YML_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5&diff=8674Размерная сетка при YML выгрузке2018-08-19T08:45:06Z<p>Kublan: Новая страница: «''' Актуально 18 ''' Если при выгрузке в Яндекс Маркет одежды необходимо добавить к парамет…»</p>
<hr />
<div>''' Актуально 18 '''<br />
<br />
Если при выгрузке в Яндекс Маркет одежды необходимо добавить к параметру "Размер" атрибут '''unit''', то нужно воспользоваться следующей инструкцией:<br />
<br />
Создадим в шаблоне данных товара поле "Размерная сетка" с идентификатором "razmernaya_setka" и типом строка:<br />
[[Файл:Размерная_сетка.PNG]]<br />
<br />
<br />
В товаре добавим в данное поле необходимое значение, например, RU.<br />
<br />
Затем в файл /xsl/export/custom/YML.xsl добавим наш кастомный код:<br />
<br />
<source lang="xml"><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 />
<!-- Добавляем нижеуказанный код --><br />
<br />
<xsl:template match="field" mode="filterable"><br />
<xsl:param name="page_id" /><br />
<xsl:variable name="field_title" select="@title" /><br />
<xsl:variable name="field_name" select="@name" /><br />
<xsl:variable name="field_type" select="./type/@data-type" /><br />
<xsl:variable name="unit" select="//page[@id = $page_id]//property[@name = 'razmernaya_setka']/value" /><br />
<br />
<xsl:if test="//page[@id = $page_id]//property[@name = $field_name]/value != '' and $field_title != 'Цена' and $field_title != 'Штрихкод'"><br />
<xsl:variable name="field_value" select="//page[@id = $page_id]//property[@name = $field_name]/value" /><br />
<xsl:choose><br />
<xsl:when test="//page[@id = $page_id]//property[@name = $field_name]/value/item/@name"><br />
<xsl:choose><br />
<xsl:when test="$field_title = 'Размер'"> <br />
<param name="{$field_title}" unit="{$unit}"><xsl:value-of select="//page[@id = $page_id]//property[@name = $field_name]/value/item/@name"/></param><br />
</xsl:when><br />
<xsl:otherwise><br />
<param name="{$field_title}"><xsl:value-of select="//page[@id = $page_id]//property[@name = $field_name]/value/item/@name"/></param><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:if test="$field_type != 'boolean'"><br />
<param name="{$field_title}"><xsl:value-of select="$field_value"/></param><br />
</xsl:if><br />
<xsl:if test="$field_type = 'boolean' and $field_value = '1'"><br />
<param name="{$field_title}">Да</param><br />
</xsl:if><br />
<xsl:if test="$field_type = 'boolean' and $field_value = '0'"><br />
<param name="{$field_title}">Нет</param><br />
</xsl:if><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
Теперь в YML файл выгружается атрибут '''unit'''<br />
<br />
<source lang="xml"><br />
<param name="Размер" unit="RU">52-54</param><br />
<param name="Сезон">Лето</param><br />
<param name="Цвет">Синий</param><br />
<param name="Тип застежки">Молния</param><br />
</source><br />
<br />
[[category:Модуль Обмен данными]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0.PNG&diff=8673Файл:Размерная сетка.PNG2018-08-19T08:35:24Z<p>Kublan: </p>
<hr />
<div></div>Kublanhttps://wiki.umisoft.ru/index.php?title=CSV_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%BF%D0%BE_%D0%BA%D1%80%D0%BE%D0%BD%D1%83&diff=8672CSV импорт по крону2018-08-19T07:57:15Z<p>Kublan: Новая страница: «''' Актуально 18 ''' Для того чтобы настроить CSV импорт по расписанию необходим модуль "Обме…»</p>
<hr />
<div>''' Актуально 18 '''<br />
<br />
Для того чтобы настроить CSV импорт по расписанию необходим модуль "Обмен данными" и следующий код:<br />
<br />
Создадим файл custom_events.php в папке /components/exchange и добавим в него следующий код:<br />
<br />
<source lang='php'><br />
<?php<br />
<br />
new umiEventListener('cron', 'exchange', 'onCronCsvUpdate');<br />
</source><br />
<br />
В файл customMacros.php добавим обработчик события:<br />
<br />
<source lang='php'><br />
<?php<br />
<br />
use UmiCms\Service;<br />
<br />
/** Класс пользовательских макросов */<br />
class ExchangeCustomMacros {<br />
/** @var exchange $module */<br />
public $module;<br />
<br />
public function onCronCsvUpdate(iUmiEventPoint $event) {<br />
$id = 38853;<br />
$umiObjects = umiObjectsCollection::getInstance();<br />
<br />
$settings = $umiObjects->getObject($id);<br />
<br />
if (!$settings instanceof iUmiObject) {<br />
throw new publicException(getLabel('exchange-err-settings_notfound'));<br />
}<br />
<br />
$importFile = $settings->getValue('file');<br />
if (!($importFile instanceof umiFile) || $importFile->getIsBroken()) {<br />
throw new publicException(getLabel('exchange-err-importfile'));<br />
}<br />
<br />
$format_id = $settings->getValue('format');<br />
$importFormat = $umiObjects->getObject($format_id);<br />
if (!$importFormat instanceof iUmiObject) {<br />
throw new publicException(getLabel('exchange-err-format_undefined'));<br />
}<br />
<br />
$suffix = $importFormat->getValue('sid');<br />
$session = Service::Session();<br />
$importOffset = (int) $session->get('import_offset_' . $id);<br />
$umiConfig = mainConfiguration::getInstance();<br />
$blockSize = $umiConfig->get('modules', 'exchange.splitter.limit') ?: 25;<br />
<br />
$splitter = umiImportSplitter::get($suffix);<br />
if ($splitter instanceof csvSplitter) {<br />
$this->setCsvEncoding($splitter, $settings);<br />
}<br />
<br />
$splitter->load($importFile->getFilePath(), $blockSize, $importOffset);<br />
$doc = $splitter->getDocument();<br />
$dump = $splitter->translate($doc);<br />
<br />
umiHierarchy::$ignoreSiteMap = true;<br />
<br />
$importer = new xmlImporter();<br />
$importer->loadXmlString($dump);<br />
<br />
$elements = $settings->getValue('elements');<br />
<br />
if (is_array($elements) && umiCount($elements)) {<br />
$importer->setDestinationElement($elements[0]);<br />
}<br />
<br />
$importer->setIgnoreParentGroups($splitter->ignoreParentGroups);<br />
$importer->setAutoGuideCreation($splitter->autoGuideCreation);<br />
$importer->setRenameFiles($splitter->getRenameFiles());<br />
<br />
$importer->execute();<br />
}<br />
<br />
public function setCsvEncoding(csvSplitter $splitter, iUmiObject $settings) {<br />
$scenarioEncodingId = $settings->getValue('encoding_import');<br />
$scenarioEncodingCode = '';<br />
$scenarioEncoding = umiObjectsCollection::getInstance()<br />
->getObject($scenarioEncodingId);<br />
<br />
if ($scenarioEncoding instanceof iUmiObject) {<br />
$scenarioEncodingCode = $scenarioEncoding->getName();<br />
}<br />
<br />
$configEncoding = mainConfiguration::getInstance()<br />
->get('system', 'default-exchange-encoding');<br />
$defaultEncoding = 'windows-1251';<br />
$encoding = $scenarioEncodingCode ?: $configEncoding;<br />
<br />
try {<br />
$splitter->setEncoding($encoding);<br />
} catch (InvalidArgumentException $e) {<br />
$splitter->setEncoding($defaultEncoding);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Теперь осталось только настроить автоматический запуск cron на какое-то время, это вы самостоятельно устанавливаете на хостинге, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .<br />
[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2_%D1%83_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8634Массовое изменение прав у элементов раздела каталога2018-08-13T09:32:00Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
Если Вам необходимо массово изменить права у объектов каталога определенного раздела каталога, то для этого вам необходимо в корне сайта создать файл<br />
change_permissions.php и добавить в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$groupId = 4; // id группы пользователей или пользователя<br />
$categoryId = 150; // id раздела каталога <br />
<br />
/**<br />
* Уровень выставляемых прав от "0" до "31":<br />
* ---------------------------------------------------------------------------<br />
* | значение | чтение | редактирование | создание | удаление | перемещение |<br />
* | 0 | - | - | - | - | - |<br />
* | 1 | + | - | - | - | - |<br />
* | 3 | + | + | - | - | - |<br />
* | 7 | + | + | + | - | - |<br />
* | 15 | + | + | + | + | - |<br />
* | 31 | + | + | + | + | + |<br />
* ---------------------------------------------------------------------------<br />
*/<br />
$permissionsLevel = 1;<br />
<br />
$hierarchy = umiHierarchy::getInstance(); <br />
$childrenList = $hierarchy->getChildrenTree($categoryId);<br />
<br />
$permissions = permissionsCollection::getInstance();<br />
<br />
foreach ($childrenList as $elementId => $value) {<br />
$result = $permissions->setElementPermissions($groupId, $elementId, $permissionsLevel);<br />
<br />
if ($result) {<br />
echo "Изменены права видимости для элемента $elementId";<br />
echo "<br/>";<br />
} else {<br />
echo "Произошла ошибка на элементе $elementId";<br />
echo "<br/>";<br />
}<br />
}<br />
</source><br />
<br />
Затем вызвать скрипт в адресной строке имя_сайта.ru/change_permissions.php. Перед вызовом советуем сделать дамп базы данных.<br />
<br />
[[category:Написание кастомных макросов]][[category:Модуль Каталог]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2_%D1%83_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8633Массовое изменение прав у элементов раздела каталога2018-08-13T09:31:47Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
Если Вам необходимо массово изменить права у объектов каталога определенного раздела каталога, то для этого вам необходимо в корне сайта создать файл<br />
change_permissions.php и добавить в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$groupId = 4; // id группы пользователей или пользователя<br />
$categoryId = 150; // id раздела каталога <br />
<br />
/**<br />
* Уровень выставляемых прав от "0" до "31":<br />
* ---------------------------------------------------------------------------<br />
* | значение | чтение | редактирование | создание | удаление | перемещение |<br />
* | 0 | - | - | - | - | - |<br />
* | 1 | + | - | - | - | - |<br />
* | 3 | + | + | - | - | - |<br />
* | 7 | + | + | + | - | - |<br />
* | 15 | + | + | + | + | - |<br />
* | 31 | + | + | + | + | + |<br />
* ---------------------------------------------------------------------------<br />
*/<br />
$permissionsLevel = 1;<br />
<br />
$hierarchy = umiHierarchy::getInstance(); <br />
$childrenList = $hierarchy->getChildrenTree($categoryId);<br />
<br />
$permissions = permissionsCollection::getInstance();<br />
<br />
foreach ($childrenList as $elementId => $value) {<br />
$result = $permissions->setElementPermissions($groupId, $elementId, $permissionsLevel);<br />
<br />
if ($result) {<br />
echo "Изменены права видимости для элемента $elementId";<br />
echo "<br/>";<br />
} else {<br />
echo "Произошла ошибка на элементе $elementId";<br />
echo "<br/>";<br />
}<br />
}<br />
</source><br />
<br />
Затем вызвать скрипт в адресной строке имя_сайта.ru/change_permissions.php. Перед вызовом советуем сделать дамп базы данных.<br />
<br />
[[category:Написание кастомных макросов]][[category:Модуль Каталог]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2_%D1%83_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8628Массовое изменение прав у элементов раздела каталога2018-08-13T08:36:05Z<p>Kublan: </p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вам необходимо массово изменить права у объектов каталога определенного раздела каталога, то для этого вам необходимо в корне сайта создать файл<br />
change_permissions.php и добавить в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$groupId = 4; // id группы пользователей или пользователя<br />
<br />
/**<br />
* Уровень выставляемых прав от "0" до "31":<br />
* ---------------------------------------------------------------------------<br />
* | значение | чтение | редактирование | создание | удаление | перемещение |<br />
* | 0 | - | - | - | - | - |<br />
* | 1 | + | - | - | - | - |<br />
* | 3 | + | + | - | - | - |<br />
* | 7 | + | + | + | - | - |<br />
* | 15 | + | + | + | + | - |<br />
* | 31 | + | + | + | + | + |<br />
* ---------------------------------------------------------------------------<br />
*/<br />
$permissionsLevel = 1;<br />
<br />
$hierarchy = umiHierarchy::getInstance(); <br />
$childrenList = $hierarchy->getChildrenTree($groupId);<br />
<br />
$permissions = permissionsCollection::getInstance();<br />
<br />
foreach ($childrenList as $elementId => $value) {<br />
$result = $permissions->setElementPermissions($groupId, $elementId, $permissionsLevel);<br />
<br />
if ($result) {<br />
echo "Изменены права видимости для элемента $elementId";<br />
echo "<br/>";<br />
} else {<br />
echo "Произошла ошибка на элементе $elementId";<br />
echo "<br/>";<br />
}<br />
}<br />
</source><br />
<br />
Затем вызвать скрипт в адресной строке имя_сайта.ru/change_permissions.php. Перед вызовом советуем сделать дамп базы данных.<br />
<br />
[[category:Написание кастомных макросов]][[category:Модуль Каталог]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2_%D1%83_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8627Массовое изменение прав у элементов раздела каталога2018-08-13T08:33:06Z<p>Kublan: Новая страница: «'''Актуально 18''' Если Вам необходимо массово изменить права у объектов каталога определе…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вам необходимо массово изменить права у объектов каталога определенного раздела каталога, то для этого вам необходимо в корне сайта создать файл<br />
change_permissions.php и добавить в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$groupId = 4; // id группы пользователей или пользователя<br />
<br />
/**<br />
* Уровень выставляемых прав от "0" до "31":<br />
* ---------------------------------------------------------------------------<br />
* | значение | чтение | редактирование | создание | удаление | перемещение |<br />
* | 0 | - | - | - | - | - |<br />
* | 1 | + | - | - | - | - |<br />
* | 3 | + | + | - | - | - |<br />
* | 7 | + | + | + | - | - |<br />
* | 15 | + | + | + | + | - |<br />
* | 31 | + | + | + | + | + |<br />
* ---------------------------------------------------------------------------<br />
*/<br />
$permissionsLevel = 1;<br />
<br />
$hierarchy = umiHierarchy::getInstance(); <br />
$childrenList = $hierarchy->getChildrenTree($groupId);<br />
<br />
$permissions = permissionsCollection::getInstance();<br />
<br />
foreach ($childrenList as $elementId => $value) {<br />
$result = $permissions->setElementPermissions($groupId, $elementId, $permissionsLevel);<br />
<br />
if ($result) {<br />
echo "Изменены права видимости для элемента $elementId";<br />
echo "<br/>";<br />
} else {<br />
echo "Произошла ошибка на элементе $elementId";<br />
echo "<br/>";<br />
}<br />
}<br />
</source><br />
<br />
Затем вызвать скрипт в адресной строке имя_сайта.ru/change_permissions.php. Перед вызовом советуем сделать дамп базы данных.<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%83_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86&diff=8626Массовое изменение типа данных у дочерних страниц2018-08-13T07:43:52Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
Если Вам необходимо массово изменить тип данных дочерних страниц, например, у раздела каталога, то для этого можно написать простой скрипт.<br />
<br />
Добавим файл change_type.php в корень сайта и внесем в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require 'standalone.php';<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
<br />
$childrenList = $hierarchy->getChildrenTree($parentId);<br />
<br />
foreach($childrenList as $elementId => $value) {<br />
$element = $hierarchy->getElement($elementId);<br />
$object = $element->getObject();<br />
<br />
if (!$object instanceof iUmiObject) {<br />
throw new Exception('Передан не объект');<br />
}<br />
<br />
$object->setTypeId($typeId);<br />
}<br />
<br />
</source><br />
<br />
Где '''$parentId''' это id элемента, дочерние страницы которого мы хотим изменить,<br />
а '''$typeId''' это id нового типа данных.<br />
<br />
<br />
'''Внимание:'''<br />
Уже заполненные значения останутся в БД, но станут недоступны через API, если не переключить тип данных для объекта назад.<br />
<br />
Вызвать скрипт вы можете перейдя по ссылке '''имя_сайта.ru/change_type.php'''<br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_1%D0%A1_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA&diff=8565Написание шаблона выгрузки 1С на примере выгрузки нескольких картинок2018-07-26T14:42:13Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
В данной статье мы покажем пример написания шаблона выгрузки.<br />
<br />
Файл с выгружаемыми данными:<br />
<br />
<source lang="xslt"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<КоммерческаяИнформация ВерсияСхемы="2.04" ФорматДаты="ДФ=yyyy-MM-dd; ДЛФ=D" ФорматВремени="ДФ=ЧЧ:мм:сс; ДЛФ=T" РазделительДатаВремя="T" ФорматСуммы="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ФорматКоличества="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ДатаФормирования="2010-02-07T20:17:07"><br />
<Классификатор><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<Наименование>Классификатор (Каталог бытовой техники из 1С)</Наименование><br />
<Группы><br />
<Группа><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
<Наименование>Бытовая техника</Наименование><br />
</Группа><br />
</Группы><br />
</Классификатор><br />
<Каталог СодержитТолькоИзменения="false"><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<ИдКлассификатора>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</ИдКлассификатора><br />
<Наименование>Каталог бытовой техники из 1С</Наименование><br />
<Товары><br />
<Товар><br />
<Ид>cbcf492a-55bc-11d9-848a-00112f43529a</Ид><br />
<Штрихкод>2000001914014</Штрихкод><br />
<Артикул>Х-1234</Артикул><br />
<Наименование>BOSCH</Наименование><br />
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница><br />
<ПолноеНаименование>after_rename</ПолноеНаименование><br />
<Группы><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
</Группы><br />
<Картинка>import_files/test_dir/1.jpeg</Картинка><br />
<Картинка>import_files/test_dir/2.jpeg</Картинка><br />
</Товар><br />
</Товары><br />
</Каталог><br />
</КоммерческаяИнформация><br />
</source><br />
<br />
Наш шаблон: <br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка[position() &gt; 1]"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
Началом выгрузки товаров является тег '''<Товары>''', то есть для того, чтобы добраться до тега '''<Картинка>''' в атрибут match '''<xsl:template>''' необходимо добавить путь '''“Тoвар/Картинка”'''. <br />
<br />
Также для того, чтобы правило применялось только к нескольким картинкам, необходимо добавить правило '''[position() &gt; 1]''', то есть правило применяется, если количество тегов '''<Картинка>''' больше чем 1.<br />
<br />
Затем добавим условие: что строка, заключенной в теги '''<Картинка>''', не должна быть пустой - <source lang='xslt'><xsl:if test="string-length(.)"></source><br />
<br />
Так как изображение — это свойство страницы, то для добавления его в систему нужно добавить тег '''<property>''' и атрибуты к нему.<br />
<br />
Подробное описание добавленных атрибутов: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/opisanie_formata/#sel=317:1,317:1 Документация]<br />
<br />
Так как добавлен атрибут '''allow-runtime-add = 1''', то необходимо добавить тег '''<type>''' с атрибутом '''data-type''' <source lang='xslt'><type data-type="img_file"/></source><br />
<br />
Подробное описание: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/osobennosti_importa/#sel=37:1,37:1 Документация]<br />
<br />
Далее добавляем '''<title>''' с названием и значение '''<value>''':<br />
<br />
'''./images/cms/data/''' — это стандартный путь, к которому добавляется все, что заключено в теги “Картинка” — '''import_files/test_dir/1.jpeg'''.<br />
<br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_1%D0%A1_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA&diff=8564Написание шаблона выгрузки 1С на примере выгрузки нескольких картинок2018-07-26T14:41:52Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
В данной статье мы покажем пример написания шаблона выгрузки.<br />
<br />
Файл с выгружаемыми данными:<br />
<br />
<source lang="xslt"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<КоммерческаяИнформация ВерсияСхемы="2.04" ФорматДаты="ДФ=yyyy-MM-dd; ДЛФ=D" ФорматВремени="ДФ=ЧЧ:мм:сс; ДЛФ=T" РазделительДатаВремя="T" ФорматСуммы="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ФорматКоличества="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ДатаФормирования="2010-02-07T20:17:07"><br />
<Классификатор><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<Наименование>Классификатор (Каталог бытовой техники из 1С)</Наименование><br />
<Группы><br />
<Группа><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
<Наименование>Бытовая техника</Наименование><br />
</Группа><br />
</Группы><br />
</Классификатор><br />
<Каталог СодержитТолькоИзменения="false"><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<ИдКлассификатора>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</ИдКлассификатора><br />
<Наименование>Каталог бытовой техники из 1С</Наименование><br />
<Товары><br />
<Товар><br />
<Ид>cbcf492a-55bc-11d9-848a-00112f43529a</Ид><br />
<Штрихкод>2000001914014</Штрихкод><br />
<Артикул>Х-1234</Артикул><br />
<Наименование>BOSCH</Наименование><br />
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница><br />
<ПолноеНаименование>after_rename</ПолноеНаименование><br />
<Группы><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
</Группы><br />
<Картинка>import_files/test_dir/1.jpeg</Картинка><br />
<Картинка>import_files/test_dir/2.jpeg</Картинка><br />
</Товар><br />
</Товары><br />
</Каталог><br />
</КоммерческаяИнформация><br />
</source><br />
<br />
Наш шаблон: <br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка[position() &gt; 1]"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
Началом выгрузки каталога является тег '''<Товары>''', то есть для того, чтобы добраться до тега '''<Картинка>''' в атрибут match '''<xsl:template>''' необходимо добавить путь '''“Тoвар/Картинка”'''. <br />
<br />
Также для того, чтобы правило применялось только к нескольким картинкам, необходимо добавить правило '''[position() &gt; 1]''', то есть правило применяется, если количество тегов '''<Картинка>''' больше чем 1.<br />
<br />
Затем добавим условие: что строка, заключенной в теги '''<Картинка>''', не должна быть пустой - <source lang='xslt'><xsl:if test="string-length(.)"></source><br />
<br />
Так как изображение — это свойство страницы, то для добавления его в систему нужно добавить тег '''<property>''' и атрибуты к нему.<br />
<br />
Подробное описание добавленных атрибутов: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/opisanie_formata/#sel=317:1,317:1 Документация]<br />
<br />
Так как добавлен атрибут '''allow-runtime-add = 1''', то необходимо добавить тег '''<type>''' с атрибутом '''data-type''' <source lang='xslt'><type data-type="img_file"/></source><br />
<br />
Подробное описание: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/osobennosti_importa/#sel=37:1,37:1 Документация]<br />
<br />
Далее добавляем '''<title>''' с названием и значение '''<value>''':<br />
<br />
'''./images/cms/data/''' — это стандартный путь, к которому добавляется все, что заключено в теги “Картинка” — '''import_files/test_dir/1.jpeg'''.<br />
<br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_1%D0%A1_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA&diff=8561Написание шаблона выгрузки 1С на примере выгрузки нескольких картинок2018-07-26T13:00:55Z<p>Kublan: Kublan переименовал страницу Написание шаблона выгрузки 1С на примере множественной выгрузки картинок в [[Написание шаблона выгрузки 1С н…</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
В данной статье мы покажем пример написания шаблона выгрузки.<br />
<br />
Файл с выгружаемыми данными:<br />
<br />
<source lang="xslt"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<КоммерческаяИнформация ВерсияСхемы="2.04" ФорматДаты="ДФ=yyyy-MM-dd; ДЛФ=D" ФорматВремени="ДФ=ЧЧ:мм:сс; ДЛФ=T" РазделительДатаВремя="T" ФорматСуммы="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ФорматКоличества="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ДатаФормирования="2010-02-07T20:17:07"><br />
<Классификатор><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<Наименование>Классификатор (Каталог бытовой техники из 1С)</Наименование><br />
<Группы><br />
<Группа><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
<Наименование>Бытовая техника</Наименование><br />
</Группа><br />
</Группы><br />
</Классификатор><br />
<Каталог СодержитТолькоИзменения="false"><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<ИдКлассификатора>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</ИдКлассификатора><br />
<Наименование>Каталог бытовой техники из 1С</Наименование><br />
<Товары><br />
<Товар><br />
<Ид>cbcf492a-55bc-11d9-848a-00112f43529a</Ид><br />
<Штрихкод>2000001914014</Штрихкод><br />
<Артикул>Х-1234</Артикул><br />
<Наименование>BOSCH</Наименование><br />
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница><br />
<ПолноеНаименование>after_rename</ПолноеНаименование><br />
<Группы><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
</Группы><br />
<Картинка>import_files/test_dir/1.jpeg</Картинка><br />
<Картинка>import_files/test_dir/2.jpeg</Картинка><br />
</Товар><br />
</Товары><br />
</Каталог><br />
</КоммерческаяИнформация><br />
</source><br />
<br />
Наш шаблон: <br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка[position() &gt; 1]"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
Началом выгрузки каталога является тег '''<Каталог>''', то есть для того, чтобы добраться до тега '''<Картинка>''' в атрибут match '''<xsl:template>''' необходимо добавить путь '''“Тoвар/Картинка”'''. <br />
<br />
Также для того, чтобы правило применялось только к нескольким картинкам, необходимо добавить правило '''[position() &gt; 1]''', то есть правило применяется, если количество тегов '''<Картинка>''' больше чем 1.<br />
<br />
Затем добавим условие: что строка, заключенной в теги '''<Картинка>''', не должна быть пустой - <source lang='xslt'><xsl:if test="string-length(.)"></source><br />
<br />
Так как изображение — это свойство страницы, то для добавления его в систему нужно добавить тег '''<property>''' и атрибуты к нему.<br />
<br />
Подробное описание добавленных атрибутов: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/opisanie_formata/#sel=317:1,317:1 Документация]<br />
<br />
Так как добавлен атрибут '''allow-runtime-add = 1''', то необходимо добавить тег '''<type>''' с атрибутом '''data-type''' <source lang='xslt'><type data-type="img_file"/></source><br />
<br />
Подробное описание: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/osobennosti_importa/#sel=37:1,37:1 Документация]<br />
<br />
Далее добавляем '''<title>''' с названием и значение '''<value>''':<br />
<br />
'''./images/cms/data/''' — это стандартный путь, к которому добавляется все, что заключено в теги “Картинка” — '''import_files/test_dir/1.jpeg'''.<br />
<br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_1%D0%A1_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA&diff=8562Написание шаблона выгрузки 1С на примере множественной выгрузки картинок2018-07-26T13:00:55Z<p>Kublan: Kublan переименовал страницу Написание шаблона выгрузки 1С на примере множественной выгрузки картинок в [[Написание шаблона выгрузки 1С н…</p>
<hr />
<div>#перенаправление [[Написание шаблона выгрузки 1С на примере выгрузки нескольких картинок]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_1%D0%A1_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA&diff=8560Написание шаблона выгрузки 1С на примере выгрузки нескольких картинок2018-07-26T13:00:40Z<p>Kublan: Новая страница: «'''Актуально 18''' В данной статье мы покажем пример написания шаблона выгрузки. Файл с выг…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
В данной статье мы покажем пример написания шаблона выгрузки.<br />
<br />
Файл с выгружаемыми данными:<br />
<br />
<source lang="xslt"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<КоммерческаяИнформация ВерсияСхемы="2.04" ФорматДаты="ДФ=yyyy-MM-dd; ДЛФ=D" ФорматВремени="ДФ=ЧЧ:мм:сс; ДЛФ=T" РазделительДатаВремя="T" ФорматСуммы="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ФорматКоличества="ЧЦ=18; ЧДЦ=2; ЧРД=,; ЧГ=" ДатаФормирования="2010-02-07T20:17:07"><br />
<Классификатор><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<Наименование>Классификатор (Каталог бытовой техники из 1С)</Наименование><br />
<Группы><br />
<Группа><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
<Наименование>Бытовая техника</Наименование><br />
</Группа><br />
</Группы><br />
</Классификатор><br />
<Каталог СодержитТолькоИзменения="false"><br />
<Ид>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</Ид><br />
<ИдКлассификатора>caf216f3-3759-4cd1-851b-7f6bf3b6ae25</ИдКлассификатора><br />
<Наименование>Каталог бытовой техники из 1С</Наименование><br />
<Товары><br />
<Товар><br />
<Ид>cbcf492a-55bc-11d9-848a-00112f43529a</Ид><br />
<Штрихкод>2000001914014</Штрихкод><br />
<Артикул>Х-1234</Артикул><br />
<Наименование>BOSCH</Наименование><br />
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница><br />
<ПолноеНаименование>after_rename</ПолноеНаименование><br />
<Группы><br />
<Ид>bd72d924-55bc-11d9-848a-00112f43529a</Ид><br />
</Группы><br />
<Картинка>import_files/test_dir/1.jpeg</Картинка><br />
<Картинка>import_files/test_dir/2.jpeg</Картинка><br />
</Товар><br />
</Товары><br />
</Каталог><br />
</КоммерческаяИнформация><br />
</source><br />
<br />
Наш шаблон: <br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка[position() &gt; 1]"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
Началом выгрузки каталога является тег '''<Каталог>''', то есть для того, чтобы добраться до тега '''<Картинка>''' в атрибут match '''<xsl:template>''' необходимо добавить путь '''“Тoвар/Картинка”'''. <br />
<br />
Также для того, чтобы правило применялось только к нескольким картинкам, необходимо добавить правило '''[position() &gt; 1]''', то есть правило применяется, если количество тегов '''<Картинка>''' больше чем 1.<br />
<br />
Затем добавим условие: что строка, заключенной в теги '''<Картинка>''', не должна быть пустой - <source lang='xslt'><xsl:if test="string-length(.)"></source><br />
<br />
Так как изображение — это свойство страницы, то для добавления его в систему нужно добавить тег '''<property>''' и атрибуты к нему.<br />
<br />
Подробное описание добавленных атрибутов: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/opisanie_formata/#sel=317:1,317:1 Документация]<br />
<br />
Так как добавлен атрибут '''allow-runtime-add = 1''', то необходимо добавить тег '''<type>''' с атрибутом '''data-type''' <source lang='xslt'><type data-type="img_file"/></source><br />
<br />
Подробное описание: [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/format_umidump_20/osobennosti_importa/#sel=37:1,37:1 Документация]<br />
<br />
Далее добавляем '''<title>''' с названием и значение '''<value>''':<br />
<br />
'''./images/cms/data/''' — это стандартный путь, к которому добавляется все, что заключено в теги “Картинка” — '''import_files/test_dir/1.jpeg'''.<br />
<br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BF%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C_%D0%BB%D0%BE%D0%B3%D0%B8_%D0%BF%D0%B8%D1%81%D0%B5%D0%BC&diff=8558Как посмотреть логи писем2018-07-26T12:49:10Z<p>Kublan: Новая страница: «'''Актуально 18 версия''' Если у вас не приходят письма на почту, иногда полезно посмотреть…»</p>
<hr />
<div>'''Актуально 18 версия'''<br />
<br />
Если у вас не приходят письма на почту, иногда полезно посмотреть логи ошибок.<br />
<br />
Для этого необходимо добавить в .htaccess<br />
<br />
<pre><br />
php_value mail.add_x_header 1<br />
php_value mail.log /home/b/test/test/public_html/mail.log<br />
</pre><br />
<br />
где /home/b/test/test/public_html/ это адрес до корня сайта.<br />
<br />
В файл /mail.log упадут логи почты<br />
<br />
Если вы используете SMTP сервер, то Вы можете просто включить [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_mail/#sel=47:1,47:4 smtp.debug = "1"] в config.ini<br />
<br />
[[category:Решение проблем и ошибок]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&diff=8539Выгрузка нескольких изображений2018-07-24T09:45:31Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
Если выгрузка изображений из 1С у вас выглядит следующим образом:<br />
<br />
<source lang='xslt'><br />
<Картинка>import_files/5d/5dba25b849ef11e8049800505689f2c0_836c8bd24ebf11e84d9e00505689f2c0.jpeg</Картинка><br />
<Картинка>import_files/5d/5dba25b849ef11e8049800505689f2c0_92cc43564ebf11e84d9e00505689f2c0.jpg</Картинка><br />
</source><br />
<br />
то в систему выгрузится только одно изображение.<br />
<br />
Для решения проблемы необходимо добавить нижеприведенный кастомный шаблон в файл /xsl/import/custom/commerceML2.xsl<br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка[position() &gt; 1]"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
[[category:Интеграция с 1С]]</div>Kublanhttps://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%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F&diff=8535Изменение значений составного поля2018-07-22T15:04:51Z<p>Kublan: Новая страница: «'''Актуально 18''' Если Вам необходимо добавить значение в поле с типом "Составное" через ко…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если Вам необходимо добавить значение в поле с типом "Составное" через код, то ниже указано как вы можете это сделать:<br />
<br />
<source lang = "php"><br />
$elementId = 14965; // id страницы на которой необходимо изменить значение<br />
$guideId = 15; // id элемента справочника<br />
$value = 5; // добавляемое значение<br />
$fieldId = 'storage'; // идентификатор поля<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
$element = $hierarchy->getElement($elementId);<br />
$element->setValue($fieldId, [<br />
['int' => 1, 'rel' => $guideId, 'float' => $value],<br />
['int' => 1, 'rel' => 17, 'float' => 55],<br />
]);<br />
</source><br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&diff=8534Выгрузка нескольких изображений2018-07-22T14:55:12Z<p>Kublan: Новая страница: «'''Актуально 18''' Если выгрузка изображений из 1С у вас выглядит следующим образом: <source lang…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Если выгрузка изображений из 1С у вас выглядит следующим образом:<br />
<br />
<source lang='xslt'><br />
<Картинка>import_files/5d/5dba25b849ef11e8049800505689f2c0_836c8bd24ebf11e84d9e00505689f2c0.jpeg</Картинка><br />
<Картинка>import_files/5d/5dba25b849ef11e8049800505689f2c0_92cc43564ebf11e84d9e00505689f2c0.jpg</Картинка><br />
</source><br />
<br />
то в систему выгрузится только одно изображение.<br />
<br />
Для решения проблемы необходимо добавить нижеприведенный кастомный шаблон в файл /xsl/import/custom/commerceML2.xsl<br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1"><br />
<type data-type="img_file"/><br />
<title>Картинка</title><br />
<value>./images/cms/data/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%9A%D0%B0%D1%81%D1%81%D0%B0_4.0_-_xslt_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&diff=8533Платежная система Яндекс Касса 4.0 - xslt шаблонизатор2018-07-22T14:48:48Z<p>Kublan: Новая страница: «'''Актуально 18 версия''' Начиная с 18 версии в системе реализована интеграция с Яндекс Касс…»</p>
<hr />
<div>'''Актуально 18 версия'''<br />
<br />
Начиная с 18 версии в системе реализована интеграция с Яндекс Кассой версии 4.0<br />
<br />
Для вывода данного способа оплаты в XSLT шаблоне необходимо добавить в файл с шаблонами оплаты следующий код:<br />
<br />
<source lang='xslt'><br />
<xsl:template match="purchasing[@stage = 'payment'][@step = 'YandexKassa']"><br />
<div><br />
<a id="payUrl" href="{url}" ><br />
<xsl:text>Оплатить</xsl:text><br />
</a><br />
</div><br />
</xsl:template> <br />
</source><br />
<br />
<br />
<br />
[[category:Модуль Интернет магазин]][[category:Верстка в XSLT]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D1%81_%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D1%8B%D0%BC_alt-name&diff=8483Поиск товаров с одинаковым alt-name2018-06-29T16:29:13Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
<br />
'''Актуально для версии 18.'''<br />
<br />
Это продолжение статьи "[[Уменьшение вложенности товаров]]".<br />
<br />
Для корректной работы статьи нужно избавиться от товаров с одинаковым alt-name. Сделать это можно вот таким скриптом:<br />
<br />
<source lang="php"><br />
define("CURRENT_WORKING_DIR", str_replace("\\", "/", $dirname = dirname(__FILE__)));<br />
require CURRENT_WORKING_DIR . '/libs/root-src/standalone.php';<br />
<br />
// здесь можно заменить catalog и object на данные необходимого иерархического типа данных, например news и item — для страниц новостей.<br />
$type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName('catalog', 'object')->getId();<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
$connection = ConnectionPool::getInstance()->getConnection('core');<br />
<br />
// прямым запросов к базе ищем дубли по alt-name<br />
$result = $connection->query("SELECT GROUP_CONCAT(id SEPARATOR ', ') id, COUNT(*) c FROM `cms3_hierarchy` WHERE `type_id` = $type_id GROUP BY alt_name HAVING c > 1");<br />
<br />
// распечатываем ссылки на страницы<br />
while($row = mysqli_fetch_assoc($result)) {<br />
foreach (explode(',', $row['id']) as $id) {<br />
$page = $hierarchy->getElement($id);<br />
echo "<a href=\"/admin/catalog/edit/{$page->getId()}/\">{$page->getName()}</a><br />\n";<br />
}<br />
echo "\n";<br />
}<br />
</source><br />
<br />
Кладем скрипт в корень сайта и вызываем из браузера. Корректируем страницы до тех пор, пока дублей не останется.<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2&diff=8482Уменьшение вложенности товаров2018-06-29T16:26:56Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
<br />
'''Актуально для версии 18.'''<br />
<br />
Часто для улучшения ранжирования в поисковых системах нужно уменьшать вложенность страниц. Например, переместить товары на второй уровень, при этом сохранив структуру каталога.<br />
<br />
Изначально для данной задачи использовал [http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/formirovanie_dannyh_na_servere_protokol_umap/ протокол Umap], но решение было не очень гибкое.<br />
<br />
Недавно нашел более удачное решение, которое и привожу.<br />
<br />
Для начала нужно перехватывать событие systemPrepare, которое вызывается уже после анализа URL и до генерации глобальных переменных.<br />
<br />
Перехват события (файл events.php в папке classes/modules/catalog в директории шаблона, или custom_events.php в системной папке модуля):<br />
<source lang="php"><br />
new umiEventListener('systemPrepare', 'catalog', 'short_links');<br />
</source><br />
<br />
Права на доступ к макросу (permissions.php или permissions_custom.php):<br />
<source lang="php"><br />
$permissions = array(<br />
'view' => array('short_links')<br />
);<br />
</source><br />
<br />
Сама функция с комментариями:<br />
<source lang="php"><br />
// импортируем Service в самом начале файла<br />
use UmiCms\Service;<br />
//...<br />
public function short_links(iUmiEventPoint $oEventPoint) {<br />
if ($oEventPoint->getMode() === "before") {<br />
// парсим url в массив<br />
$path_parts = Service::Request()->getPathParts();<br />
<br />
// у нас ссылки вида /product/{$alt-name}/<br />
// и соответственно здесь проверяется, соответствует ли ссылка данному шаблону<br />
@list($part1, $alt_name, $part3) = $path_parts;<br />
if ($part3 or $part1 !== 'product' or !$alt_name)<br />
return true;<br />
<br />
// ищем объект каталога по alt-name<br />
$pages = new selector('pages');<br />
$pages->types('hierarchy-type')->name('catalog', 'object');<br />
$pages->option('return')->value('id');<br />
$pages->where('alt_name')->equals($alt_name);<br />
$page_id = $pages->first();<br />
$page_id = $page_id ? @$page_id['id'] : false;<br />
if (!$page_id)<br />
return true;<br />
<br />
// переопределяем данные, чтобы сгенерировалась нужная страница<br />
$cmsController = cmsController::getInstance();<br />
$cmsController->setCurrentElementId($page_id);<br />
$cmsController->setCurrentModule('catalog');<br />
$cmsController->setCurrentMethod('object');<br />
}<br />
return true;<br />
}<br />
</source><br />
<br />
Для корректной работы нужно еще избавиться от товаров с одинаковым alt-name. Об этом с статье [[Поиск товаров с одинаковым alt-name]]<br />
<br />
[[category:Решение проблем и ошибок]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_commerceML_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_%22%D0%9E%D0%B1%D0%BC%D0%B5%D0%BD_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8%22&diff=8478Особенности выгрузки фотографии при commerceML выгрузке через модуль "Обмен данными"2018-06-28T16:20:27Z<p>Kublan: Новая страница: «'''Актуально 18''' При импорте с использованием commerceML необходимо загрузить фотографии в па…»</p>
<hr />
<div>'''Актуально 18'''<br />
<br />
При импорте с использованием commerceML необходимо загрузить фотографии в папку ./images/cms/data/ и отключить директиву [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_modules/ exchange.commerceML.renameFiles = 0] в config.ini.<br />
<br />
Если Вы хотите изменить папку в которую выгружаются фотографии, то для этого необходимо кастомизировать шаблон выгрузки.<br />
Добавим в файл /xsl/import/custom/commerceML2.xsl следующий темплэйт:<br />
<br />
<source lang='xslt'><br />
<xsl:template match="Товар/Картинка"><br />
<xsl:if test="string-length(.)"><br />
<property name="photo" type="img_file"><br />
<title>Картинка</title><br />
<value>./files/<xsl:value-of select="."/></value><br />
</property><br />
</xsl:if><br />
</xsl:template><br />
</source><br />
<br />
В данном примере изображения буду браться из папки /files/.<br />
<br />
[[category:Модуль Обмен данными]]</div>Kublanhttps://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%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F_%D1%83_%D0%B2%D1%81%D0%B5%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8477Изменение определенного поля у всех объектов каталога2018-06-28T15:56:02Z<p>Kublan: </p>
<hr />
<div>'''Актуально 18'''<br />
<br />
Иногда необходимо массово изменить поле у объектов каталога, например, сделать пустым поле 'title'<br />
<br />
Для этого создадим в корне сайта файл change_field.php и добавим в него следующий код:<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$field = 'title';<br />
$fieldNewInfo = ''; // информация добавляемая в поле<br />
<br />
$selector = new selector('pages'); <br />
$selector->types('hierarchy-type')->name('catalog', 'object');<br />
$selector->where($field)->isnotnull();<br />
$sel = $selector->result();<br />
<br />
foreach ($sel as $page) {<br />
$object = $page->getObject();<br />
$object->setValue($field, $fieldNewInfo);<br />
$page->commit();<br />
}<br />
</source><br />
<br />
После этого скрипт можно вызвать набрав в адресной строке имя_сайта/change_field.php<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://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%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F_%D1%83_%D0%B2%D1%81%D0%B5%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8476Изменение определенного поля у всех объектов каталога2018-06-28T15:55:47Z<p>Kublan: Новая страница: «Актуально 18 85081 Иногда необходимо массово изменить поле у объектов каталога, например, с…»</p>
<hr />
<div>Актуально 18 85081<br />
<br />
Иногда необходимо массово изменить поле у объектов каталога, например, сделать пустым поле 'title'<br />
<br />
Для этого создадим в корне сайта файл change_field.php и добавим в него следующий код:<br />
<source lang="php"><br />
<?php<br />
<br />
require "standalone.php";<br />
<br />
$field = 'title';<br />
$fieldNewInfo = ''; // информация добавляемая в поле<br />
<br />
$selector = new selector('pages'); <br />
$selector->types('hierarchy-type')->name('catalog', 'object');<br />
$selector->where($field)->isnotnull();<br />
$sel = $selector->result();<br />
<br />
foreach ($sel as $page) {<br />
$object = $page->getObject();<br />
$object->setValue($field, $fieldNewInfo);<br />
$page->commit();<br />
}<br />
</source><br />
<br />
После этого скрипт можно вызвать набрав в адресной строке имя_сайта/change_field.php<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C_import.xml_%D0%B8_offers.xml_%D0%B2_1%D0%A1_%D0%A3%D0%9D%D0%A4_1.6&diff=8475Как получить import.xml и offers.xml в 1С УНФ 1.62018-06-28T15:46:55Z<p>Kublan: Новая страница: «Иногда для проверки выгруженных из 1С данных необходимо посмотреть файлы import.xml и offers.xml.…»</p>
<hr />
<div>Иногда для проверки выгруженных из 1С данных необходимо посмотреть файлы import.xml и offers.xml.<br />
<br />
В 1С УНФ вы можете получить их следующим образом:<br />
<br />
1) Перейти в узел обмена с сайтом.<br />
<br />
2) Нажать кнопку "Еще" и выбрать пункт "Текст файлов полного обмена"<br />
<br />
[[Файл:Import_offers_2C.PNG|800px|800px]]<br />
<br />
3) У вас откроются окна с import.xml и offers.xml<br />
<br />
[[Файл:Import_offers_1C.PNG|800px|800px]]<br />
<br />
[[category:Интеграция с 1С]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Import_offers_1C.PNG&diff=8474Файл:Import offers 1C.PNG2018-06-28T15:44:53Z<p>Kublan: </p>
<hr />
<div></div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Import_offers_2C.PNG&diff=8473Файл:Import offers 2C.PNG2018-06-28T15:43:55Z<p>Kublan: </p>
<hr />
<div></div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D1%80%D0%B8_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B&diff=8472Удаление изображения при удалении страницы2018-06-28T15:26:01Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
<br />
'''Актуально для версии 18.'''<br />
<br />
Назначаем обработчик события:<br />
<br />
<source lang="php"><br />
new umiEventListener('systemDeleteElement', 'catalog', 'onRemoveItem');<br />
</source><br />
<br />
Задаем права доступа к макросу:<br />
<br />
<source lang="php"><br />
$permissions = array('view' => array('onRemoveItem'));<br />
</source><br />
<br />
Непосредственно обработчик:<br />
<br />
<source lang="php"><br />
/**Удаление изображений при удалении страницы<br />
* @param iUmiEventPoint $oEventPoint<br />
* @return bool<br />
*/<br />
public function onRemoveItem(iUmiEventPoint $oEventPoint) {<br />
if ($oEventPoint->getMode() === "after") {<br />
$element = $oEventPoint->getRef("element");<br />
$photo = @ $element->getValue('photo');<br />
if ($photo instanceof umiImageFile)<br />
$photo->delete();<br />
}<br />
return true;<br />
}<br />
</source><br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B&diff=8471Получить соседние страницы2018-06-28T15:24:34Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
<br />
'''Актуально для версии 18.'''<br />
<br />
Из коробки есть макросы %system getNext()% и %system getPrevious()%.<br />
<br />
Привожу пример объединенного сокращенного макроса. Принимает только один параметр: id страницы или путь.<br />
<br />
Использую для сокращения количества запросов.<br />
<br />
<source lang="php"><br />
public function get_neighbours($path = '') {<br />
$element_id = def_module::analyzeRequiredPath($path);<br />
$element = $element_id ? umiHierarchy::getInstance()->getElement($element_id) : false;<br />
<br />
if(!$element)<br />
return '';<br />
<br />
$pages = new selector('pages');<br />
$pages->types('hierarchy-type')->id($element->getTypeId());<br />
$pages->where('hierarchy')->page($element->getParentId())->level(1);<br />
$pages->order('ord');<br />
$pages->option('return')->value('id');<br />
<br />
$next = false;<br />
$prev = false;<br />
$is_matched = false;<br />
<br />
foreach($pages->result() as $page) {<br />
$id = $page['id'];<br />
if($is_matched) {<br />
$next = $id;<br />
break;<br />
}<br />
if($id == $element_id)<br />
$is_matched = true;<br />
if (!$is_matched)<br />
$prev = $id;<br />
}<br />
<br />
return [<br />
'prev_id' => $prev,<br />
'prev_link' => umiHierarchy::getInstance()->getPathById($prev),<br />
'next_id' => $next,<br />
'next_link' => umiHierarchy::getInstance()->getPathById($next)<br />
];<br />
}<br />
</source><br />
<br />
Пример запроса:<br />
<br />
https://somesite.ru/udata:/news/get_neighbours/456<br />
<br />
Пример xml-ответа:<br />
<br />
<source lang="xml"><br />
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="news" method="get_neighbours" generation-time="0.035878"><br />
<prev_id>454</prev_id><br />
<prev_link>/news/lollipop-popular-android/</prev_link><br />
<next_id>457</next_id><br />
<next_link>/news/microsoft-surface-3-i-surface-pro-4-cases/</next_link><br />
</udata><br />
</source><br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&diff=8470Постраничная карта сайта2018-06-28T15:22:22Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
<br />
'''Актуально для версии 18.'''<br />
<br />
На страницах с больших количеством страниц может понадобиться сделать постраничную карту сайта с заданным ограниченным количеством ссылок на странице.<br />
<br />
Ниже приводится код основного макроса и двух вспомогательных.<br />
<br />
<source lang="php"><br />
class content_custom extends def_module {<br />
public $sitemap_count_down;<br />
public $sitemap_offset;<br />
public $sitemap_iterator = 0;<br />
<br />
/**Постраничный вывод карты сайта<br />
* @param int $limit количество ссылок на странице<br />
* @param int $expire время жизни кеша в секундах<br />
* @return array<br />
* @throws selectorException<br />
*/<br />
public function sitemap_pages($limit=500, $expire=7200) {<br />
$page = (int) getRequest('p');<br />
<br />
$block_arr = array();<br />
$this->sitemap_count_down = $limit;<br />
$this->sitemap_offset = $page * $this->sitemap_count_down;<br />
<br />
$children_count = $this->sitemap_children_count(0);<br />
<br />
if ($this->sitemap_offset > $children_count)<br />
return $block_arr['items'] = 'none';<br />
<br />
// кеширование данных карты сайта в файлы<br />
$folder = CURRENT_WORKING_DIR . '/sys-temp/sitemap-cache/';<br />
if(!is_dir($folder))<br />
mkdir($folder, 0777, true);<br />
$data_path = $folder . 'map' . $page . '.html';<br />
$mtime = is_file($data_path) ? filemtime($data_path) : false;<br />
if($mtime && (time() < ($mtime + $expire)))<br />
$block_arr['items']['nodes:item'] = json_decode(file_get_contents($data_path),true);<br />
else {<br />
$block_arr['items']['nodes:item'] = $this->sitemap_children(0);<br />
file_put_contents($data_path, json_encode($block_arr['items']['nodes:item']));<br />
}<br />
<br />
$block_arr['total'] = $children_count;<br />
$block_arr['per_page'] = 500;<br />
return $block_arr;<br />
}<br />
<br />
/**Рекурсивная функция для генерации данных карты сайта<br />
* @param int $page_id id страницы<br />
* @return array<br />
* @throws selectorException<br />
*/<br />
public function sitemap_children($page_id) {<br />
$hierarchy = umiHierarchy::getInstance();<br />
$pages = new selector('pages');<br />
$pages->where('hierarchy')->page($page_id)->level(1);<br />
$pages->where('robots_deny')->notequals(1);<br />
$pages->where('is_active')->equals(1);<br />
$pages->where('is_visible')->equals(1);<br />
$pages->order('ord');<br />
<br />
$items = array();<br />
<br />
foreach ($pages as $page) {<br />
/** @var umiHierarchyElement $page */<br />
if (!isset($this->sitemap_iterator))<br />
$this->sitemap_iterator = 0;<br />
if (!$this->sitemap_count_down)<br />
break;<br />
$children_count = $this->sitemap_children_count($page->getId()) + 1;<br />
if ($this->sitemap_offset >= $children_count) {<br />
$this->sitemap_offset -= $children_count;<br />
$this->sitemap_iterator += $children_count;<br />
} else {<br />
$this->sitemap_iterator++;<br />
if ($this->sitemap_offset > 0) {<br />
$this->sitemap_offset--;<br />
$item_arr = array();<br />
}<br />
else {<br />
$this->sitemap_count_down--;<br />
$item_arr = array(<br />
'@i' => $this->sitemap_iterator,<br />
'@link' => $page->link,<br />
'@name' => $page->getName(),<br />
);<br />
}<br />
if (($children_count>1) && $this->sitemap_count_down)<br />
$item_arr['items']['nodes:item'] = $this->sitemap_children($page->getId());<br />
$items[] = $item_arr;<br />
}<br />
$hierarchy->unloadElement($page->getId());<br />
}<br />
return $items;<br />
}<br />
<br />
/**Количество активных и видимых подстраниц на неограниченную вложенность<br />
* @param int $page_id id страницы<br />
* @return bool|int<br />
*/<br />
public function sitemap_children_count($page_id) {<br />
$hierarchy = umiHierarchy::getInstance();<br />
return $hierarchy->getChildrenCount($page_id, false, false);<br />
}<br />
}<br />
</source><br />
<br />
Права доступа к методам класса:<br />
<br />
<source lang="php"><br />
$permissions = Array(<br />
'content' => array('sitemap_pages', 'sitemap_children', 'sitemap_children_count')<br />
);<br />
</source><br />
<br />
Пример шаблона на php-шаблонизаторе:<br />
<br />
<source lang="php"><br />
$p = getRequest('p');<br />
$sitemap = $this->macros('content', 'sitemap_pages', array());<br />
function renderMap($map) {<br />
$result = '';<br />
if(isset($map['items']['nodes:item'])) {<br />
$result .= '<ul>';<br />
foreach($map['items']['nodes:item'] as $item) {<br />
$result .= '<li>';<br />
if (isset($item['@link'])) $result .= "<a href=\"{$item['@link']}\">{$item['@name']}</a>";<br />
$result .= renderMap($item);<br />
$result .= '</li>';<br />
}<br />
$result .= '</ul>';<br />
}<br />
return $result;<br />
}<br />
?><br />
<div class="b-sitemap"><br />
<?=renderMap($sitemap)?><br />
</div><br />
<?=@($sitemap['total'] > $sitemap['per_page']) ? $this->render($this->macros('system','numpages', array($sitemap['total'], $sitemap['per_page'])), 'library/numpages') : ''<br />
</source><br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&diff=8469Постраничная карта сайта2018-06-28T15:22:09Z<p>Kublan: </p>
<hr />
<div>'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''<br />
'''Актуально для версии 18.'''<br />
<br />
На страницах с больших количеством страниц может понадобиться сделать постраничную карту сайта с заданным ограниченным количеством ссылок на странице.<br />
<br />
Ниже приводится код основного макроса и двух вспомогательных.<br />
<br />
<source lang="php"><br />
class content_custom extends def_module {<br />
public $sitemap_count_down;<br />
public $sitemap_offset;<br />
public $sitemap_iterator = 0;<br />
<br />
/**Постраничный вывод карты сайта<br />
* @param int $limit количество ссылок на странице<br />
* @param int $expire время жизни кеша в секундах<br />
* @return array<br />
* @throws selectorException<br />
*/<br />
public function sitemap_pages($limit=500, $expire=7200) {<br />
$page = (int) getRequest('p');<br />
<br />
$block_arr = array();<br />
$this->sitemap_count_down = $limit;<br />
$this->sitemap_offset = $page * $this->sitemap_count_down;<br />
<br />
$children_count = $this->sitemap_children_count(0);<br />
<br />
if ($this->sitemap_offset > $children_count)<br />
return $block_arr['items'] = 'none';<br />
<br />
// кеширование данных карты сайта в файлы<br />
$folder = CURRENT_WORKING_DIR . '/sys-temp/sitemap-cache/';<br />
if(!is_dir($folder))<br />
mkdir($folder, 0777, true);<br />
$data_path = $folder . 'map' . $page . '.html';<br />
$mtime = is_file($data_path) ? filemtime($data_path) : false;<br />
if($mtime && (time() < ($mtime + $expire)))<br />
$block_arr['items']['nodes:item'] = json_decode(file_get_contents($data_path),true);<br />
else {<br />
$block_arr['items']['nodes:item'] = $this->sitemap_children(0);<br />
file_put_contents($data_path, json_encode($block_arr['items']['nodes:item']));<br />
}<br />
<br />
$block_arr['total'] = $children_count;<br />
$block_arr['per_page'] = 500;<br />
return $block_arr;<br />
}<br />
<br />
/**Рекурсивная функция для генерации данных карты сайта<br />
* @param int $page_id id страницы<br />
* @return array<br />
* @throws selectorException<br />
*/<br />
public function sitemap_children($page_id) {<br />
$hierarchy = umiHierarchy::getInstance();<br />
$pages = new selector('pages');<br />
$pages->where('hierarchy')->page($page_id)->level(1);<br />
$pages->where('robots_deny')->notequals(1);<br />
$pages->where('is_active')->equals(1);<br />
$pages->where('is_visible')->equals(1);<br />
$pages->order('ord');<br />
<br />
$items = array();<br />
<br />
foreach ($pages as $page) {<br />
/** @var umiHierarchyElement $page */<br />
if (!isset($this->sitemap_iterator))<br />
$this->sitemap_iterator = 0;<br />
if (!$this->sitemap_count_down)<br />
break;<br />
$children_count = $this->sitemap_children_count($page->getId()) + 1;<br />
if ($this->sitemap_offset >= $children_count) {<br />
$this->sitemap_offset -= $children_count;<br />
$this->sitemap_iterator += $children_count;<br />
} else {<br />
$this->sitemap_iterator++;<br />
if ($this->sitemap_offset > 0) {<br />
$this->sitemap_offset--;<br />
$item_arr = array();<br />
}<br />
else {<br />
$this->sitemap_count_down--;<br />
$item_arr = array(<br />
'@i' => $this->sitemap_iterator,<br />
'@link' => $page->link,<br />
'@name' => $page->getName(),<br />
);<br />
}<br />
if (($children_count>1) && $this->sitemap_count_down)<br />
$item_arr['items']['nodes:item'] = $this->sitemap_children($page->getId());<br />
$items[] = $item_arr;<br />
}<br />
$hierarchy->unloadElement($page->getId());<br />
}<br />
return $items;<br />
}<br />
<br />
/**Количество активных и видимых подстраниц на неограниченную вложенность<br />
* @param int $page_id id страницы<br />
* @return bool|int<br />
*/<br />
public function sitemap_children_count($page_id) {<br />
$hierarchy = umiHierarchy::getInstance();<br />
return $hierarchy->getChildrenCount($page_id, false, false);<br />
}<br />
}<br />
</source><br />
<br />
Права доступа к методам класса:<br />
<br />
<source lang="php"><br />
$permissions = Array(<br />
'content' => array('sitemap_pages', 'sitemap_children', 'sitemap_children_count')<br />
);<br />
</source><br />
<br />
Пример шаблона на php-шаблонизаторе:<br />
<br />
<source lang="php"><br />
$p = getRequest('p');<br />
$sitemap = $this->macros('content', 'sitemap_pages', array());<br />
function renderMap($map) {<br />
$result = '';<br />
if(isset($map['items']['nodes:item'])) {<br />
$result .= '<ul>';<br />
foreach($map['items']['nodes:item'] as $item) {<br />
$result .= '<li>';<br />
if (isset($item['@link'])) $result .= "<a href=\"{$item['@link']}\">{$item['@name']}</a>";<br />
$result .= renderMap($item);<br />
$result .= '</li>';<br />
}<br />
$result .= '</ul>';<br />
}<br />
return $result;<br />
}<br />
?><br />
<div class="b-sitemap"><br />
<?=renderMap($sitemap)?><br />
</div><br />
<?=@($sitemap['total'] > $sitemap['per_page']) ? $this->render($this->macros('system','numpages', array($sitemap['total'], $sitemap['per_page'])), 'library/numpages') : ''<br />
</source><br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B0%D0%BD%D0%B8%D1%84%D0%B5%D1%81%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&diff=8466Пример написания манифеста для модуля2018-06-28T13:10:08Z<p>Kublan: </p>
<hr />
<div>[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]<br />
'''Актуально для версии 18.'''<br />
<br />
Начиная с 16 версии в UMI.CMS появились [[http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/manifesty/ манифесты]].<br />
<br />
В данной статье мы покажем пример написания манифеста, который при установке и обновлении модуля присылает письмо на определенную почту.<br />
<br />
Например, сам модуль будет называться mailer.<br />
Структура файлов у нас будет следующая:<br />
<source lang="php"><br />
/classes/components/mailer/manifest/install.xml<br />
/classes/components/mailer/manifest/update.xml<br />
/classes/components/mailer/manifest/actions/SendMail.php<br />
</source><br />
В файл install.xml мы добавим следующий код:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="utf-8"?><br />
<manifest><br />
<route><br />
<transaction name="send_mail_on_install"><br />
<action name="\UmiCms\Manifest\Mail\SendMail" /><br />
</transaction><br />
</route><br />
</manifest><br />
</source><br />
<br />
В файл update.xml добавляем код:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="utf-8"?><br />
<manifest><br />
<route><br />
<transaction name="send_mail_on_update"><br />
<action name="\UmiCms\Manifest\Mail\SendMail" /><br />
</transaction><br />
</route><br />
</manifest><br />
</source><br />
<br />
В файл SendMail.php добавим:<br />
<source lang="php"><br />
<?php<br />
namespace UmiCms\Manifest\Mail;<br />
<br />
class SendMailAction extends \Action<br />
{<br />
public function __construct($name, array $params = []) {<br />
parent::__construct($name, $params);<br />
}<br />
<br />
<br />
public function execute()<br />
{<br />
$lMail = new \umiMail;<br />
$lMail->addRecipient("recipient@example.com", "Testing");<br />
$lMail->setFrom("from@example.com", "Testing");<br />
$lMail->setSubject("Обновление CMS");<br />
$lMail->setPriorityLevel("highest");<br />
$lMail->setContent("Обновление завершено");<br />
$lMail->commit();<br />
$lMail->send();<br />
<br />
return $this;<br />
}<br />
<br />
public function rollback()<br />
{<br />
return $this;<br />
}<br />
}<br />
</source><br />
<br />
В данном файле в строке <source lang="php">$lMail->addRecipient("recipient@example.com", "Testing");</source> recipient@example.com необходимо заменить на адрес получателя, <br />
а в строке <source lang="php">$lMail->setFrom("from@example.com", "Testing");</source> from@example.com заменить на заголовок From письма.<br />
<br />
<br />
Если модуль не добавлен к лицензионному ключу и не размещен на UMI.Market, то при установке и обновлении запуск манифестов происходить не будет.<br />
Для проверки работы манифестов их нужно запускать вручную.<br />
<br />
Для этого создадим файл manifest_checker.php в корне сайта и добавим в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
include 'standalone.php';<br />
<br />
$manifest = \UmiCms\Service::ManifestFactory()<br />
->createByModule('update', ‘mail’);<br />
<br />
do {<br />
$manifest->execute();<br />
} while (!$manifest->isReady());<br />
<br />
foreach ($manifest->getLog() as $message) {<br />
echo $message, PHP_EOL;<br />
}<br />
</source><br />
<br />
Первый аргумент в методе createByModule это тип манифеста (install или update), а второй аргумент — имя вашего модуля.<br />
<br />
После этого вызываем файл example.com/manifest_checker.php, манифесты выполняются вручную и отображаются на экране.<br />
<br />
[[category:API]][[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%83_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86&diff=8362Массовое изменение типа данных у дочерних страниц2018-05-31T08:40:29Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18.'''<br />
<br />
Если Вам необходимо массово изменить тип данных дочерних страниц, например, у раздела каталога, то для этого можно написать простой скрипт.<br />
<br />
Добавим файл change_type.php в корень сайта и внесем в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
require 'standalone.php';<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
<br />
$childrenList = $hierarchy->getChildrenTree($parentId);<br />
<br />
foreach($childrenList as $id => $value) {<br />
$object = $element->getObject();<br />
<br />
if (!$object instanceof iUmiObject) {<br />
throw new Exception('Передан не объект');<br />
}<br />
<br />
$object->setTypeId($typeId);<br />
}<br />
<br />
</source><br />
<br />
Где '''$parentId''' это id элемента, дочерние страницы которого мы хотим изменить,<br />
а '''$typeId''' это id нового типа данных.<br />
<br />
<br />
'''Внимание:'''<br />
Уже заполненные значения останутся в БД, но станут недоступны через API, если не переключить тип данных для объекта назад.<br />
<br />
Вызвать скрипт вы можете перейдя по ссылке '''имя_сайта.ru/change_type.php'''<br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%83_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86&diff=8360Массовое изменение типа данных у дочерних страниц2018-05-31T08:32:52Z<p>Kublan: Новая страница: «Если Вам необходимо массово изменить тип данных дочерних страниц, например, у раздела кат…»</p>
<hr />
<div>Если Вам необходимо массово изменить тип данных дочерних страниц, например, у раздела каталога, то для этого можно написать простой скрипт.<br />
<br />
Добавим файл change_type.php в корень сайта и внесем в него следующий код:<br />
<br />
<source lang="php"><br />
require 'standalone.php';<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
<br />
$childrenList = $hierarchy->getChildrenTree($parentId);<br />
<br />
foreach($childrenList as $id => $value) {<br />
$object = $element->getObject();<br />
<br />
if (!$object instanceof iUmiObject) {<br />
throw new Exception('Передан не объект');<br />
}<br />
<br />
$object->setTypeId($typeId);<br />
}<br />
<br />
</source><br />
<br />
Где '''$parentId''' это id элемента, дочерние страницы которого мы хотим изменить,<br />
а '''$typeId''' это id нового типа данных.<br />
<br />
<br />
'''Внимание:'''<br />
Уже заполненные значения останутся в БД, но станут недоступны через API, если не переключить тип данных для объекта назад.<br />
<br />
Вызвать скрипт вы можете перейдя по ссылке '''имя_сайта.ru/change_type.php'''<br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%84%D0%B0%D0%B9%D0%BB_%D0%B2_%D0%BF%D0%BE%D0%BB%D0%B5_HTML-%D1%82%D0%B5%D0%BA%D1%81%D1%82&diff=8356Ссылка на файл в поле HTML-текст2018-05-30T14:34:03Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18'''<br />
<br />
===Вставка ссылки на файл в поле контента===<br />
Для вставки ссылки на файл в поле контента необходимо использовать функцию редактора "Вставить/редактировать ссылку".<br />
:[[Файл:insert_url.png]]<br />
Вставить ссылку можно двумя способами: через модуль Файловая система, либо вставить прямую ссылку на файл.<br />
# Для вставки ссылки на файл через модуль Файловая система необходимо: <br />
## Перейти в этот модуль нажать кнопку "Добавить файл".<br />
## Заполнить необходимые поля, описывающие файл.<br />
## В секции "Свойства файла" выбрать или при необходимости загрузить файл при помощи файлового менеджера.<br />
## Нажать кнопку Добавить.<br />
## После добавления файла в структуре сайта появится новая страница с типом данных "Скачиваемый файл". При вставке ссылки необходимо выбрать эту страницу как адрес ссылки. Поле адреса ссылки будет заполнено следующим образом:<br />
<br />
:: <source lang="div">%content get_page_url(312)%</source><br />
<br />
# Для вставки прямой ссылки на файл необходимо:<br />
## Закачать файл на сайт при помощи встроенного в систему файлового менеджера в модуле Файловая система или FTP клиента в папку files.<br />
## В поле адрес ссылки вставить сокращенный путь:<br />
:: <source lang="ini">/files/My_file.txt</source><br />
:: или полный путь к файлу:<br />
:: <source lang="ini">http://exemple.com/files/My_file.txt</source><br />
<br />
[[Категория:Модуль Файловая система]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%84%D0%B0%D0%B9%D0%BB_%D0%B2_%D0%BF%D0%BE%D0%BB%D0%B5_HTML-%D1%82%D0%B5%D0%BA%D1%81%D1%82&diff=8355Ссылка на файл в поле HTML-текст2018-05-30T14:30:32Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18'''<br />
<br />
===Вставка ссылки на файл в поле контента===<br />
Для вставки ссылки на файл в поле контента необходимо использовать функцию редактора "Вставить/редактировать ссылку".<br />
:[[Файл:insert_url.png]]<br />
Вставить ссылку можно двумя способами: через модуль Файловая система, либо вставить прямую ссылку на файл.<br />
# Для вставки ссылки на файл через модуль Файловая система необходимо: <br />
## Перейти в этот модуль нажать кнопку "Добавить файл".<br />
## Заполнить необходимые поля, описывающие файл.<br />
## В секции "Свойства файла" выбрать или при необходимости загрузить файл при помощи файлового менеджера.<br />
## Нажать кнопку Добавить.<br />
## После добавления файла в структуре сайта появится новая страница с типом данных "Скачиваемый файл". При вставке ссылки необходимо выбрать эту страницу как адрес ссылки. Поле адреса ссылки будет заполнено следующим образом:<br />
<br />
:: <source lang="div">%content get_page_url(312)%</source><br />
<br />
# Для вставки прямой ссылки на файл необходимо:<br />
## Закачать файл на сайт при помощи встроенного в систему файлового менеджера в модуле Файловая система или FTP клиента в папку files.<br />
## В поле адрес ссылки вставить сокращенный путь:<br />
:: <source lang="ini">/files/My_file.txt</source><br />
:: или полный путь к файлу:<br />
:: <source lang="ini">http://exemple.com/files/My_file.txt</source><br />
<br />
{{category:Модуль Файловая система}}</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D1%8F_title_%D0%BF%D1%80%D0%B8_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0/%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0&diff=8215Автоматическое заполнение поля title при создании раздела/объекта каталога2018-05-20T13:05:13Z<p>Kublan: </p>
<hr />
<div>'''Актуально 18 85081'''<br />
<br />
Для того, чтобы при создании раздела/объекта каталога автоматически заполнялось поле title, можно написать обработчик событий.<br />
<br />
Для этого создадим файл '''custom_events.php''' в папке /classes/components/catalog/<br />
<br />
и добавим в него следующий код:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
new umiEventListener("systemCreateElement", "catalog", "onCreateCatalogObject");<br />
<br />
</source><br />
<br />
Теперь добавим код обработчика в файл /public_html/classes/components/catalog/customAdmin.php (после строки public $module;)<br />
<br />
<source lang="php"><br />
<br />
public function onCreateCatalogObject(iUmiEventPoint $event) {<br />
if ($event->getMode() != 'after') {<br />
return;<br />
}<br />
<br />
$page = $event->getRef('element');<br />
<br />
if (!$this->module->isCatalogObject($page)) {<br />
return false;<br />
}<br />
<br />
$umiHierarchy = umiHierarchy::getInstance();<br />
$catalogObject = $umiHierarchy->getElement($page->getId(), true, true);<br />
<br />
$data = getRequest('data');<br />
$name = $data['new']['h1'];<br />
$title = $catalogObject->getValue('title');<br />
<br />
if (empty($title)) {<br />
$catalogObject->setValue('title', $name);<br />
}<br />
}<br />
<br />
</source><br />
<br />
Теперь при сохранении созданной страницы каталога, автоматически заполнится поле title.<br />
<br />
<br />
[[category:Модуль Каталог]][[Категория:Написание кастомных макросов]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F_%D0%B2_UMI.CMS&diff=8184Расположение файлов модуля в UMI.CMS2018-05-15T12:15:59Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
==Расположение файлов модуля==<br />
Основные факты, связанные с расположением файлов модуля относительно корня сайта:<br />
<br />
'''''Замечание 1.''' '''$module_name''' – имя модуля не должно совпадать с уже существующими в системе модулями. Список зарезервированных имен: news, content, catalog, data, autoupdate, comments, blogs, faq, filemanager, forum, vote, webforms, etc''<br />
<br />
'''''Замечание 2.''' '''$template_name''' – имя файла шаблона. По умолчанию этот файл называется default.''<br />
<br />
'''''Замечание 3.''' '''$skin_name''' – кодовое имя скина. Начиная с версии 2.8.* в системе используется скин '''mac – Butterfly'''. Начиная с версии 2.14.* по умолчанию используется скин '''Modern'''.<br />
<br />
<br />
===PHP код===<br />
PHP код модуля расположен в директории /classes/components/'''{$module_name}'''/<br />
===Шаблоны скинов админки ===<br />
XSLT шаблон скина административной панели /styles/skins/'''{$skin_name}'''/<br />
===FRONT-END шаблоны===<br />
FRONT-END шаблоны модуля. Шаблонизатор подключается по расширению файла. Существует три варианта расширений файлов: tpl, xsl, phtml<br />
====TPL шаблонизатор====<br />
Файлы лежат в /templates/'''имя_шаблона'''/tpls/{$module_name}/'''{$template_name}'''.tpl Точкой входа является шаблон из папки /templates/'''имя_модуля'''/tpls/content/'''{$template_name}'''.tpl ассоциированный с конкретной страницей в административной панели.<br />
====XSLT шаблонизатор====<br />
Все файлы шаблонов лежат в папке /templates/'''имя_шаблона'''/xslt/ . Любой файл может являться точкой входа. Правил, по которым упорядочиваются файлы в этой папке, на данный момент не существует.<br />
====PHP шаблонизатор====<br />
Все файлы шаблонов лежат в папке /templates/'''имя_шаблона'''/php/ . Любой файл может являться точкой входа. Правил, по которым упорядочиваются файлы в этой папке, на данный момент не существует.<br />
<br />
===Изображения и CSS стили===<br />
Изображения и CSS стили, относящиеся к конкретному модулю необходимо помещать в следующие папки:<br />
* CSS файлы в папку styles/skins/modern/design/css/'''{$module_name}'''.css<br />
* IMG файлы используемые в административной панеле помещаются в папку соответствующего скина /images/cms/admin/'''{$skin_name}'''/ внутри этой папки действуют собственные правила этого скина.<br />
<br />
===Иконки модуля===<br />
<br />
У модуля должны быть иконки определённых размеров для каждого скина. Базовое имя для иконки мы задали в файле инсталлятора ($INFO['ico']).<br />
<br />
*Cкин "Butterfly" - иконки для этого скина находятся в папке ~/images/cms/admin/mac/icons Для этого скина базовое имя для иконки игнорируется. Иконка должна носить имя модуля, тип иконки - прозрачный png<br />
**~/images/cms/admin/mac/icons/small/'''{$module_name}'''.png - иконка 42x30 px<br />
**~/images/cms/admin/mac/icons/medium/'''{$module_name}'''.png - иконка 64x64 px<br />
**~/images/cms/admin/mac/icons/big/'''{$module_name}'''.png - иконка 95x95 px<br />
<br />
*Cкин "Modern" - иконки для этого скина находятся в папке ~/images/cms/admin/modern/icon Для этого скина базовое имя для иконки игнорируется. Иконка должна носить имя модуля, тип иконки - прозрачный png<br />
<br />
===Иконки элементов в структуре сайта===<br />
Для каждого скина есть свой собственный набор иконок элементов отображаемых в дереве "структуры сайта".<br />
Спасает то, что пути для всех одинаковые:<br />
<br />
*~/images/cms/admin/'''mac'''/tree/ico_'''{$module_name}'''_'''{$method_name}'''.gif<br />
<br />
===Справка===<br />
В качестве справки загружается соответствующий файл из папки '''~/man/''', например, для страницы admin/content/seo/ при русском языке по умолчанию будет загружен файл /man/ru/content/seo.html</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_%D0%B2_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5_Demodizzy&diff=8183Изменение числа объектов каталога в строке Demodizzy2018-05-15T12:07:47Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
В данной статье мы видоизменим внешний вид каталога товаров веб сайта demodizzy<br />
<br />
[[Файл:catalog1.jpg]]<br />
<br />
Цель: Выводить в ряд вместо 3 товаров - 4.<br />
<br />
Решение: В шаблоне demodizzy, перенос на следующую строку осуществляется с помощью функции position() с функцией mod(). Mod() - выдает значение равное остатку от деления. Таким образом, чтобы выводить 4 элемента на строку нам нужно делать перенос после каждого 4 элемента. То есть делать перенос поле каждого деления без остатка.<br />
<br />
Условие для четного элемента: <br />
<source lang="xml"> <br />
<xsl:if test="position() mod 4 = 0 and position() != last()"><br />
...<br />
</xsl:if><br />
</source> <br />
Изменим данную функцию нужно в файле ~\templates\demodizzy\xslt\modules\catalog\common.xsl<br />
Строка 105 (по умолчанию) <br />
<br />
Далее нам надо переделать css стиль под новые условия. Для этого в файле ~\templates\demodizzy\css\modules.css изменим в блоке<br />
<br />
#main #page div.center div.content div.catalog div.object, параметр width: на 24%;<br />
<br />
Теперь нужно уменьшить размер картинок товаров, так как они стали выходить за рамки.<br />
Это можно сделать в файле ~\templates\demodizzy\xslt\modules\catalog\common.xsl, строки 45, 46.<br />
Поставим значения:<br />
<source lang="xml"> <br />
<xsl:with-param name="width">114</xsl:with-param><br />
<xsl:with-param name="height">120</xsl:with-param><br />
</source> <br />
Таким образом, мы получили 4 объекта каталога в одном ряду. Подобными манипуляциями можно добиться любого количества объектов в зависимости от запланированного дизайна.</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%22%D0%9B%D1%83%D1%87%D1%88%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%22_%D0%BD%D0%B0_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5_%D1%81%D0%B0%D0%B9%D1%82%D0%B0_%D1%81_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%BC_%22%D1%81%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&diff=8182Вывод страницы контента вместо страницы "Лучшие предложения" на главной странице сайта с шаблоном "современный"2018-05-15T12:06:54Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
Задача: На сайте с шаблоном "Современный" (demodizzy) на главной странице нужно сделать вывод страницы контента вместо страницы "Лучшие предложения" <br />
<br />
В XSLT шаблонизаторе для страницы могут быть написано несколько шаблонов. Логика по которой применится тот или иной шаблон:<br />
<br />
- Подключится тот шаблон у которого больше условий.<br />
- Если условий одинаковое количество - подключится тот шаблон, который в последовательности кода будет последним.<br />
- если в шаблоне указан параметр priority="*" - выполнится тот шаблон у которого имеется данный параметр, либо у которого выше значение данного параметра относительно другого.<br />
<br />
На примере нашего демо сайта:<br />
Обычная страница контента подключаются в шаблоне в файле ~templates\demodizzy\xslt\modules\content\common.xsl в строке: <br />
<br />
<source lang="xml"><br />
<xsl:template match="result[@module = 'content']"><br />
<div umi:element-id="{$document-page-id}" umi:field-name="content" umi:empty="&empty-page-content;"><br />
<xsl:value-of select=".//property[@name = 'content']/value" disable-output-escaping="yes" /><br />
</div><br />
</xsl:template><br />
</source><br />
<br />
То есть, если module = сontent - подключаем шаблон описанный внутри тега.<br />
<br />
Главная же страница подхватывается шаблоном в ~\templates\demodizzy\xslt\modules\catalog\special-offers.xsl, так как в нем кроме условия стоит параметр priority="1" <br />
<br />
Вот код шаблона:<br />
<source lang="xml"><br />
<xsl:template match="result[page/@is-default = '1']" ><br />
<xsl:apply-templates select="document('usel://special-offers/?limit=&specials-limit;')" mode="special-offers" /><br />
</xsl:template><br />
</source><br />
<br />
То есть, шаблон подключается если в полученном коде страницы будет параметр is-default = '1'<br />
<br />
is-default = '1' - говорит о том что страница является главной (в модуле структура указанно что путь к ней следующий - "/")<br />
<br />
Внутри тега расположен вызов USEL выборки, которая и выбирает товары из каталога.<br />
<br />
Если нам нужно чтобы вместо товаров выводился обычный контент - нужно поставить у первого шаблона параметр <br />
<source lang="xml"><br />
<xsl:template match="result[@module = 'content']" priority="2"><br />
</source><br />
[[Категория:Верстка в XSLT]]</div>Kublanhttps://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%BC%D0%B5%D0%BD%D1%8E_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B2_Demodizzy&diff=8181Динамическое меню каталога товаров в Demodizzy2018-05-15T12:06:06Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
В данной статье речь пойдет о том как немного украсить ваш сайт и сделать его более интерактивным. И так, ниже будет описан простой способ сделать анимированное меню каталога с помощью методов jquery ui. <br />
<br />
Задача: Сделать двухуровневое меню, второй уровень которого по умолчанию скрыт. При наведении мыши на какой либо раздел меню, снизу от него должны плавно выезжать подразделы. При наведении курсора на другой пункт меню, старые подразделы должны исчезать, и появятся новые, в соответствии с выбранным пунктом меню.<br />
<br />
И так, для начала нам потребуется в шаблоне нашего сайта подключить все необходимые библиотеки jquery. Так как в UMI уже, по умолчанию, подключена основная библиотека jquery, нам потребуется лишь подключить скрипты эффектов и файл с нашим будущим кастомным скриптом. Так как в нашем примере мы рассматриваем верстку на основе XSLT то соответственно скрипты должны быть вставлены в файл, где прописана верстка тегов <head> (по умолчанию - ~\templates\demodizzy\xslt\layouts\default.xsl)<br />
<br />
Нужные нам скрипты подключаются следующим образом:<br />
<source lang="xml"><br />
<script charset="utf-8" src="/templates/demodizzy/js/jquery.effects.core.js" type="text/javascript"></script><br />
</source><br />
Соответственно файл jquery.effects.core.js нужно скачать с официального сайта Jquery.<br />
<br />
И теперь подключим непосредственно наш будущий скрипт. Для данного примера назовем его My.js и положим в папку ~/templates/demodizzy/js/<br />
<source lang="xml"><br />
<script charset="utf-8" src="/templates/demodizzy/js/My.js" type="text/javascript"></script><br />
</source><br />
<br />
Следующим нашим действием будет добавление дополнительных тегов в верстку сайта, необходимых для работы скрипта.<br />
<br />
Файл отвечающий за левое меню находится: ~\templates\demodizzy\xslt\modules\catalog\left-column-category-list.xsl<br />
<br />
Изначально, интересующий нас блок выглядит следующим образом:<br />
<br />
<source lang="xml"><br />
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="left-column"><br />
<li umi:element-id="{@id}" umi:region="row"><br />
<span><br />
<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;"><br />
<xsl:value-of select="." /><br />
</a><br />
</span><br />
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" /><br />
</li><br />
</xsl:template><br />
</source><br />
<br />
<br />
Добавим дополнительные теги, для javascript:<br />
<source lang="xml"><br />
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="left-column"><br />
<div class="cat1"><br />
<li umi:element-id="{@id}" umi:region="row" ><br />
<span onMouseOver="open_menu(this)" ><br />
<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;"><br />
<xsl:value-of select="." /><br />
</a><br />
</span><br />
<div class="cat2" style="display: none; height:1"> <br />
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1/'))" /><br />
</div><br />
</li><br />
</div><br />
</xsl:template><br />
</source><br />
<br />
Некоторое пояснение к тому что именно мы добавили. Вызов отвечающий за вывод подменю мы окружили тегом <br />
<source lang="php"><br />
<div class="cat2" style="display: none; height:1"><br />
</source><br />
Параметр style="~" отвечает за настройки стиля<br />
<br />
display: none настройка стиля, согласно которой объект не отображается на странице<br />
<br />
height:1 настройка стиля, согласно которой высота объекта = 1<br />
<br />
Тег отвечающий за вызов названий разделов имеет следующий вид <br />
<source lang="php"><br />
<span onMouseOver="open_menu(this)" ><br />
</source><br />
параметр onMouseOver="open_menu(this)" обозначает что при наведении мыши на данный объект будет вызываться javascript функция open_menu(), в которую будет передаваться значение объекта вызвавшего ее.<br />
<br />
Теперь нужно написать сам скрипт, а точнее функцию, которая вызывается при наведении мыши на объект (название)<br />
Для этого откроем, пока еще пустой файл My.js, который мы подключили выше и напишем следующий скрипт:<br />
<br />
<source lang="javascript"><br />
var elems_old = "";<br />
var block = 0;<br />
var menu_speed = 500; //переменная отвечающая за скорость выпадающего меню<br />
var menu_height = 100; //переменная отвечающая за высоту блока (данный скрипт не будет вычислять ее автоматически)<br />
<br />
// функция которая вызывается при наведении мыши<br />
function open_menu(elems){<br />
<br />
//условие - если тригер блокировки стоит в 1, то функция не выполнится<br />
// функция выполнися если переданное значенеие объекта отличается от старого (сработает только если мы выбрали новый пункт меню)<br />
if(block == 0 && elems_old != elems){<br />
//сразу блокируется, чтобы не выполнять алгоритм повторно<br />
block = 1; <br />
action_menu(elems);}<br />
}<br />
<br />
function action_menu(elems){<br />
<br />
if ( elems_old != 0 ){<br />
<br />
//выбираем потомка нашего элемента (в данном случае это будет подменю, соответствующее пункту меню.)<br />
elems_a = elems_old.parentNode.childNodes[2];<br />
//анимированно сворачиваем его <br />
$( elems_a ).animate({height: 1, queue:true}, menu_speed, callback(elems_a) );<br />
}<br />
elems_c = elems.parentNode.childNodes[2];<br />
//разворачиваем с анимацией выбранный пункт меню<br />
$( elems_c ).animate({height: menu_height, queue:true}, menu_speed);<br />
// Делаем элемент видимым<br />
elems_c.style.display=""<br />
<br />
elems_old = elems;<br />
// снимаем блокировку<br />
setTimeout(function() { block = 0; }, 100)<br />
<br />
}<br />
function callback(elems_a) {<br />
//делаем исчезающий элемент невидимым<br />
setTimeout(function() { elems_a.style.display="none"; }, menu_speed)<br />
}<br />
</source><br />
<br />
Все. Теперь на вашем сайте должно получится красивое анимированное меню каталога. Для того чтобы сделать его более удобным, также, следует увеличить размер пунктов меню в таблице CSS стилей.<br />
<br />
[[Категория:Верстка в XSLT]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F_%D0%B2_UMI.CMS&diff=8180Расположение файлов модуля в UMI.CMS2018-05-15T12:05:51Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
==Расположение файлов модуля==<br />
Основные факты, связанные с расположением файлов модуля относительно корня сайта:<br />
<br />
'''''Замечание 1.''' '''$module_name''' – имя модуля не должно совпадать с уже существующими в системе модулями. Список зарезервированных имен: news, content, catalog, data, autoupdate, comments, blogs, faq, filemanager, forum, vote, webforms, etc''<br />
<br />
'''''Замечание 2.''' '''$template_name''' – имя файла шаблона. По умолчанию этот файл называется default.''<br />
<br />
'''''Замечание 3.''' '''$skin_name''' – кодовое имя скина. Начиная с версии 2.8.* в системе используется скин '''mac – Butterfly'''. Начиная с версии 2.14.* по умолчанию используется скин '''Modern'''.<br />
<br />
<br />
===PHP код===<br />
PHP код модуля расположен в директории /classes/components/'''{$module_name}'''/<br />
===Шаблоны скинов админки ===<br />
XSLT шаблон скина административной панели /styles/skins/'''{$skin_name}'''/<br />
===FRONT-END шаблоны===<br />
FRONT-END шаблоны модуля. Шаблонизатор подключается по расширению файла. Существует три варианта расширений файлов: tpl, xsl, phtml<br />
====TPL шаблонизатор====<br />
Файлы лежат в /templates/'''имя_шаблона'''/tpls/{$module_name}/'''{$template_name}'''.tpl Точкой входа является шаблон из папки /templates/'''имя_модуля'''/tpls/content/'''{$template_name}'''.tpl ассоциированный с конкретной страницей в административной панели.<br />
====XSLT шаблонизатор====<br />
Все файлы шаблонов лежат в папке /templates/'''имя_шаблона'''/xslt/ . Любой файл может являться точкой входа. Правил, по которым упорядочиваются файлы в этой папке, на данный момент не существует.<br />
====PHP шаблонизатор====<br />
Все файлы шаблонов лежат в папке /templates/'''имя_шаблона'''/php/ . Любой файл может являться точкой входа. Правил, по которым упорядочиваются файлы в этой папке, на данный момент не существует.<br />
<br />
===Изобращения и CSS стили===<br />
Изображения и CSS стили, относящиеся к конкретному модулю необходимо помещать в следующие папки:<br />
* CSS файлы в папку styles/skins/modern/design/css/'''{$module_name}'''.css<br />
* IMG файлы используемые в административной панеле помещаются в папку соответствующего скина /images/cms/admin/'''{$skin_name}'''/ внутри этой папки действуют собственные правила этого скина.<br />
<br />
===Иконки модуля===<br />
<br />
У модуля должны быть иконки определённых размеров для каждого скина. Базовое имя для иконки мы задали в файле инсталлятора ($INFO['ico']).<br />
<br />
*Cкин "Butterfly" - иконки для этого скина находятся в папке ~/images/cms/admin/mac/icons Для этого скина базовое имя для иконки игнорируется. Иконка должна носить имя модуля, тип иконки - прозрачный png<br />
**~/images/cms/admin/mac/icons/small/'''{$module_name}'''.png - иконка 42x30 px<br />
**~/images/cms/admin/mac/icons/medium/'''{$module_name}'''.png - иконка 64x64 px<br />
**~/images/cms/admin/mac/icons/big/'''{$module_name}'''.png - иконка 95x95 px<br />
<br />
*Cкин "Modern" - иконки для этого скина находятся в папке ~/images/cms/admin/modern/icon Для этого скина базовое имя для иконки игнорируется. Иконка должна носить имя модуля, тип иконки - прозрачный png<br />
<br />
===Иконки элементов в структуре сайта===<br />
Для каждого скина есть свой собственный набор иконок элементов отображаемых в дереве "структуры сайта".<br />
Спасает то, что пути для всех одинаковые:<br />
<br />
*~/images/cms/admin/'''mac'''/tree/ico_'''{$module_name}'''_'''{$method_name}'''.gif<br />
<br />
===Справка===<br />
В качестве справки загружается соответствующий файл из папки '''~/man/''', например, для страницы admin/content/seo/ при русском языке по умолчанию будет загружен файл /man/ru/content/seo.html</div>Kublanhttps://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%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9_%D0%B2_%D0%B2%D0%B0%D1%88_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C&diff=8179Добавление обработчиков событий в ваш кастомный модуль2018-05-15T12:05:30Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
Для регистрации обработчиков событий, необходимо в папку вашего модуля, к примеру '''classes/components/mymodule/''' добавить файл '''events.php''', в котором прописать обработчики для событий, допустим:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("systemSwitchElementActivity", "mymodule", "onChangeActivity");<br />
?><br />
</source><br />
<br />
Потом можно создать файл '''handlers.php''' и прописать в нем методы обработчики:<br />
<source lang="php"><br />
<?php<br />
<br />
class MymoduleHandlers {<br />
/** @var catalog $module */<br />
public $module;<br />
<br />
public function onChangeActivity(iUmiEventPoint $oEventPoint) {<br />
....<br />
}<br />
<br />
};<br />
?><br />
</source><br />
<br />
И в основном файле '''classes/components/mymodule/class.php''', в методе конструкторе '''__construct()''' подключить класс (файл) с обработчиками событий:<br />
<source lang="php"><br />
$this->__loadLib("event.php");<br />
$this->__implement("MymoduleHandlers");<br />
</source><br />
<br />
Примеры можно посмотреть во многих модулях. Файл '''events.php''' для модуля подключается автоматически, в классе '''umiEventsController'''.<br />
<br />
<br />
Для старой реализации модулей, необходимо в папку вашего модуля, к примеру '''classes/modules/mymodule/''' добавить файл '''events.php''', в котором прописать обработчики для событий, допустим:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("systemSwitchElementActivity", "mymodule", "onChangeActivity");<br />
?><br />
</source><br />
<br />
Потом можно создать файл '''__event_handlers.php''' и прописать в нем методы обработчики:<br />
<source lang="php"><br />
<?php<br />
<br />
abstract class __mymodule_handlers {<br />
<br />
public function onChangeActivity(iUmiEventPoint $oEventPoint) {<br />
....<br />
}<br />
<br />
};<br />
?><br />
</source><br />
И в основном файле '''classes/modules/mymodule/class.php''', в методе конструкторе '''__construct()''' подключить класс (файл) с обработчиками событий:<br />
<source lang="php"><br />
$this->__loadLib("__event_handlers.php");<br />
$this->__implement("__mymodule_handlers");<br />
</source><br />
<br />
Примеры можно посмотреть во многих модулях. Файл '''events.php''' для модуля подключается автоматически, в классе '''umiEventsController'''.<br />
<br />
[[Категория: API]]</div>Kublanhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_%E2%80%93_%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%86%D0%B5%D0%BD%D1%8B_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B2_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%87%D0%B0%D1%81%D1%82%D0%B8&diff=8178События – отслеживание изменения цены товаров в административной части2018-05-15T12:05:12Z<p>Kublan: </p>
<hr />
<div>'''Актуально для версии 18 85081'''<br />
<br />
В данной статье представлен пример ведения статистики, которая отслеживает изменения поля '''price''' у объектов каталога, учитывается только пользователь с $object_id=14.<br />
<br />
В '''новой реализации''' модулей (compatible-modules = 1 в config.ini или версия php >= 7.0):<br />
Для выполнения поставленной задачи, добавим в папку '''/classes/components/catalog/''' файл '''custom_events.php''' данного содержания:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener('systemModifyElement', 'catalog', 'staticinfo'); <br />
?><br />
</source><br />
<br />
Также добавим файл '''permissions.custom.php''':<br />
<source lang="php"><br />
<?php<br />
$permissions = ['tree' => ['staticinfo']];<br />
?><br />
</source><br />
<br />
А в файл '''customAdmin.php''', после свойства '''public $module;''' добавим новый метод '''staticinfo''':<br />
<source lang="php"><br />
public function staticinfo(iUmiEventPoint $e) {<br />
<br />
if ($e->getMode() == "before" && $e->getParam('user_id') == '14') { <br />
$element = $e->getRef('element');<br />
$obj_id = $element->objectId;<br />
<br />
if($element->getMethod() == 'object' && isset($_POST['data'][$obj_id]['price'])){<br />
$new_price = $_POST['data'][$obj_id]['price'];<br />
$old_price = $element->price;<br />
if($new_price != $old_price){<br />
$str = "User 14, edit field price, object = {$element->id}, old_price= {$old_price}, new_price = {$new_price}\r\n";<br />
file_put_contents(CURRENT_WORKING_DIR . '/statistika.txt', $str, FILE_APPEND);<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<br />
Теперь если пользователь изменяет цену у какого-либо объекта каталога, в файл '''statistika.txt''', который будет создан в корне сайта, запишется информация об этом событии.<br />
'''systemModifyElement''' – это событие в классе baseModuleAdmin (baseModuleAdmin.php) , в методе saveEditedElementData:<br />
<source lang="php"><br />
...<br />
$event = new umiEventPoint('systemModifyElement');<br />
$event->addRef('element', $element);<br />
$event->addRef('inputData', $inputData);<br />
$event->setParam('user_id', $user_id);<br />
$event->setMode('before');<br />
$event->call();<br />
...<br />
</source><br />
<br />
<br />
В '''старой реализации''' модулей (compatible-modules = 0 в config.ini и версия php < 7.0):<br />
Для выполнения поставленной задачи, добавим в папку '''/classes/modules/catalog/''' файл '''custom_events.php''' данного содержания:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener('systemModifyElement', 'catalog', 'staticinfo'); <br />
?><br />
</source><br />
<br />
Также добавим файл '''permissions.custom.php''':<br />
<source lang="php"><br />
<?php<br />
$permissions = Array('tree' => Array('staticinfo'));<br />
?><br />
</source><br />
<br />
А в файл '''__custom_adm.php''', после слов '''//TODO: Write here your own macroses (admin mode)''' добавим новый метод '''staticinfo''':<br />
<source lang="php"><br />
public function staticinfo(iUmiEventPoint $e) {<br />
<br />
if ($e->getMode() == "before" && $e->getParam('user_id') == '14') { <br />
$element = $e->getRef('element');<br />
$obj_id = $element->objectId;<br />
<br />
if($element->getMethod() == 'object' && isset($_POST['data'][$obj_id]['price'])){<br />
$new_price = $_POST['data'][$obj_id]['price'];<br />
$old_price = $element->price;<br />
if($new_price != $old_price){<br />
$str = "User 14, edit field price, object = {$element->id}, old_price= {$old_price}, new_price = {$new_price}\r\n";<br />
file_put_contents(CURRENT_WORKING_DIR . '/statistika.txt', $str, FILE_APPEND);<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<br />
Теперь если пользователь изменяет цену у какого-либо объекта каталога, в файл '''statistika.txt''', который будет создан в корне сайта, запишется информация об этом событии.<br />
'''systemModifyElement''' – это событие в классе baseModuleAdmin (baseModuleAdmin.php) , в методе saveEditedElementData:<br />
<source lang="php"><br />
...<br />
$event = new umiEventPoint("systemModifyElement");<br />
$event->addRef("element", $element);<br />
$event->addRef("inputData", $inputData);<br />
$event->setParam("user_id", $oUsersMdl->user_id);<br />
$event->setMode("before");<br />
$event->call();<br />
...<br />
</source><br />
[[Категория:API]]</div>Kublan