CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
Datagor

DLE 13.2 - вопросы про custom

Recommended Posts

Привет!

Есть ли какой-то параметр/условие у CUSTOM, чтобы сделать выбор (вывод) только тех новостей,

у которых установлена галка «Публиковать на главной»?

 

Например, с помощью

{custom categoryexclude="10,59,60" limit="6" order="date" sort="desc" template="short-featured-main" cache="yes"} 

я вывожу 6 новейших статей из всех категорий, кроме 10, 59, 60.

 

Как сделать тоже самое, но выводить только опубликованные на Главной?

Благодарю за участие.

Share this post


Link to post
Share on other sites

Нет, такого стандартно нет. Вот вам плагин

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Добавляем параметр для custom - allow_main</name>
	<description>Добавляем параметр для вывода новостей которые только на главной или нет для тега custom. [ by https://lazydev.pro/ ]</description>
	<icon></icon>
	<version>1.0</version>
	<dleversion>13</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<phpinstall><![CDATA[]]></phpinstall>
	<phpupgrade><![CDATA[]]></phpupgrade>
	<phpenable><![CDATA[]]></phpenable>
	<phpdisable><![CDATA[]]></phpdisable>
	<phpdelete><![CDATA[]]></phpdelete>
	<file name="engine/modules/functions.php">
		<operation action="after">
			<searchcode><![CDATA[if( $config['allow_cache'] ) $short_news_cache = true; else $short_news_cache = false;]]></searchcode>
			<replacecode><![CDATA[if (preg_match("#allow_main=['\"](.+?)['\"]#i", $param_str, $match)) {
	if ($match[1] == "yes") {
		$where[] = "allow_main='1'";
	} elseif ($match[1] == "no") {
		$where[] = "allow_main='0'";
	}
}]]></replacecode>
		</operation>
	</file>
</dleplugin>

allow_main="yes" - только те что разрешены на главной

allow_main="no" - только те что не разрешены на главной

  • Like 2
  • Upvote 1

Share this post


Link to post
Share on other sites

Gameer, премного благодарю!

Проверено, работает. 👍

Share this post


Link to post
Share on other sites

Подскажите ещё момент!

 

На Главной странице кастомом выводятся 5 новейших статей (order="date").

И 5 обновлённых статей (order="editdate") — чтобы сразу были видны исправленные и дополненные материалы.

Но получается так, что содержимое блоков полностью или частично совпадает. Статьи у меня объёмные и я сохраняю их несколько раз в процессе редактирования и публикации.

 

Как с этим можно побороться?

 

Самое простое, что в голову пришло: не пускать новые статьи в блок обновлённых статей в течение установленного срока (1-3-5 дней) с момента опубликования.

Но, как я понял, штатных средств для этого снова нет.

:huh:

Edited by Datagor

Share this post


Link to post
Share on other sites
2 часа назад, Datagor сказал:

Подскажите ещё момент!

 

На Главной странице кастомом выводятся 5 новейших статей (order="date").

И 5 обновлённых статей (order="editdate") — чтобы сразу были видны исправленные и дополненные материалы.

Но получается так, что содержимое блоков полностью или частично совпадает. Статьи у меня объёмные и я сохраняю их несколько раз в процессе редактирования и публикации.

 

Как с этим можно побороться?

 

Самое простое, что в голову пришло: не пускать новые статьи в блок обновлённых статей в течение установленного срока (1-3-5 дней) с момента опубликования.

Но, как я понял, штатных средств для этого снова нет.

:huh:

А custom у вас с датой редактирования идет до вывода custom по дате добавления или после него?

Share this post


Link to post
Share on other sites

@Datagor Уже не имеет значения (я о вопросе выше). Реализовал плагин для тега custom. Делает он следующее:

Указываем нужному custom с которого нужно получить id новостей параметр set="X"

Указываем второму custom в котором нужно скрыть эти id новостей с первого custom параметр get="X"

Где X у обеих параметров должен быть один и тот же. Можно туда прописывать что угодно.

Плагин делает так что бы custom с параметром get выполнялся всегда после custom с параметром set.

Вот полный пример

<b>По дате</b>
{custom set="date" template="shortstory" available="global" navigation="no" from="0" limit="2" order="date" sort="desc"}
<b>По дате редактирования</b>
{custom get="date" template="shortstory" available="global" navigation="no" from="0" limit="3" order="editdate" sort="desc"}

Если нужно еще то просто прописываете другое значение для параметров set и get других custom 

get параметр можно указывать нескольким custom и скрывать с них id новостей того custom который указан в параметре get и set.

 

Сам плагин для DataLife Engine 13.0 - 13.2

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Плагин для скрытия ID с другого custom</name>
	<description>Плагин позволяет не выводить новости которые выводятся одним custom в другом. [ by https://lazydev.pro/ ]</description>
	<icon></icon>
	<version>1.0.0</version>
	<dleversion>13</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<phpinstall><![CDATA[]]></phpinstall>
	<phpupgrade><![CDATA[]]></phpupgrade>
	<phpenable><![CDATA[]]></phpenable>
	<phpdisable><![CDATA[]]></phpdisable>
	<phpdelete><![CDATA[]]></phpdelete>
	<file name="engine/modules/main.php">
		<operation action="before">
			<searchcode><![CDATA[if (stripos ( $tpl->copy_template, "{custom" ) !== false) {]]></searchcode>
			<replacecode><![CDATA[if (stripos($tpl->copy_template, '{custom') !== false) {
	$tpl->copy_template = preg_replace_callback("#\\{custom(.+?)\\}#i", 'custom_print', $tpl->copy_template);
}]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/functions.php">
		<operation action="after">
			<searchcode><![CDATA[$where[] = "approve=1";]]></searchcode>
			<replacecode><![CDATA[if (preg_match("#get=['\"](.+?)['\"]#i", $param_str, $match)) {
	$match[1] = strip_tags(stripslashes($match[1]));
	$notId = idExclude::get($match[1]);
	if ($notId === false) {
		return $matches[0];
	} elseif ($notId) {
		$where[] = "id NOT IN ('" . implode("','", $notId) . "')";
	}
}]]></replacecode>
		</operation>
		<operation action="after">
			<searchcode><![CDATA[include (DLEPlugins::Check(ENGINE_DIR . '/modules/show.custom.php'));]]></searchcode>
			<replacecode><![CDATA[if (preg_match("#set=['\"](.+?)['\"]#i", $param_str, $match)) {
	$match[1] = strip_tags(stripslashes($match[1]));
	idExclude::set($match[1], $attachments ?: 0);
}]]></replacecode>
		</operation>
		<operation action="before">
			<searchcode><![CDATA[class microTimer {]]></searchcode>
			<replacecode><![CDATA[class idExclude
{
	private static $idArray = [];
	
	static function get($k)
	{
		return isset(self::$idArray[$k]) ? self::$idArray[$k] : false;
	}
	
	static function set($k, $v)
	{
		self::$idArray[$k] = $v;
	}
}]]></replacecode>
		</operation>
	</file>
</dleplugin>

 

Share this post


Link to post
Share on other sites
19 hours ago, Gameer said:

А custom у вас с датой редактирования идет до вывода custom по дате добавления или после него?

Первым по коду страницы идёт custom order="date".

Следующим идёт блок custom  order="editdate".

 

Спасибо.

Пытаюсь понять ваш новый плагин. Но уже ночь. Думаю, не осилю сегодня :D

Share this post


Link to post
Share on other sites
11 минут назад, Datagor сказал:

Первым по коду страницы идёт custom order="date".

Следующим идёт блок custom  order="editdate".

 

Спасибо.

Пытаюсь понять ваш новый плагин. Но уже ночь. Думаю, не осилю сегодня :D

Это уже не имеет значение какой по счету идет custom. Скиньте сюда два ваших custom я пропишу вам параметры что бы все работало :)

Share this post


Link to post
Share on other sites

Gameer, здравствуйте.

Новый плагин очень навороченный вышел.

 

Можно пойти немного другим путём?

Можно сделать «ручное управление» статусом «Отредактировано/Неотредактировано» для любой статьи?

 

В админке в редакторе статей есть чекбокс «Выводить информацию о том что новость отредактирована».

<input class="icheck" type="checkbox" id="view_edit" name="view_edit" value="1">

 

Можно сделать так, чтобы без установки (и при снятии) этой галки статья считалась в системе нередактированной?

Share this post


Link to post
Share on other sites
26 минут назад, Datagor сказал:

Gameer, здравствуйте.

Новый плагин очень навороченный вышел.

 

Можно пойти немного другим путём?

Можно сделать «ручное управление» статусом «Отредактировано/Неотредактировано» для любой статьи?

 

В админке в редакторе статей есть чекбокс «Выводить информацию о том что новость отредактирована».


<input class="icheck" type="checkbox" id="view_edit" name="view_edit" value="1">

 

Можно сделать так, чтобы без установки (и при снятии) этой галки статья считалась в системе нередактированной?

В каком смысле навороченный? Там все просто.

Ну ставите галочку на «Выводить информацию о том что новость отредактирована» или нет, а в custom задаете параметр. Только для этого нужно опять дописывать правки для custom.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this