Xaker1493 14 Опубликовано: 19 сентября 2018 Рассказать Опубликовано: 19 сентября 2018 (изменено) Тут такая проблема, если 2 плагина имеют одно схожее условие, например: 1 Плагин: Найти: $tpl->compile( 'content' ); Добавить выше: $tpl->set('{avatar}', $avatar['foto']); 2 Плагин: Найти: $tpl->compile( 'content' ); Добавить выше: $tpl->set('{Text}', 'Text']); Один из плагинов перестаёт работать, так как один заменяет другой. Можно как нибудь решить это, или только объединить 2 плагина? Изменено 19 сентября 2018 пользователем Xaker1493 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 20 сентября 2018 Рассказать Опубликовано: 20 сентября 2018 Никаких проблем в данном вопросе незафиксировано. Ничего не заменяет друг друга, проверил специально, потому как у вас действие "Добавить выше". А вот в строке $tpl->set('{Text}', 'Text']); у вас явная синтаксическая ошибка. Что за лишняя квадратная скобка? Цитата Ссылка на сообщение Поделиться на других сайтах
Xaker1493 14 Опубликовано: 23 сентября 2018 Рассказать Опубликовано: 23 сентября 2018 Автор В 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> Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 24 сентября 2018 Рассказать Опубликовано: 24 сентября 2018 17 часов назад, Xaker1493 сказал: Вот 2 плагина. Если включен один из двух, то второй из двух не работает: Не работает, понятие растяжимое. В чем конкретно это заключается? Какой именно код некорректно вставляется именно со стороны DLE? Не работать у вас два плагина могут из за своих внутренних конфликтов, т.к. они вмешиваются и заменяют переменные. Я проверил оба ваших плагина, все замены DLE произвел корректно, ровно так как указано в плагинах. Поэтому в данном случае вам нужно уже искать проблемы уже в конфликтах между кодами самих плагинов. Цитата Ссылка на сообщение Поделиться на других сайтах
Xaker1493 14 Опубликовано: 24 сентября 2018 Рассказать Опубликовано: 24 сентября 2018 Автор 2 часа назад, celsoft сказал: Не работает, понятие растяжимое. В чем конкретно это заключается? Какой именно код некорректно вставляется именно со стороны DLE? Не работать у вас два плагина могут из за своих внутренних конфликтов, т.к. они вмешиваются и заменяют переменные. Я проверил оба ваших плагина, все замены DLE произвел корректно, ровно так как указано в плагинах. Поэтому в данном случае вам нужно уже искать проблемы уже в конфликтах между кодами самих плагинов. Конфликта не обнаружил, наверно кэш не почистил. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.