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

2 плагина с идентичным условием.


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

Тут такая проблема, если 2 плагина имеют одно схожее условие, например:

1 Плагин:

Найти: $tpl->compile( 'content' );

Добавить выше: $tpl->set('{avatar}', $avatar['foto']);

 

2 Плагин:

Найти: $tpl->compile( 'content' );

Добавить выше: $tpl->set('{Text}', 'Text']);

 

Один из плагинов перестаёт работать, так как один заменяет другой.

 

Можно как нибудь решить это, или только объединить 2 плагина?

 

 

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

Никаких проблем в данном вопросе незафиксировано. Ничего не заменяет друг друга, проверил специально, потому как у вас действие "Добавить выше". А вот в строке  $tpl->set('{Text}', 'Text']); у вас явная синтаксическая ошибка. Что за лишняя квадратная скобка?

Ссылка на сообщение
Поделиться на других сайтах
В 20.09.2018 в 15:19, celsoft сказал:

Никаких проблем в данном вопросе незафиксировано. Ничего не заменяет друг друга, проверил специально, потому как у вас действие "Добавить выше". А вот в строке  $tpl->set('{Text}', 'Text']); у вас явная синтаксическая ошибка. Что за лишняя квадратная скобка?

Это просто пример (Написал на скорую руку).

 

Вот 2 плагина. Если включен один из двух, то второй из двух не работает:

1 Плагин:

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Расширение функционала шаблонизатора новостей. Условия IF</name>
	<description>Простой, но многофункциональный хак, позволяющий выводить заданный текст в зависимости от значения полей новости или доп. полей xfields.</description>
	<icon></icon>
	<version>0.1</version>
	<dleversion>13.0</dleversion>
	<versioncompare>greater</versioncompare>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[?>]]></searchcode>
			<replacecode><![CDATA[function parseIf($m){
	global $row,$config;
	$m[1] = trim($m[1]);
	$m[2] = trim($m[2]);
	preg_match("#^([0-9]+)\<(.+?)\>([0-9]+)?$#is",$m[1],$f);
	if($f[3]){
		$xf = explode("xfvalue_",$f[2]);
		if($xf[1]) $v = floatval($row['xfields'][$xf[1]]);
		else $v = floatval($row[$f[2]]);
		if($v>=floatval($f[1]) AND $v<floatval($f[3])) return $m[2];
		else return "";
	}
	preg_match("#^(.+?)(!~|~|!=|=|>=|<=|<|>)['\"]?(.*?)['\"]?$#is",$m[1],$f);
	if(!$f[2]) return $m[0];
	$xf = explode("xfvalue_",$f[1]);
	if($xf[1]) $v = $row['xfields'][$xf[1]];
	elseif($f[1]=='tags') $v = $row[$f[1]][0];
	else $v = $row[$f[1]];
	$v = strtolower(strip_tags($v));
	$fval = strtolower($f[3]);
	switch($f[2]){
		case ">":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v>$fval) return $m[2];
			break;
		case "<":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v<$fval) return $m[2];
			break;
		case ">=":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v>=$fval) return $m[2];
			break;
		case "<=":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v<=$fval) return $m[2];
			break;
		case "!=":
			if($v!=$fval) return $m[2];
			break;
		case "~":
			if(dle_strrpos($v,$fval,$config['charset'])!==false) return $m[2];
			break;
		case "!~":
			if(dle_strrpos($v,$fval,$config['charset'])===false) return $m[2];
			break;
		default:
			if($v===$fval) return $m[2];
	}
}]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.short.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if(!is_array($row['xfields'])) $row['xfields'] = xfieldsdataload( $row['xfields'] );
$tpl->copy_template = preg_replace_callback("#\\[if (.+?)\\](.*?)\\[/if\\]#is","parseIf",$tpl->copy_template);]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.full.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if(!is_array($row['xfields'])) $row['xfields'] = xfieldsdataload( $row['xfields'] );
$tpl->copy_template = preg_replace_callback("#\\[if (.+?)\\](.*?)\\[/if\\]#is","parseIf",$tpl->copy_template);]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.custom.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if(!is_array($row['xfields'])) $row['xfields'] = xfieldsdataload( $row['xfields'] );
$tpl->copy_template = preg_replace_callback("#\\[if (.+?)\\](.*?)\\[/if\\]#is","parseIf",$tpl->copy_template);]]></replacecode>
		</operation>
		<operation action="before">
			<searchcode><![CDATA[$global_news_count = 0;]]></searchcode>
			<replacecode><![CDATA[global $row;]]></replacecode>
		</operation>
	</file>
</dleplugin>

2 Плагин:

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Возрастное ограничение для новостей.</name>
	<description>Данный модуль выводить или скрывает текст если возраст пользователя не соответствует возрастному ограничению заданной определённой статье.</description>
	<icon></icon>
	<version>0.2</version>
	<dleversion>13.0</dleversion>
	<versioncompare>greater</versioncompare>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[?>]]></searchcode>
			<replacecode><![CDATA[function age_limit($matches=array()){
global $member_id, $is_logged,$member_id,$row;
  
if(!count($matches))return "";
if(preg_match( "#birthday=['\"](.*?)['\"]#i", $matches[2], $birthday)){
	$birthday = preg_match( "#(".$birthday[1].")\|(.*)#i", $member_id['xfields'], $xfields)?$xfields[2]:$birthday[1];
	if(preg_match( "#([0-9]{1,2})\.([0-9]{1,2}).([0-9]{1,4})#", $birthday, $date )){  
		if($date[2] > date('m') || $date[2] == date('m') && $date[1] > date('d'))
			$age = (date('Y') - $date[3] - 1);
        else
			$age = (date('Y') - $date[3]);
		if (!is_numeric($age)) $age = 0;
	}else{
		$age = 0;
	}
}else{
	$age = 0;
}
  
if(preg_match("#limit=['\"](.*?)['\"]#i", $matches[2], $limit_match)){	
	$xfieldsdata = xfieldsdataload($row['xfields']);
	$limit = $xfieldsdata[$limit_match[1]]?$xfieldsdata[$limit_match[1]]:$limit_match[1];
  	if (!is_numeric($limit)) $limit = 0;
}else{
	$limit = 0;
}
  
if($matches[1] == "agelimit"){ 
	if($is_logged and $age>=$limit) return $matches[3];  else return'';
}elseif($matches[1] == "not-agelimit"){ 
	if($age<$limit) return $matches[3]; else return'';
}    
}]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.short.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if (strpos ( $tpl->copy_template, "[agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(agelimit) (.+?)\\](.*?)\\[/agelimit\\]#is", "age_limit", $tpl->copy_template );
}
if (strpos ( $tpl->copy_template, "[not-agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-agelimit) (.+?)\\](.*?)\\[/not-agelimit\\]#is", "age_limit", $tpl->copy_template );
}]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.full.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if (strpos ( $tpl->copy_template, "[agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(agelimit) (.+?)\\](.*?)\\[/agelimit\\]#is", "age_limit", $tpl->copy_template );
}
if (strpos ( $tpl->copy_template, "[not-agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-agelimit) (.+?)\\](.*?)\\[/not-agelimit\\]#is", "age_limit", $tpl->copy_template );
}]]></replacecode>
		</operation>
	</file>
	<file name="engine/modules/show.custom.php">
		<operation action="before">
			<searchcode><![CDATA[$tpl->compile( 'content' );]]></searchcode>
			<replacecode><![CDATA[if (strpos ( $tpl->copy_template, "[agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(agelimit) (.+?)\\](.*?)\\[/agelimit\\]#is", "age_limit", $tpl->copy_template );
}
if (strpos ( $tpl->copy_template, "[not-agelimit" ) !== false) {
	$tpl->copy_template = preg_replace_callback ( "#\\[(not-agelimit) (.+?)\\](.*?)\\[/not-agelimit\\]#is", "age_limit", $tpl->copy_template );
}]]></replacecode>
		</operation>
		<operation action="after">
			<searchcode><![CDATA[$global_news_count = 0;]]></searchcode>
			<replacecode><![CDATA[global $row;]]></replacecode>
		</operation>
	</file>
</dleplugin>

 

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

Вот 2 плагина. Если включен один из двух, то второй из двух не работает:

Не работает, понятие растяжимое. В чем конкретно это заключается? Какой именно код некорректно вставляется именно со стороны DLE? Не работать у вас два плагина могут из за своих внутренних конфликтов, т.к. они вмешиваются и заменяют переменные.

 

Я проверил оба ваших плагина, все замены DLE произвел корректно, ровно так как указано в плагинах. Поэтому в данном случае вам нужно уже искать проблемы уже в конфликтах между кодами самих плагинов.

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

Не работает, понятие растяжимое. В чем конкретно это заключается? Какой именно код некорректно вставляется именно со стороны DLE? Не работать у вас два плагина могут из за своих внутренних конфликтов, т.к. они вмешиваются и заменяют переменные.

 

Я проверил оба ваших плагина, все замены DLE произвел корректно, ровно так как указано в плагинах. Поэтому в данном случае вам нужно уже искать проблемы уже в конфликтах между кодами самих плагинов.

Конфликта не обнаружил, наверно кэш не почистил.

 

 

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

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

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

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

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

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

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

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

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

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