2012-11-24 6 views
5

Ich benutze eine benutzerdefinierte Plugin-Erweiterung mit Joomla 2.5. Dieses Plug-in ist auf eine einzelne Seite meiner Website ausgerichtet. Aber aus irgendeinem Grund bemerkte ich, dass es die CSS-Datei auf jeder einzelnen Seite lädt.Joomla Plugin-Erweiterung lädt CSS-Datei auf jeder Seite

Der Code für die Plugin lädt diese CSS-Datei:

$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 

Ich nehme nicht an diesem gemeinsamen, aber ich bin über Plugins nicht sicher. Kann ich dafür sorgen, dass die Seite, die ich möchte, nur auf jede einzelne Seite angewendet wird? Irgendwelche Gedanken darüber, wie man dies debuggt, würde geschätzt werden.

Das Plugin druckt eine einfache Tabelle auf einer Artikelseite und verwendet die Plugin-Funktion onContentPrepare

+0

Was tut das Plugin? Zum Beispiel, wenn es auf eine bestimmte Klasse/ID abzielt, könnten Sie nach der Klasse/ID suchen und wenn es existiert, dann schließen Sie die CSS-Datei ein. –

Antwort

5

diese Schnipsel Verwenden Sie Ihr Problem zu verwalten:

1) Last CSS durch Überprüfung der aktiver Menüpunkt

$menu = &JSite::getMenu(); 
$menuItem = $menu->getActive(); 
$Itemid = $menuItem->id; 
if($Itemid!=1) 
{ 
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
} 

2) lädt CSS auf Komponente

if (JRequest::getCmd('option') == 'com_k2'){ 
     $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
} 

3) laden CSS nur in Startseite

<?php if(JRequest::getInt('Itemid') == $menu->getDefault()) { 
    $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
}?> 

4) CSS laden auf aktive Menü-ID

<?php 
$menuID = JSite::getMenu()->getActive()->id ; 
    if ($menuID == '6') 
    { 
    $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
    } 
?> 

5) CSS laden auf aktive Sprache:

$lang =& JFactory::getLanguage(); 
switch ($lang) { 
case 'en-gb': 
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
break; 
} 

6) Laden Sie CSS nach Benutzern

$user =& JFactory::getUser(); 
if($user->get('id')==0){ 
//user is logged in 
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
} 

7) laden CSS auf URL

$u =& JFactory::getURI(); 
if($u=="http://www.example.com/joomla/index.php?task=view&id=12&Itemid=29") 
{ 
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
} 
+0

Aha! # 1 tat es. Requisiten zu @Lodder, wie er in der Nähe war. Große Liste von Optionen BTW! Danke, – Tom

+0

Gracias Kumpel, froh, dass ich helfen konnte – Theodore

0

Versuchen Sie so etwas wie die Verwendung von folgenden:

$application = JFactory::getApplication(); 
$menu = $application->getMenu(); 
$item = $menu->getItem(1); 
if ($item == 1){ 
    $doc = JFactory::getDocument(); //Remove it you already have this line 
    $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css'); 
} 

Ändern Sie die Nummer „1“, was auch immer Menüpunkt wird die Seite gehört.

Bitte beachten Sie, dass ich dies nicht getestet habe, lassen Sie mich wissen, ob es funktioniert. Wenn nicht, werde ich sehen, was ich ausgraben kann.

+0

Schließen, danke. Dieser Code verhindert definitiv, dass er größtenteils geladen wird (seltsamerweise taucht er immer noch im Stammverzeichnis der Site auf). Ich spiele mit der Menü-ID herum, da es jetzt auch nicht auf der Seite funktioniert, mit der es funktionieren soll ... Seufzer. Ich werde mehr recherchieren, wenn 'getMenu' oder' getItem' tun, was sie sollen. – Tom

+0

Versuchte alles, ohne Glück. Versuchte 'getItems ('menutype', 'mymenu')' was zumindest etwas zurückgibt. 'getItem' nicht. Irgendwelche anderen Ideen? – Tom

0

Ich glaube nicht, dass Itemid innerhalb plugin wird funktionieren. Ich habe einen Vorschlag, dass Sie den CSS-Code in Vorlage index.php verschieben und überprüfen Sie die Artikel-ID-Bedingung, die es dort arbeiten wird.

0

Auf welches Ereignis reagiert das Plugin? In welcher Gruppe ist es? Für viele Ereignisse können Sie den $ -Kontext der Seite überprüfen. Wenn Sie wissen, dass nur auf einer bestimmten Seite geladen wird, verwenden Sie diese Kennungen.

z.B. Hier ist eine Zeile aus dem Paginierungs-Plugin:

if ($ params-> get ('show_item_navigation') & & ($ context == 'com_content.Artikel ') & & ($ view == 'Artikel')) {

oder diese von LoadModule-

$canProceed = $context == 'com_content.article'; 
    if (!$canProceed) { 
     return; 
    } 
+0

Die Veranstaltung ist: 'onContentPrepare' – Tom

+0

Richtig, so dass es auf jeder einzelnen Seite passiert. Also, was Sie tun möchten, ist ein if ($ context! = Was auch immer) {return;} schauen Sie sich einige der anderen Content-Plugins an, die Sie sehen, dass Sie im Grunde die URL überprüfen. – Elin

+0

Ich bin mir nicht sicher, ich verstehe, was der "was auch immer" Teil ist? Andere Plugins haben einige Sachen, wie du deine Antwort eingibst, aber ich bin mir nicht sicher, was sie bedeuten. Zum Beispiel loadmodule Ich habe keine Ahnung was 'com_content.article' ist. – Tom