Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2010-12-11 21:22:25

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Расширить работу locatePluginTemplates

Имеем пять блоков 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;
}

Не в сети

#2 2011-01-04 17:02:08

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Расширить работу locatePluginTemplates

Выложен патч в SVN - ChangeSet 721
Тестируй.

Не в сети

#3 2011-01-05 01:08:53

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Расширить работу locatePluginTemplates

vitaly, пока не ставил. Посмотрел только код. Нет ли тут баги? В самом последнем тернарном операторе. Вместо  ($block?$skin:'') вроде как должно быть  ($block?$block:'')

// Text SKIN+BLOCK
	    $tsb = ((($skin != '')||($block != ''))?'/':'').
	            ($skin?'skins/'.$skin:'').
	            ((($skin != '') && ($block != ''))?'/':'').
	            ($block?$skin:'');

Не в сети

#4 2011-01-05 01:22:43

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Расширить работу locatePluginTemplates

Действительно ошибка, исправил.

Не в сети

#5 2011-01-06 22:51:26

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Расширить работу locatePluginTemplates

Полет нормальный

Не в сети

#6 2011-01-10 14:34:24

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Расширить работу locatePluginTemplates

vitaly, косяк в плагине tags возникает при такой вариации этой функции, если выставить использование шаблона из основного шаблона сайта. Так как в старом варианте /skins/ добавлялся в URL только если шаблон брался из папки с плагином, а сейчас skins требуется и в папке с шаблоном, которого нет даже в дефолтном шаблоне. /templates/default/plugins/tags

Решается созданием skins/default в папке с шаблоном и переносом всех файлов или проверкой на localsource в функции. Но skins по идее наоборот в этой вариации отрабатывает верно, а раньше был косяк.

Не в сети

#7 2011-02-01 04:19:48

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Расширить работу locatePluginTemplates

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.

Не в сети

#8 2011-02-02 15:23:21

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Расширить работу locatePluginTemplates

Работает

Не в сети

#9 2011-07-08 14:40:44

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Расширить работу locatePluginTemplates

Еще хочется более информативный вывод, когда шаблонизатор не может подгрузить шаблон, которого нет, а то "Директория () не существует!" вообще не несет никакой смысловой нагрузки neutral

Не в сети

Подвал раздела

Работает на FluxBB