https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_-_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%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%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5&feed=atom&action=historyСобытия - подсчет количества объектов каталога в разделе - История изменений2024-03-29T07:53:57ZИстория изменений этой страницы в викиMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_-_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%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%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5&diff=3084&oldid=prev2011-09-27T08:26:19Z<p>переименовал «<a href="/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%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%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F" class="mw-redirect" title="Подсчет количества объектов каталога в разделе через События">Подсчет количества объектов каталога в разделе через События</a>» в «[[События - подсчет количества объектов каталога в разде�</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<tr class="diff-title" lang="ru">
<td colspan="1" style="background-color: #fff; color: #222; text-align: center;">← Предыдущая</td>
<td colspan="1" style="background-color: #fff; color: #222; text-align: center;">Версия 08:26, 27 сентября 2011</td>
</tr><tr><td colspan="2" class="diff-notice" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>Cmachttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_-_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%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%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5&diff=2983&oldid=prevCmac в 10:55, 8 сентября 20112011-09-08T10:55:35Z<p></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="ru">
<td colspan="2" style="background-color: #fff; color: #222; text-align: center;">← Предыдущая</td>
<td colspan="2" style="background-color: #fff; color: #222; text-align: center;">Версия 10:55, 8 сентября 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l90" >Строка 90:</td>
<td colspan="2" class="diff-lineno">Строка 90:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div><xsl:value-of select="document(concat('udata://catalog/getCountObjects/', @id))/udata" /></div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div><xsl:value-of select="document(concat('udata://catalog/getCountObjects/', @id))/udata" /></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div></pre></div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div></pre></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Категория:Модуль Каталог]]</ins></div></td></tr>
</table>Cmachttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_-_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%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%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5&diff=2652&oldid=prevVITL': Новая страница: «На сайте можно стандартными средствами выводить количтество объектов каталога в каждом р…»2011-06-13T18:41:00Z<p>Новая страница: «На сайте можно стандартными средствами выводить количтество объектов каталога в каждом р…»</p>
<p><b>Новая страница</b></p><div>На сайте можно стандартными средствами выводить количтество объектов каталога в каждом разделе. Можно использовать макрос %catalog getObjectsList()% и его значение %total%, также можно использовать %data doSelection()% или протокол usel (XSLT), но при использовании данных макросов будет создаваться лишняя нагрузка на сервер, при каждой загрузки страницы, будет происходить пересчет по каждому разделу каталога. Идеальный вариант это производить подсчет при добавлении объекта каталога в раздел, при изменении активность объекта каталога или его удалении, все это можно сделать с помощью событий UMI.CMS.<br />
Для реализации данной задачи, в папке '''/classes/modules/catalog/''' создадим файл '''custom_events.php''' следующего содержания:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener('systemCreateElement', 'catalog', 'onCountObjects'); <br />
new umiEventListener('systemDeleteElement', 'catalog', 'onCountObjects');<br />
new umiEventListener('systemSwitchElementActivity', 'catalog', 'onCountObjects'); <br />
?><br />
</source><br />
<br />
<br />
Данные события:<br />
<pre><br />
systemCreateElement<br />
systemDeleteElement<br />
systemSwitchElementActivity<br />
</pre><br />
<br />
это события зарегистрированные в классе '''baseModuleAdmin''', файл '''classes/modules/ baseModuleAdmin.php'''.<br />
<br />
Добавим в эту же папку файл '''permissions.custom.php''':<br />
<source lang="php"><br />
<?php<br />
$permissions = Array('tree' => Array('onCountObjects'), 'view' => Array('getCountObjects'));<br />
?><br />
</source><br />
<br />
В файл '''__custom_adm.php''' добавим метод, который будет запускаться при создании, удалении, смены активности объекта каталога:<br />
<source lang="php"><br />
public function onCountObjects(iUmiEventPoint $oEventPoint) {<br />
if ($oEventPoint->getMode() == "after") {<br />
$element = $oEventPoint->getRef('element');<br />
<br />
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypes->getTypeByName("catalog", "object");<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
<br />
if($element->getTypeId() == $hierarchyTypeId){<br />
$hierarchy = umiHierarchy::getInstance();<br />
$id_parent = $element->getParentId();<br />
$element_parent = $hierarchy->getElement($id_parent);<br />
<br />
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId); <br />
<br />
$element_parent->setValue('count_object',$count);<br />
$element_parent->commit();<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<br />
А в файл '''__custom.php''' добавим метод который будет отвечать за вывод значения количества объектов каталога, в случае необходимости этот же метод будет производить подсчет, если он еще ни разу не осуществлялся для раздела:<br />
<source lang="php"><br />
public function getCountObjects($id_parent){<br />
$id_parent = (int) $id_parent;<br />
$hierarchy = umiHierarchy::getInstance();<br />
$element = $hierarchy->getElement($id_parent);<br />
if($element && $element->getMethod() == 'category'){<br />
$count = $element->count_object;<br />
if(!is_null($count)){<br />
if($count > 0) return "<span class='gray'>({$count})</span>";<br />
}else{<br />
<br />
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();<br />
$hierarchyType = $hierarchyTypes->getTypeByName("catalog", "object");<br />
$hierarchyTypeId = $hierarchyType->getId();<br />
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId); <br />
$element->setValue('count_object',$count);<br />
$element->commit();<br />
if($count > 0) return "<span class='gray'>({$count})</span>"; <br />
} <br />
}<br />
} <br />
</source><br />
В административной части, в модуле "Шаблонный данных", в типе данных "Раздел каталога" добавим еще одно поле:<br />
<pre><br />
Название – Количество объектов<br />
Идентификатор - count_object<br />
Тип – число<br />
</pre><br />
<br />
В самих шаблонах сайта необходимо будет вывести значение поля '''count_object''' используя метод '''getCountObjects''', метод принимает один параметр, это id раздела каталога. Для TPL-шаблонов вызов следующий:<br />
<pre><br />
%catalog getCountObjects(%id%)%<br />
</pre><br />
<br />
Для XSL-шаблонов, в случае если @id – id раздела:<br />
<pre><br />
<xsl:value-of select="document(concat('udata://catalog/getCountObjects/', @id))/udata" /><br />
</pre></div>VITL'