Back to top

Autore Topic: $this->countModules($myVar)  (Letto 3902 volte)

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
$this->countModules($myVar)
« il: 06 Apr 2012, 19:00:12 »
Sto facendo qualche prova di sviluppo template.
Il problema è questo:

Vorrei includere il comando $this->countModules($myVar)
dentro ad una funzione ad esempio:
Codice: [Seleziona]
function get_mod($name) {
    $t = is_mod($name);
    if ($t) return $this->countModules($t);
    return 0;
}
ma ottengo questo errore:

Fatal error:  Using $this when not in object context in...

Andando con il debugger ho visto che nel contesto del template $this è un oggetto di tipo JDocumentHTML, a questo punto alcune domande:

Come faccio ad inserire metodi di $this dentro a mie funzioni?
Oppure, come faccio ad aggiungere miei metodi a JDocumentHTML?
Esiste un altro sistema per aggirare l'ostacolo?

Potrei ad esempio fare una funzione di questo tipo:
Codice: [Seleziona]
function get_mod($name, $myThis) {
     $t = is_mod($name);
     if ($t) return $myThis->countModules($t);
     return 0;
 }

e poi chiamare:
Codice: [Seleziona]
get_mod("position-1", $this);
Ma è un po' bruttino.

Grazie a tutti
« Ultima modifica: 06 Apr 2012, 19:05:28 da 56francesco »

mau_develop

  • Visitatore
Re:$this->countModules($myVar)
« Risposta #1 il: 06 Apr 2012, 19:28:13 »
ummhh... mi sa che nn conosci la programmazione oop ....

comunque... dove sta quella funzione? ...in che file?

M.

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #2 il: 07 Apr 2012, 10:07:21 »
Mah, non direi, con la oop mi arrangio con molti linguaggi di programmazione.

Piuttosto non conosco bene (ancora) la piattaforma Joomla. Non so in che contesto vengono caricati i template.

Se vai su /templates/beez_20/index.php trovi pezzi di codice di questo tipo:

<?php if ($this->countModules('position-12')): ?>
    <div id="top"><jdoc:include type="modules" name="position-12"   />
    </div>
<?php endif; ?>

Questo suggerisce che questo codice si trova all'interno di un oggetto e con il debugger ho scoperto che è di tipo JDocumentHTML.

Da li veniva la mia domanda su come chiamare $this->countModules('position-12') da dentro una funzione, poco male ho scoperto che posso risolvere con qualche trucco, ma siccome siamo in una piattaforma opensource, mi piaceva scrivere qualcosa di pulito.

Devo anche dire che sono anche scarso di PHP e quindo non capisco come viene gestito il codice del template, mi stupisce di essere all'interno di un oggetto.

Ciao


mau_develop

  • Visitatore
Re:$this->countModules($myVar)
« Risposta #3 il: 07 Apr 2012, 10:55:17 »
oop mi arrangio con molti linguaggi di programmazione.
-----------------------------------------------------------------------------
..quindi sai cos'è $this, ... come fai a proporre qs soluzione?

function get_mod($name, $myThis) {
     $t = is_mod($name);
     if ($t) return $myThis->countModules($t);
     return 0;
 }

<?php if ($this->countModules('position-12')): ?>
-------------------------------------------------------------------
countModules è l'analogo di count per gli array. Se in quella posizione non ci sono moduli nella posizione "position-12" il risultato ovviamente sarà 0.
0 inserito in un if equivale a false. Quindi se 0 finirai nell'else di quell'if oppure se manca non succederà nulla.

Da li veniva la mia domanda su come chiamare $this->countModules('position-12') da dentro una funzione, poco male ho scoperto che posso risolvere con qualche trucco, ma siccome siamo in una piattaforma opensource, mi piaceva scrivere qualcosa di pulito.
---------------------------------------------------------------------------------------------------------------------------------------
siccome il fw ha una sua logica ed un suo pattern non è detto che ti trovi tutte le classi dove vuoi ma dove il fw si aspetta tu faccia determinate "operazioni", anche se nel tuo caso non è questo il problema ma il fatto appunto che chiudi tutto in una funzione.


Vorrei includere il comando $this->countModules($myVar)
dentro ad una funzione ad esempio:

function get_mod($name) {
    $t = is_mod($name);
    if ($t) return $this->countModules($t);
    return 0;
}

cosa serve questa cosa? ... che cosa volevi fare? ti dico cosa leggo:
supponiamo che $name sia mod_pippo

passo mod_pippo come argomento
verifico sia un modulo (true/false)
se è un modulo $t=true else $t=false.

se $t è true ritorna il numero di moduli true

M.

http://wiki.joomla.it/index.php/Approfondimento_sui_moduli
« Ultima modifica: 07 Apr 2012, 10:57:49 da mau_develop »

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #4 il: 07 Apr 2012, 11:29:16 »
Allora partiamo dall'inizio.

Volevo fare un sistema di alias dei nomi delle posizioni in modo che se Joomla assegna un contenuto
alla 'position-0' e nel mio template la stessa posizione si chiama 'topsearch' potessi comunque visualizzarne il contenuto.

Quindi con qualcosa del tipo:

function get_mod($name, $myThis) {
     $t = is_mod($name);
     if ($t) return $myThis->countModules($t);
     return 0;
}

io ho una funzione di nome is_mod che mi fa la risoluzione dei nomi e restituisce il nome oppure una stringa nulla. Funziona, ma non è la strada giusta, nel frattempo ho trovato questa documentazione:

http://wiki.joomla.it/index.php/Approfondimento_sui_moduli

per cui posso fare più semplicemente:

<?php if($this->countModules('topsearch or position-0')) : ?>
  <div class="span-24 last">
     <jdoc:include type="modules" name="topsearch" style="none" />
      <jdoc:include type="modules" name="position-0" style="none" />
   </div>
<?php endif; ?>

Il che dimostra che i progettisti di Joomla hanno pensato anche a questo.

Cade tutto il mio ragionamento, resta il fatto che nel template sono dentro ad un oggetto, correndo dietro ai sorgenti ho trovato che il template viene caricato con le funzioni ob_start, ob_get_contents e ob_end_clean credo da li derivi lo scope di visibilità, farò qualche prova.

Ciao


mau_develop

  • Visitatore
Re:$this->countModules($myVar)
« Risposta #5 il: 07 Apr 2012, 11:34:43 »
Joomla assegna un contenuto alla 'position-0' e nel mio template la stessa posizione si chiama 'topsearch'
----------------------------------------------------------
... no, già quì non capisco.... cosa vuol dire "la stessa posizione" e come fai a definire che è la stessa di position-0?

o meglio puoi farlo staticamente (e avrebbe nessun senso) ma non dinamicamente

M.

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #6 il: 07 Apr 2012, 11:46:38 »
nel senso che nel template beez_20 la position-0 viene usata per contenere la il search, mentre io invece vorrei usare il nome topsearch che è più descrittivo, ma vorrei anche che il mio template funzionasse con i dati dimostrativi.

Di qui il desidero che la mia position sia reattiva ad enrambe i nomi.

mau_develop

  • Visitatore
Re:$this->countModules($myVar)
« Risposta #7 il: 07 Apr 2012, 11:51:22 »
quindi vai nell'xml di beez, sostituisci la tua pos con la sua o semplicemente l'aggiungi(che è meglio)  e poi in amministrazione assegni al tuo modulo la tua posizione

M.

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #8 il: 07 Apr 2012, 11:56:36 »
In realtà tutto questo serviva per non andare in amministrazione ad assegnare il modulo alla mia posizione, ma per fare in modo che chi carica il mio template con i dati dimostrativi standard potesse avere dei dati coerenti.

Comunque è una piccola cosa, un modo per esplorare Joomla. Soprattutto volevo crearmi un mio temlate che potesse essere facilmente modificato per varie esigenze.


Offline 56francesco

  • Fuori controllo
  • *
  • Post: 29585
  • Sesso: Maschio
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #9 il: 07 Apr 2012, 12:23:33 »
claudiodriussi ciao, mi chiedevo se quel tipo di istruzioni poi lavorano lato server e quindi appensantiscono il lavoro della macchina, che ne pensi?
te lo chiedo perchè stavo pensando di usare qualche marchingegno simile anche se per altri scopi ma non voglio inserire niente che appesantisca la macchina anzi.. togliere tutto ciò che può esser tolto
(uso XP perchè win98 non si installa) 
PS: non sono un dipendente dello sbonzor quindi è necessario un "per favore" alla richiesta e un "grazie" alla risposta, sempre! PPS: non scrivo mai per primo in MP, in caso contrario chiedimi una conferma, Grazie.

Offline claudiod

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #10 il: 07 Apr 2012, 20:43:57 »
non penso che appesantosca il lavoro in modo significativo se pensi a quante cose fa joomla per costruuire la pagina.
Poi i colli di bottiglia sono altri, il database e soprattutto il traffico internet.
Secondo me una sola immagine da 100k pesa molto più della costruzione di tutta la pagina.

Offline 56francesco

  • Fuori controllo
  • *
  • Post: 29585
  • Sesso: Maschio
    • Mostra profilo
Re:$this->countModules($myVar)
« Risposta #11 il: 07 Apr 2012, 20:45:35 »
ok grazie..
(uso XP perchè win98 non si installa) 
PS: non sono un dipendente dello sbonzor quindi è necessario un "per favore" alla richiesta e un "grazie" alla risposta, sempre! PPS: non scrivo mai per primo in MP, in caso contrario chiedimi una conferma, Grazie.

 



Web Design Bolzano Kreatif