Перейти к публикации

Рекомендованные сообщения

Доброго времени!

В DLE хорошо реализована возможность добавления и создания плагинов, всё продумано, работает отлично, однако есть одно пожелание.

Дело в том, что некоторые модули используют в шаблонах ссылки на страницы своего модуля, в теге include, и если отключать модуль на время, или по какой другой причине, то в шаблоне выводится ошибка, типа File engine/mods/modul.php not found.

Пожелание же такое: Реализовать в DLE возможность работы глобального тега, который допускает вывод текста заключённого в этот тег, при включенном модуле, или отключать вывод текста, при выключенном модуле. Что то типа этого [xfgiven_modul]{include file='engine/mods/modul-page.php}[/xfgiven_modul], где modul - название, или id модуля, или иной, задаваемый идентефикатор.

Думаю было бы не плохо иметь такую возможность.

Просто иногда бывает необходимость отключить на какое то время модуль, и приходится лезть ещё и шаблон, чтобы заккоментировать вывод, а потом в обратном порядке, при включении модуля.

Ссылка на сообщение
Поделиться на других сайтах
29.01.2023 в 10:53, Lexxs сказал:

...Просто иногда бывает необходимость отключить на какое то время модуль, и приходится лезть ещё и шаблон, чтобы заккоментировать вывод, а потом в обратном порядке, при включении модуля.

 

5 часов назад, Gameer сказал:

А можно просто зайти в шаблон и обернуть в {* {include ...} *} и не нужны никакие дополнительные теги.

А мне одному кажется что можно в модуле сделать условие для его вывода: если он включен,то выводится то что надо а если выключен то ничего не выводится?

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, aleksandrhristich сказал:

 

А мне одному кажется что можно в модуле сделать условие для его вывода: если он включен, то выводится то что надо а если выключен то ничего не выводится?

Мне тоже кажется так проще. В engine/inc/options.php чуток подшаманить и в сам модуль добавить условие проверки. И будет полноценный чекбокс (вкл/выкл) данного модуля.

Ссылка на сообщение
Поделиться на других сайтах
11 часов назад, Gameer сказал:

А можно просто зайти в шаблон и обернуть в {* {include ...} *} и не нужны никакие дополнительные теги.

И таки нужно опять править в шаблоне каждый раз.

6 часов назад, aleksandrhristich сказал:

 

А мне одному кажется что можно в модуле сделать условие для его вывода: если он включен,то выводится то что надо а если выключен то ничего не выводится?

Если знаете, как это сделать, поделитесь )

2 минуты назад, dds сказал:

Мне тоже кажется так проще. В engine/inc/options.php чуток подшаманить и в сам модуль добавить условие проверки. И будет полноценный чекбокс (вкл/выкл) данного модуля.

Или уже из коробки в дле сделать, чтоб не приходилось лишний раз шаманить )

Ссылка на сообщение
Поделиться на других сайтах

Вот вам временное решение пока таких тегов не появилось.

Скрытый текст

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Tagsblock active plugins</name>
	<description>Добавляет теги [active-plugins=X] и [not-active-plugins=X] которые управляют отображением содержимого в шаблонах в зависимости от состояния плагина.</description>
	<icon></icon>
	<version></version>
	<dleversion>13.2</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mnotice>1</mnotice>
	<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>
	<notice><![CDATA[<p>@<a href="https://t.me/TeraMoune" target="_blank">TeraMoune</a></p>
<details><summary style="color:#ff720e;font-weight:500" role="button">Click here!</summary>Там где [b]X[/b] id плагина. Найти ID можно под иконкой плагина.

Например:
[code][not-active-plugins=X] Плагин отключен [/not-active-plugins]
[active-plugins=X] Плагин включен [/active-plugins][/code]
</details>]]></notice>
	<file name="engine/init.php">
		<operation action="before">
			<searchcode><![CDATA[//################# Definition of user groups]]></searchcode>
			<replacecode><![CDATA[//################# Definition of plugins
$plugins_active = get_vars ( "plugins_active" );

if (!is_array( $plugins_active )) {
	$plugins_active = array ();

	$db->query ( "SELECT id, active FROM " . USERPREFIX . "_plugins ORDER BY id ASC" );

	while ( $row = $db->get_row () ) {

		$plugins_active[$row['id']] = $row['active'];

	}
	set_vars ( "plugins_active", $plugins_active );
	$db->free ();
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/main.php">
		<operation action="before">
			<searchcode><![CDATA[if ( ($allow_active_news AND $news_found AND $config['allow_change_sort'] AND $dle_module != "userinfo") OR defined('CUSTOMSORT')) {]]></searchcode>
			<replacecode><![CDATA[if (stripos ( $tpl->copy_template, "[active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(active-plugins)=(\d+?)\\](.*?)\\[/active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}

if (stripos ( $tpl->copy_template, "[not-active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-active-plugins)=(\d+?)\\](.*?)\\[/not-active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[function check_category( $matches=array() ) {]]></searchcode>
			<replacecode><![CDATA[function check_plugins( $matches=array() ) {
	global $plugins_active;

	$block 		= $matches[3];
	$id_plugins	= intval($matches[2]);
	
  	if( !isset($plugins_active[$id_plugins]) ) return "";

	if ($matches[1] == "active-plugins") $action = true; else $action = false;
	
	$found = false;
	
  	if( $action ) {
		
		if( $plugins_active[$id_plugins] ) return $block;
	
  	} else {
			
		if( $plugins_active[$id_plugins] ) $found = true;
		
	}

	if ( !$action AND !$found ) {	

		return $block;
	}

	return "";

}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/inc/plugins.php">
		<operation action="replace">
			<searchcode><![CDATA[class=\"img-lg section_icon\"></div>]]></searchcode>
			<replacecode><![CDATA[class=\"img-lg section_icon\"><span style=\"color: #979696;text-align: center;display: inline-block;width: 100%;font-weight: 500;\">{$row['id']}</span></div>]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
</dleplugin>

 

 

Ссылка на сообщение
Поделиться на других сайтах
13 часов назад, TeraMoune сказал:

Вот вам временное решение пока таких тегов не появилось.

  Скрыть содержимое


<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Tagsblock active plugins</name>
	<description>Добавляет теги [active-plugins=X] и [not-active-plugins=X] которые управляют отображением содержимого в шаблонах в зависимости от состояния плагина.</description>
	<icon></icon>
	<version></version>
	<dleversion>13.2</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mnotice>1</mnotice>
	<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>
	<notice><![CDATA[<p>@<a href="https://t.me/TeraMoune" target="_blank">TeraMoune</a></p>
<details><summary style="color:#ff720e;font-weight:500" role="button">Click here!</summary>Там где [b]X[/b] id плагина. Найти ID можно под иконкой плагина.

Например:
[code][not-active-plugins=X] Плагин отключен [/not-active-plugins]
[active-plugins=X] Плагин включен [/active-plugins][/code]
</details>]]></notice>
	<file name="engine/init.php">
		<operation action="before">
			<searchcode><![CDATA[//################# Definition of user groups]]></searchcode>
			<replacecode><![CDATA[//################# Definition of plugins
$plugins_active = get_vars ( "plugins_active" );

if (!is_array( $plugins_active )) {
	$plugins_active = array ();

	$db->query ( "SELECT id, active FROM " . USERPREFIX . "_plugins ORDER BY id ASC" );

	while ( $row = $db->get_row () ) {

		$plugins_active[$row['id']] = $row['active'];

	}
	set_vars ( "plugins_active", $plugins_active );
	$db->free ();
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/main.php">
		<operation action="before">
			<searchcode><![CDATA[if ( ($allow_active_news AND $news_found AND $config['allow_change_sort'] AND $dle_module != "userinfo") OR defined('CUSTOMSORT')) {]]></searchcode>
			<replacecode><![CDATA[if (stripos ( $tpl->copy_template, "[active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(active-plugins)=(\d+?)\\](.*?)\\[/active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}

if (stripos ( $tpl->copy_template, "[not-active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-active-plugins)=(\d+?)\\](.*?)\\[/not-active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[function check_category( $matches=array() ) {]]></searchcode>
			<replacecode><![CDATA[function check_plugins( $matches=array() ) {
	global $plugins_active;

	$block 		= $matches[3];
	$id_plugins	= intval($matches[2]);
	
  	if( !isset($plugins_active[$id_plugins]) ) return "";

	if ($matches[1] == "active-plugins") $action = true; else $action = false;
	
	$found = false;
	
  	if( $action ) {
		
		if( $plugins_active[$id_plugins] ) return $block;
	
  	} else {
			
		if( $plugins_active[$id_plugins] ) $found = true;
		
	}

	if ( !$action AND !$found ) {	

		return $block;
	}

	return "";

}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/inc/plugins.php">
		<operation action="replace">
			<searchcode><![CDATA[class=\"img-lg section_icon\"></div>]]></searchcode>
			<replacecode><![CDATA[class=\"img-lg section_icon\"><span style=\"color: #979696;text-align: center;display: inline-block;width: 100%;font-weight: 500;\">{$row['id']}</span></div>]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
</dleplugin>

 

 

Спасибо ! Попробую ! По результату отпишусь.

Ссылка на сообщение
Поделиться на других сайтах

Отлично! 

Плагин работает. Спасибо большое!

Если бы в дле уже был такой встроенный инструмент, было бы ещё лучше )

Ссылка на сообщение
Поделиться на других сайтах
  • 3 месяца спустя...
01.02.2023 в 00:19, TeraMoune сказал:

Вот вам временное решение пока таких тегов не появилось.

  Показать содержимое


<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Tagsblock active plugins</name>
	<description>Добавляет теги [active-plugins=X] и [not-active-plugins=X] которые управляют отображением содержимого в шаблонах в зависимости от состояния плагина.</description>
	<icon></icon>
	<version></version>
	<dleversion>13.2</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mnotice>1</mnotice>
	<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>
	<notice><![CDATA[<p>@<a href="https://t.me/TeraMoune" target="_blank">TeraMoune</a></p>
<details><summary style="color:#ff720e;font-weight:500" role="button">Click here!</summary>Там где [b]X[/b] id плагина. Найти ID можно под иконкой плагина.

Например:
[code][not-active-plugins=X] Плагин отключен [/not-active-plugins]
[active-plugins=X] Плагин включен [/active-plugins][/code]
</details>]]></notice>
	<file name="engine/init.php">
		<operation action="before">
			<searchcode><![CDATA[//################# Definition of user groups]]></searchcode>
			<replacecode><![CDATA[//################# Definition of plugins
$plugins_active = get_vars ( "plugins_active" );

if (!is_array( $plugins_active )) {
	$plugins_active = array ();

	$db->query ( "SELECT id, active FROM " . USERPREFIX . "_plugins ORDER BY id ASC" );

	while ( $row = $db->get_row () ) {

		$plugins_active[$row['id']] = $row['active'];

	}
	set_vars ( "plugins_active", $plugins_active );
	$db->free ();
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/main.php">
		<operation action="before">
			<searchcode><![CDATA[if ( ($allow_active_news AND $news_found AND $config['allow_change_sort'] AND $dle_module != "userinfo") OR defined('CUSTOMSORT')) {]]></searchcode>
			<replacecode><![CDATA[if (stripos ( $tpl->copy_template, "[active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(active-plugins)=(\d+?)\\](.*?)\\[/active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}

if (stripos ( $tpl->copy_template, "[not-active-plugins=" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-active-plugins)=(\d+?)\\](.*?)\\[/not-active-plugins\\]#is", "check_plugins", $tpl->copy_template );
}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[function check_category( $matches=array() ) {]]></searchcode>
			<replacecode><![CDATA[function check_plugins( $matches=array() ) {
	global $plugins_active;

	$block 		= $matches[3];
	$id_plugins	= intval($matches[2]);
	
  	if( !isset($plugins_active[$id_plugins]) ) return "";

	if ($matches[1] == "active-plugins") $action = true; else $action = false;
	
	$found = false;
	
  	if( $action ) {
		
		if( $plugins_active[$id_plugins] ) return $block;
	
  	} else {
			
		if( $plugins_active[$id_plugins] ) $found = true;
		
	}

	if ( !$action AND !$found ) {	

		return $block;
	}

	return "";

}]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
	<file name="engine/inc/plugins.php">
		<operation action="replace">
			<searchcode><![CDATA[class=\"img-lg section_icon\"></div>]]></searchcode>
			<replacecode><![CDATA[class=\"img-lg section_icon\"><span style=\"color: #979696;text-align: center;display: inline-block;width: 100%;font-weight: 500;\">{$row['id']}</span></div>]]></replacecode>
			<enabled>1</enabled>
		</operation>
	</file>
</dleplugin>

 

 

Что то перестало работать. DLE 16.0, PHP 8.2.

В fullstory.tpl Вставляю [active-plugins=10] Текст [/active-plugins] - выводит исходный код тега текстом.

Или теги будут только в main.tpl работать ?

Ссылка на сообщение
Поделиться на других сайтах
38 минут назад, Lexxs сказал:

Что то перестало работать. DLE 16.0, PHP 8.2.

В fullstory.tpl Вставляю [active-plugins=10] Текст [/active-plugins] - выводит исходный код тега текстом.

Или теги будут только в main.tpl работать ?

Судя по коду, этот плагин исключительно для шаблона main.tpl и ни для каких других файлов шаблона.

Ссылка на сообщение
Поделиться на других сайтах
26 минут назад, celsoft сказал:

Судя по коду, этот плагин исключительно для шаблона main.tpl и ни для каких других файлов шаблона.

Печально. Нужно бы и чтоб в fullstory работал.

Ссылка на сообщение
Поделиться на других сайтах

Кажется решил проблему. Взял код из майн и вставил его для engine/modules/show.full.php.

Не знаю, насколько это корректно, но вроде работает, по крайней мере исходным текстом тег не выводит.

И да, celsoft спасибо за подсказку!)

Хорошо бы такие теги в коробочке DLE иметь в комплекте ).

Изменено пользователем Lexxs
Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Lexxs сказал:

Взял код из майн и вставил его для engine/modules/show.full.php.

Можно и вовсе перенести код который в main.php и разместить его ниже $tpl->compile ( 'main' );, а $tpl->copy_template который используется заменить на $tpl->result['main']. Это применит обработку тегов на всю окончательную вёрстку включая и все шаблоны которые были подключены. Или разместить где-то в template.class.php по принципу как сделаны теги declinationinclude и другие. Или начиная с 15.3 версии в классе templates есть функция compile_global_tags, там тоже значительная часть глобальных тегов, можно и там пристроить.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, TeraMoune сказал:

Можно и вовсе перенести код который в main.php и разместить его ниже $tpl->compile ( 'main' );, а $tpl->copy_template который используется заменить на $tpl->result['main']. Это применит обработку тегов на всю окончательную вёрстку включая и все шаблоны которые были подключены. Или разместить где-то в template.class.php по принципу как сделаны теги declinationinclude и другие. Или начиная с 15.3 версии в классе templates есть функция compile_global_tags, там тоже значительная часть глобальных тегов, можно и там пристроить.

Спасибо! Можно будет и так попробовать сделать ). Как время будет, поэксперементирую ).

А может уже скоро 16.1 выйдет и уже в комплекте будут такие теги ? ))

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...