2010-07-17 17 views

risposta

5

Se si desidera che la sovrascrittura del modello non dipenda dalla posizione del menu, il metodo standard di joomla di assegnare un modello diverso a un menu non funzionerà. Dovrai sporcarti le mani e scrivere un codice personalizzato. Dovrai utilizzare article_id come trigger per il cambio di modello.

Ho fatto qualcosa del genere al lavoro ma non ricordo ora come esattamente questo è stato raggiunto. Inserirò il mio codice qui non appena lo troverò.

EDIT: Trovato il codice :)

È necessario modificare il file /includes/application.php, in particolare il metodo getTemplate(). Al termine di questo metodo, poco prima:

// Fallback template 
if (!file_exists(JPATH_THEMES.DS.$template.DS.'index.php')) { 
    $template = 'rhuk_milkyway'; 
} 

puoi aggiungere la tua condizione per l'applicazione di un modello personalizzato, in questo modo:

//CUSTOM TEMPLATE FOR THE ARTICLE 13 
if (JRequest::getVar('id')=='13' && JRequest::getVar('option')=='com_content') { 
    $template = $custom_template_name; 
} 

Questo verrà applicato il modello personalizzato il cui nome si trova all'interno del $ custom_template_name all'articolo con id = 13. È inoltre possibile utilizzarlo per applicare un modello diverso di componenti, come ho fatto con SimpleCaddy:

//TEMPLATE FOR SIMPLECADDY 
if (JRequest::getVar('option')=='com_caddy'){ 
    $template = 'shop'; 
} 
1

Si dovrebbe cercare di stare lontano dal disco di codifica nulla al modello se può essere evitato. Non sei sicuro del motivo per cui specifichi che l'articolo non è collegato da un menu. Il modo più semplice per farlo senza dover scrivere e codificare è creare un nuovo menu, quindi aggiungere una voce di menu che rimanda all'articolo per cui si desidera specificare il modello. Non è necessario posizionare il menu in un modulo, in modo che non venga mai visualizzato sul sito, ma verrà visualizzato nel menu di assegnazione nel gestore modelli.

È possibile farlo con singoli articoli, categorie, sezioni o anche componenti. Finché hai un link al menu per associare il modello a. Creo sempre un menu Solo amministratore per inserire i collegamenti necessari per eseguire il sito, ma non è necessario che gli utenti accedano.

1

Come ha detto Brent, evitare la tentazione di modificare il codice Joomla di base! Fare questo probabilmente ti impedirà di eseguire gli aggiornamenti di Joomla perché sai che interromperà le modifiche principali apportate.

Oltre alla tecnica "voce di menu nascosta" (che è utile ma può interrompere gli URL SEF in alcune situazioni), uno strumento utile è Chameleon. Questo ti permette di selezionare articoli/categorie/sezioni specifici (più cose come il tipo di browser, il gruppo di utenti, i componenti, qualunque cosa) e usarli per attivare un determinato modello.

1

Anche se questo è un vecchio post, ho pensato di condividere i miei pensieri: è possibile modificare facilmente il modello su un singolo articolo, implementando la funzione onAfterInitialize() in un plug-in di sistema. Non c'è bisogno di modificare il core Joomla.

Questo funziona per Joomla 1.5, ma dovrebbe funzionare anche in 2.5:

function onAfterInitialise(){ 
    if(true){ // f.ex. test for article ID or whatever 
    JRequest::setVar('template', 'beez'); // change template 
    } 
} 

Nelle versioni 3.x joomla, url-parametri vengono gestiti in modo diverso. Quanto segue è stato testato in joomla 3.4.8:

public function onAfterInitialise() 
{ 
    $app=JFactory::getApplication(); 
    if(true){ // f.ex. test for article ID or whatever 
    $app->input->set('template', 'beez3'); 
    } 
} 

più sulla scrittura di plugin per Joomla here

+0

Ho creare un plugin con il tuo codice, ma quando provo a verificare la presenza del componente corrente come questo '' '$ app-> input-> get ('opzione') == "com_content" '' 'non succede niente, potresti aiutarmi? – ivayloc

+0

Prova a verificare se la funzione plug-in è effettivamente in esecuzione, ad es. con print_r ($ app-> input); morire(); Qui vedrai anche quali parametri sono definiti nell'oggetto $ app-> input ... – jonasfh

Problemi correlati