Jump to content
Sign in to follow this  
Xaker1493

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

Recommended Posts

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

1 Плагин:

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

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

 

2 Плагин:

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

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

 

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

 

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

 

 

Edited by Xaker1493

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 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>

 

Share this post


Link to post
Share on other sites
17 часов назад, Xaker1493 сказал:

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

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

 

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

Share this post


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

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

 

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

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

 

 

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  

×
×
  • Create New...