Подбрано за Уеб дизайн, SEO оптимизация и Joomla
- How to "kill" plugin in Joomla?
- How to remove ...?
- Online craft store offering an abundance of craft supplies from hundreds of specialty and discount suppliers
- Използване на външни шрифтове с гугъл
- Css text shadow for all browsers (IE,Mozilla,Opera) in text - 3D typography for joomla
- Браузер независим css2 textshadow в Joomla - Opera, Mozilla, Internet Explorer
- INDONESIA PANCEN HOUYE - SEO състезание в Индонезия
- Влияние на IP и DNS върху ранжиране на резултатите в серпа
- Сео трикове за професионалисти - обратен пагинатор
- Norway and Somalia with new domains
How to "kill" plugin in Joomla?
( Оценка ) от ( 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
За да изтествам плъгина съм предвидил и тази статия да няма коментарна система.

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

