Back to top

Autore Topic: Pagine con stili differenti senza utilizzare più templates  (Letto 2713 volte)

Offline Enocrazia

  • Esploratore
  • **
  • Post: 85
    • Mostra profilo
 :o
Forse è una richiesta banale.. ma non trovo risposte sul forum
L'obiettivo è ottenere pagine ognuna con uno sfondo in body ( per la precisione un'immagine) differente.
Prima di oggi lo ottenevo creando una copia del template originale e linkando la sezione al singolo template, che risultatva uguale a tutte le copie fuorché per lo sfondo (o per altre caratteristiche).

C'è un modo in joomla 2.5 per evitare (probabilmente si) il template duplicato relazionando la pagina ad una classe specifica del css? (quella che definisce lo sfondo diverso)


grazie!

Offline bart88

  • Nuovo arrivato
  • *
  • Post: 22
  • Sesso: Maschio
    • Mostra profilo
Re:Pagine con stili differenti senza utilizzare più templates
« Risposta #1 il: 04 Lug 2012, 12:40:02 »
Si, certo gli stili in joomla 2.5 sono fatti apposta per avere questa funzione, ad ogni stile puoi associare una voce di menu del tuo sito in modo che appaia solo in quella pagina. Faccio un esempio:

1 - creo il mio template con le regole comuni in un css e poi due css separati uno lo chiamo red.css in cui imposto lo sfondo rosso e uno lo chiamo green.css in cui imposto lo sfondo verde

2 - nel file templateDetails.xml aggiungo queste righe:
Codice: [Seleziona]
    <config>
        <fields name="params">
            <fieldset name="advanced">
                <field name="templatecolor" type="list" default="red"
                    label="Sfondo"
                    description="Colore di sfondo"
                    filter="word"
                >

                    <option value="red">Rosso</option>
                    <option value="green">Verde</option>

                </field>


            </fieldset>
        </fields>
    </config>

il significato è il seguente:
Codice: [Seleziona]
<config>...</config> indica a joomla che qui iniziano le configurazioni del template
Codice: [Seleziona]
<fields name="params">...</fields> indica che qui iniziano dei parametri impostabili da backend
Codice: [Seleziona]
<fieldset name="advanced">...</fieldset> quando si apre uno stile, i parametri che inseriremo verrano elencati nelle opzioni avanzate dello stile
Codice: [Seleziona]
<field name="templatecolor" type="list" default="red" label="Sfondo" description="Colore di sfondo" filter="word">...</field>  questa è la righa che ti permette di creare un menu a tendina nel backend per scegliere diverse opzioni, il name è il codice tramite il quale richiameremo poi nel template l'opzione scelta, il type="list" indica il tipo di menu o scelta da usare nel backend, default="red" indica il parametro di default, label è il nome che apparirà nel backend affianco al menu a tendina, description è il testo che appare al passaggio del mouse.
Codice: [Seleziona]
<option value="red">Rosso</option> e
Codice: [Seleziona]
<option value="green">Verde</option> sono le voci del menu a tendina il value è il valore restituito al template mentre la scritta tra i due tag è quello che apparirà nel backend.

3 - Fatte queste modifiche non resta che configurare il template per leggere questi parametri:
Codice: [Seleziona]
$color = $this->params->get('templatecolor');
$doc->addStyleSheet('templates/'.$this->template.'/css/'.htmlspecialchars($color).'.css');
la variabile $color contiene il valore che viene passato tramite lo stile può essere red o green
la stringa sottostante inserisce il css relativo cioè green.css o red.css

4 - Da backend duplica lo stile della pagina in una imposti il colore di sfondo verde e lo assegni ad una voce di menu, all'altro gli assegni colore rosso e l'assegni ad un altra voce di menu, il risultato è che nelle pagine relative una avrà sfondo rosso e l'altra verde.

Spero di essere stato il più chiaro possibile purtroppo non riesco a spiegarlo in termini meno tecnici, però sono sempre disponibile in caso di problemi a chiarire ulteriormente
Lo scoprire consiste nel vedere ciò che tutti hanno visto e nel pensare ciò che nessuno ha pensato.

Offline tonicopi

  • Global Moderator
  • Instancabile
  • ********
  • Post: 12790
  • Sesso: Maschio
    • Mostra profilo
Re:Pagine con stili differenti senza utilizzare più templates
« Risposta #2 il: 05 Lug 2012, 14:28:27 »
Ciao bart88 e grazie dell'impeccabile e chiarissimo intervento  :)

Prendendo spunto dalla richiesta di Enocrazia ho pubblicato questa recensione:
http://www.joomla.it/articoli-community-16-e-17-tab/5647-come-impostare-background-diversi-in-joomla-25.html
di un modulo che consente di gestire gli sfondi senza avventurarsi in modifiche del template  ;)
joomlacsszengarden.com = il giardino dei css di Joomla!
L'attesa del piacere è essa stessa... piacere!

Offline maicolstaip

  • Global Moderator
  • Instancabile
  • ********
  • Post: 17623
  • Sesso: Maschio
    • Mostra profilo
Re:Pagine con stili differenti senza utilizzare più templates
« Risposta #3 il: 05 Lug 2012, 14:55:52 »
Bravo bart88!
Non si risponde a PM tecnici. Postate sul forum. Grazie.

Offline boiccu

  • Esploratore
  • **
  • Post: 99
    • Mostra profilo
Re:Pagine con stili differenti senza utilizzare più templates
« Risposta #4 il: 19 Feb 2013, 12:38:37 »
Ho seguito il tuo esempio inserendo nel file index.php le seguenti righe di codice:
<?php
$color = $this->params->get('templatecolor');
$doc->addStyleSheet('templates/'.$this->template.'/css/'.htmlspecialchars($color).'.css');
?>
ma ottengo il seguente messaggio di errore:
Fatal error:  Call to a member function addStyleSheet() on a non-object in C:\xampp\htdocs\nuovosito\templates\accessible\index.php on line 128

mi potresti aiutare

Offline bart88

  • Nuovo arrivato
  • *
  • Post: 22
  • Sesso: Maschio
    • Mostra profilo
Re:Pagine con stili differenti senza utilizzare più templates
« Risposta #5 il: 19 Feb 2013, 13:49:20 »
Mi sono accorto solo ora di aver dimenticato un pezzo di codice che probabilmente genera il tuo problema, prova a correggere in questo modo:
Codice: [Seleziona]
<?php
$doc 
JFactory::getDocument();
$color $this->params->get('templatecolor');
$doc->addStyleSheet('templates/'.$this->template.'/css/'.htmlspecialchars($color).'.css');
?>



l'errore indica chiaramente che la funzione addStyleSheet non è stata usata in un oggetto la prima riga del codice indica a joomla che la variabile doc in realtà è un riferimento all'oggetto Documento che gestisce in joomla varia opzioni compreso l'inserimento dei css.


Non l'ho indicata nel primo post perchè solitamente molti template hanno questa riga già inserita al loro interno solitamente nelle prime righe del file index.php
« Ultima modifica: 19 Feb 2013, 15:01:25 da bart88 »
Lo scoprire consiste nel vedere ciò che tutti hanno visto e nel pensare ciò che nessuno ha pensato.

 



Web Design Bolzano Kreatif