Массовое удаление комментариев — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
'''Актуально для версии 2.9.6'''
+
'''Актуально для версии 19.'''
  
Можем возникнуть ситуация, когда на сайте не была включена captcha, и было оставлено большое количество спам-комментариев. Удалять их по-одному из административной панели будет очень долго, вместо этого для удаления мы будем использовать следующий код:
+
Может возникнуть ситуация, когда на сайте не была включена captcha, и было оставлено большое количество спам-комментариев. Удалять их по одному из административной панели будет очень долго, вместо этого для удаления мы будем использовать следующий код:
  
 
<source lang="php">
 
<source lang="php">
public function deleteComments() {
+
public function deleteComments($amount = 0) {
 +
$ObjectsCollection = umiObjectsCollection::getInstance();
 +
$TypesCollection = umiObjectTypesCollection::getInstance();
 +
 
 +
$commentsTypeId = $TypesCollection->getTypeIdByHierarchyTypeName("comments", "comment");
 +
$pages = new selector('objects');
 +
$pages->types('object-type')->id($commentsTypeId);
 +
if($amount)
 +
$pages->limit(0, $amount);
 +
else
 +
return ['count' => $pages->length];
 
 
    $amount = 100;
+
foreach($pages as $page)
    $pages = new selector('objects');
+
$ObjectsCollection->delObject($page->getId());
    $pages->types('object-type')->id(66);
+
    $pages->limit(0, $amount);
+
return ['countDel' => $pages->length];
    $ObjectsCollection = umiObjectsCollection::getInstance();
+
}
  
    foreach($pages as $page)
 
        $ObjectsCollection->delObject($page->getId());
 
}
 
 
</source>
 
</source>
  
Разместите данный код в файле classes/modules/custom.php после строки //TODO: Write your own macroses here. В строке
+
Разместите данный код в файле classes/components/custom.php для новой реализации модулей или в файле classes/modules/custom.php для старой, перед последней фигурной скобкой в файле.
<source lang="php">
+
 
$pages->types('object-type')->id(66);
+
Для запуска макроса нужно в адресной строке браузера написать
 +
<b>domain.ru/udata/custom/deleteComments/777/</b>,
 +
где <b>domain.ru</b> — это адрес вашего сайта, а <b>777</b> — это количество комментариев, которые необходимо удалить.
 +
 
 +
Если количество комментариев, необходимых для удаления, велико, то при указании большего числа сайт может перестать функционировать на время. Данное число необходимо подбирать опытным путем, чтобы удалялось максимально возможное количество комментариев за раз, и при этом сайт продолжал корректно функционировать.
 +
 
 +
После завершения работы макрос вернет количество удаленных комментариев, например:
 +
<source lang="xml">
 +
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="deleteComments" generation-time="0.263769">
 +
<countDel>119</countDel>
 +
</udata>
 
</source>
 
</source>
мы задаем id типа данных "Комментарии", если у Вас id типа данных "Комментарии" другой - тогда подставьте соответствующее значение.  
+
В данном случае мы указали макросу удалить 777 комментариев, но на сайте было всего 119.
  
В переменную
+
Если не указывать количество комментариев для удаления, то макрос вернет общее количество комментариев на сайте:
<source lang="php">
+
<source lang="xml">
$amount = 100;
+
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="deleteComments" generation-time="0.008357">
 +
<count>104</count>
 +
</udata>
 
</source>
 
</source>
 
мы передаем количество комментариев, которое будет удалено за один раз. Если количество комментариев, необходимое для удаления, велико, то при указании большего числа сайт может перестать функционировать на время. Данное число необходимо подбирать опытным путем, чтобы удалялось максимально возможное количество комментариев за раз, и при этом сайт продолжал корректно функционировать.
 
 
Для запуска макроса нужно в адресной строке браузера написать
 
<b>domain.ru/udata/custom/deleteComments</b>,
 
где <b>domain.ru</b> - это адрес вашего сайта
 
  
 
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]
 
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]

Текущая версия на 08:49, 7 ноября 2018

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

Может возникнуть ситуация, когда на сайте не была включена captcha, и было оставлено большое количество спам-комментариев. Удалять их по одному из административной панели будет очень долго, вместо этого для удаления мы будем использовать следующий код:

public function deleteComments($amount = 0) {	
	$ObjectsCollection = umiObjectsCollection::getInstance();
	$TypesCollection = umiObjectTypesCollection::getInstance();

	$commentsTypeId = $TypesCollection->getTypeIdByHierarchyTypeName("comments", "comment");
	$pages = new selector('objects');	
	$pages->types('object-type')->id($commentsTypeId);
	if($amount)
		$pages->limit(0, $amount);
	else
		return ['count' => $pages->length];
			
	foreach($pages as $page)
		$ObjectsCollection->delObject($page->getId());
	
	return ['countDel' => $pages->length];
}

Разместите данный код в файле classes/components/custom.php для новой реализации модулей или в файле classes/modules/custom.php для старой, перед последней фигурной скобкой в файле.

Для запуска макроса нужно в адресной строке браузера написать domain.ru/udata/custom/deleteComments/777/, где domain.ru — это адрес вашего сайта, а 777 — это количество комментариев, которые необходимо удалить.

Если количество комментариев, необходимых для удаления, велико, то при указании большего числа сайт может перестать функционировать на время. Данное число необходимо подбирать опытным путем, чтобы удалялось максимально возможное количество комментариев за раз, и при этом сайт продолжал корректно функционировать.

После завершения работы макрос вернет количество удаленных комментариев, например:

<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="deleteComments" generation-time="0.263769">
<countDel>119</countDel>
</udata>

В данном случае мы указали макросу удалить 777 комментариев, но на сайте было всего 119.

Если не указывать количество комментариев для удаления, то макрос вернет общее количество комментариев на сайте:

<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="custom" method="deleteComments" generation-time="0.008357">
<count>104</count>
</udata>