Вы не зашли.
Имеем пять блоков top_news_X, для каждого блока своя папка с шаблонами.
Соответственно locatePluginTemplates непригоден для автоматического получения пути к шаблону. Если в каталоге плагина это еще можно решить засунув все в skins и отправляя в параметре $skin имя блока, то с шаблонами в папке основного шаблона будет беда, так как функция жестко ищет в каталоге /plugins/$plugin.
Это можно обойти если в $plugin передавать 'top_news/'.$blockName, тогда с шаблонами в основном шаблоне будет ОК, но с шаблонами в каталоге плагина будет беда. От skins отказываемся.
Но и это можно обойти, если структуру шаблонов в каталоге плагина соорудить в виде /engine/plugins/top_news/top_news1/tpl/top_news.tpl
И оно в общем-то работает, если не считать, что я работаю со skins, которые для этого не предназначены, а также на деформированную структуру директории плагина (вместо того, чтобы создавать папки в tpl, я в корне делаю папки и в них папка tpl), что в общем-то выглядит через жопу.
Пока использую свою реализацию этой функции
function myLocatePluginTemplates($tname, $plugin, $localsource = 0, $blockName = '', $skin = '') {
global $config;
$tpath = array();
foreach ($tname as $fn) {
$fnc = (substr($fn, 0, 1) == ':')?substr($fn,1):($fn.'.tpl');
if (!$localsource && is_readable(tpl_site.'plugins/'.$plugin.'/'.($blockName?$blockName.'/':'').$fnc)) {
$tpath[$fn] = tpl_site.'plugins/'.$plugin.'/'.($blockName?$blockName.'/':'');
$tpath['url:'.$fn] = tpl_url.'/plugins/'.$plugin.($blockName?$blockName:'');
} else if (is_readable(extras_dir.'/'.$plugin.'/tpl/'.($skin?'skins/'.$skin.'/':'').($blockName?$blockName.'/':'').$fnc)) {
$tpath[$fn] = extras_dir.'/'.$plugin.'/tpl/'.($skin?'skins/'.$skin.'/':'').($blockName?$blockName.'/':'');
$tpath['url:'.$fn] = admin_url.'/plugins/'.$plugin.'/tpl'.($skin?'/skins/'.$skin:'').($blockName?$blockName:'');
}
}
return $tpath;
}
Не в сети
vitaly, пока не ставил. Посмотрел только код. Нет ли тут баги? В самом последнем тернарном операторе. Вместо ($block?$skin:'') вроде как должно быть ($block?$block:'')
// Text SKIN+BLOCK
$tsb = ((($skin != '')||($block != ''))?'/':'').
($skin?'skins/'.$skin:'').
((($skin != '') && ($block != ''))?'/':'').
($block?$skin:'');
Не в сети
vitaly, косяк в плагине tags возникает при такой вариации этой функции, если выставить использование шаблона из основного шаблона сайта. Так как в старом варианте /skins/ добавлялся в URL только если шаблон брался из папки с плагином, а сейчас skins требуется и в папке с шаблоном, которого нет даже в дефолтном шаблоне. /templates/default/plugins/tags
Решается созданием skins/default в папке с шаблоном и переносом всех файлов или проверкой на localsource в функции. Но skins по идее наоборот в этой вариации отрабатывает верно, а раньше был косяк.
Не в сети
Wolverine, SVN ChangeSet 745 - функцию опять немного изменил, теперь должна работать более логично:
% Изменение в функции locatePluginTemplates - при указании localsource = 0 и skin != функция будет искать файл в следующей последовательсти:
templates/<ID>/plugins/<PLUGIN>/skins/<SKIN>/<FILE>
templates/<ID>/plugins/<PLUGIN>/<FILE>
engine/plguins/<PLUGIN>/tpl/skins/<SKIN>/<FILE>
это позволит плагинам иметь несколько скинов в собственном каталоге, а в шаблоне сайта - хранить файлы без каталога skins/
проверь, plz.
Не в сети
Еще хочется более информативный вывод, когда шаблонизатор не может подгрузить шаблон, которого нет, а то "Директория () не существует!" вообще не несет никакой смысловой нагрузки
Не в сети