Подбрано за Уеб дизайн, SEO оптимизация и Joomla

How to "kill" plugin in Joomla?

( Оценка 5.0 ) от ( 4 отзива )

Един от недостатъците на плугин системата в Джумла 1.5 ( и нагоре) е че няма механизъм за селектирано стартиране на плъгини при един и същ тип съдържание.

За пример - искам под някои статии да няма коментарна система. Решението ако самият плъгин няма параметър от вида Exclude Article ID`s (указание за кои айдита на статии) да не се стартира плъгина) е хакване на темплейта и изрично изреждане с php код - ако сега системата показва еди коя си статия и тя е в списъка, то да не се стартира плъгина.

 

Моето решение демонстрира един малко необичаен начин за заобикаляна на такива проблеми. В Джумла съществува клас JDispatcher в чийто масив _observers се пазят всички регистрирани плъгини. На практика в Джумла 1.5 плъгините могат да бъдат два вида - с клас и с функция, като и в двата случая системата изпълнява JDispatcher::register(), което на практика се свежда до създаване на нов елемент от масива _observers с новият запис и това се повтаря за всеки публикуван плъгин.

 

За целта написах два плъгина - системен и кънтентен (system and content) всеки от който отговаря за своята си група плъгини. (въпреки че може ад се мисли и за един универсален) Тези пък плъгини имат текстово поле за въвеждане на списък с url и списък с имена на плъгини. Работата им накратко се върши по следният алгоритъм и са написани така че тези действия се изпълняват преди останалите плъгини да направят нещо полезно.

 

1. Проверява  дали някой от url тата в списъка съвпада с текущият  (адресите се попълват с утф8 символи демек не през мозила се взимат).

2.Ако има съвпадение (проверката се извършва с фунцкията mb_strpos) то просто изчиства от масива _observers съответният регистриран handler и по тоя начин плъгина няма как да се стартира въпреки че се публикуван.

 

Хубаво е и да се погрижите да са първи в списъка в съответната плъгин група (order 0).

 

Ето и един пример за това как премахнах коментарната система точно на тази страница.

 

Със следният код, вкаран в index.php на темплейта (не ми се пише модул за целта) установяваме имената на стартираните плъгини и преценямва кой да килнем (премахнем)

 

$dispatcher=&JDispatcher::getInstance();
foreach ($dispatcher->_observers as $i) {
if (is_object($i))    {    
$k=get_class($i);
}
if (is_array($i))    {    
$k=var_export($i,true);
}
echo $k.'<br/>';
}

 

и се получава нещо то вида на

plgSystemUnicodeslug
plgSystemNoNumberElements
array ( 'event' => 'onRenderModule', 'handler' => 'plgSystemAdvancedModulesRenderModule', )
array ( 'event' => 'onCreateModuleQuery', 'handler' => 'plgSystemAdvancedModulesCreateModuleQuery', )
array ( 'event' => 'onPrepareModuleList', 'handler' => 'plgSystemAdvancedModulesPrepareModuleList', )
plgSystemAdvancedModules
array ( 'event' => 'onTranslateAds', 'handler' => 'plgAdsTranslate', )
array ( 'event' => 'onTranslateAdsR', 'handler' => 'plgAdsTranslateR', )
array ( 'event' => 'onPrepareContent', 'handler' => 'plgReadMore2', )
plgSystemAuto_purge_cache
plgSystemGenerator
plgSystemSef
plgSystemDebug
plgSystemLegacy
plgSystemRemember
plgSystemShsef
plgSystemJumiRouter
plgSystemJComments
plgSystemplg_killplugins

plgContentJComments

 

В моят случай това е плъгина plgContentJComments и той е кънтент

Сега конфигурирам моят плъгин plg_killplugins да премахне  от url-to

blog/joomla-kill-plugin

плъгина

plgContentJComments

 

Тъй като вида на получаваното url в плъгина може да зависи от сеф системата съм предвидим възможност за различни видове сравнения  Juri::toString(), getQuery, getPath

 

За да изтествам плъгина съм предвидил и тази статия да няма коментарна система.

plgkill1

 

Самите плъгини може да изтеглите от тук.

 

Тези плъгини не работят с плъгини от Джумла  1.0 но лесно може да се модифицират ако се обработва допълнително и $_MAMBOTS.

 

 
Ипотпал
За мен

Известен съм като "Тихомир Ипотпалиев (ипотпал)" и се занимавам със консултиране и чат пак като web designer. Изработвам сайтове на Joomla, както и темплейти за WordPress, Drupal. Любима музика - техно. Обожавам и пиша фентъзи и фантастика, както и чета много книги. Любими градове са ми София, Пловдив, Варна и Бургас. Убеждения - крайно десни.

Rss за Уеб дизайн и SEO
RSS канали - блог и новини
Блог
Ипотпал новини
Статистика
Посетители днес: 73
Посетители общо: 69683
Прегледани страници:: 165010
От начална дата: 06-07-2010
Случайна статия
Вход в сайта