You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

5.6 KiB

Модуль - Работа с документами

Массовый обход документов в пределах одной рубрики, и выполенеие действий над ними.

Оглавление

Настройки

  1. Пересохранять документы при обходе - Включает функцию documentSave, передаются все данные из $data
  2. При сохранении документа использовать Исполняемый код рубрики
  3. Сохранение ревизий документа
  4. Отображать действия в системных сообщениях

Пункты (2, 3, 4 работают только если вкл 1 пункт)

Внутренние функции

Является ли файл изображением
self::_is_image($path)
return bool

Существует ли файл
self::_if_exists($path)
return bool

Есть ли в тексте ссылки (http|s)
self::_link_exists($string)
return int

Очищает теги от style, убирает пустые теги
self::_clear_text($string, $span = false)
$span - bool - удалить из текста <span></span> (только теги)
return string

Примеры кода перед сохранением

<?php
	// Посмотреть все данные, для теста
	Debug::_echo($data, true);
?>
<?php
	// Описание (Многострочное): Поле ID = 1
	if (empty($data['feld'][1]))
	{
		$document_logs[] = 'Нет описания - Поле 1';
	}
	else
	{
		if ($num_links = self::_link_exists($data['feld'][1]))
		  $document_logs[] = 'В описании найдены ссылки: <strong>' . count($num_links) . '</strong>';

		// Символов в исходном тексте
		$count_text = strlen($data['feld'][1]);

		// Очищаем текст
		$string = self::_clear_text($data['feld'][1], true);

		// Символов в очищенном тексте
		$new_count = strlen($string);

		// Разница
		$diff = $count_text - $new_count;

		// Если разница больше 100 символов
		if ($diff > 100)
			$document_logs[] = 'Текст описания можно уменьшить: <strong>с ' . $count_text . ' до ' . $new_count . '</strong>';
	}
?>
<?php
	// Изображение (Одиночное): Поле ID = 2
	$image = $data['feld'][2]['img'];

	// Изображение
	if (empty($image))
		$document_logs[] = 'Нет изображения - Поле 2';

	if (! empty($image))
	{
		// Проврека на наличие файла на сервере
		if (! self::_if_exists(BASE_DIR . $image))
		{
			$document_logs[] = 'Файл отсутсвует на сервере: <strong>' . $image . '</strong>';
		}
		else
			{
				if (! self::_is_image(BASE_DIR . $image))
					$document_logs[] = 'Неправильный формат файла:  <strong>' . $image . '</strong>';
			}
	}
?>
<?php
	// Изображение (Мега): Поле ID = 3
	$images = $data['feld'][3];

	if (empty($images))
		$document_logs[] = 'Нет изображений - Поле 3';

	if (! empty($images))
	{
		foreach ($images AS $k => $v)
		{
			$image = $v['url'];

			if (! empty($image))
			{
				// Проврека на наличие файла на сервере
				if (! self::_if_exists(BASE_DIR . $image))
				{
					$document_logs[] = '('.$k.') Файл отсутсвует на сервере: <strong>' . $image . '</strong>';
				}
				else
					{
						if (! self::_is_image(BASE_DIR . $image))
							$document_logs[] = '('.$k.') Неправильный файл:  <strong>' . $image . '</strong>';
					}
			}
		}
	}
?>
<?php
	// Если документ не опубликован
	if ($data['document_status'] == 0)
		$document_logs[] = 'Документ не опубликован';

	// Если документ в корзине
	if ($data['document_deleted'] == 1)
		$document_logs[] = 'Документ в корзине';
?>
<?php
	//  Пропускаем запись логов
	if ($data['document_title'] != '')
		$document_logs = [];
?>

Пример своей SQL выборки

Важно! Перед полным запуском, не забывайете проверить, наличи тестовых данных

<?php
	$sql = "
		SELECT
			Id
		FROM
			" . PREFIX . "_documents
		WHERE
			rubric_id = {$rubric_id}
			AND
			document_status = 1
		ORDER BY document_title ASC
		LIMIT {$limit}, 1;
	";
?>

Запросить конкретный документ для теста

Важно! Перед полным запуском, не забывайете проверить, наличи тестовых данных

<?php
	$document_id = 1;
?>

Если $document_logs пусто - то запись логов не будет производиться
Если $data пусто - то сохранение документа будет пропущено

Changelog:

05.07.2020 - Дата создания


Copyright © 2007-2020 Ave-Cms.Ru