Back to top

Autore Topic: Hello World - Joomla 256 - Problema Paginazione lato Site  (Letto 6686 volte)

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Chi la dura la vince...
Mi piego ma non mi spezzo...
Sto impiegando un sacco di tempo ma ce la faro'...

Filosofia e proverbi a parte  :D ... ho il seguente dilemma:
Perche' la paginazione funziona bene lato amministarzione mentre lato sito fa dei capricci..?

Il codice tratto da qui "opportunamente" modificato per creare il mio hello world e' il seguente


Codice: [Seleziona]

<?php

//     helloworld/view.html.php

defined('_JEXEC') or die('Restricted access');
jimport'joomla.application.component.view' );
jimport'joomla.html.pagination' );

class 
HelloworldViewHelloworld extends JView
{
    function 
display($tpl null)
    {
        
// Add required JS
        
JHtml::_('behavior.framework');
        
$this->pagination $this->get('Pagination');
        
$this->items $this->get('Items');
        
parent::display($tpl);
    }
}


Codice: [Seleziona]
<?php

// tmpl/default.php

defined'_JEXEC' ) or die( 'Restricted access' );
$option JRequest::getCmd('option');
$view JRequest::getCmd('view');
?>
[code]
<form action="index.php" method="post" name="siteForm" id="siteForm">
    <input type="hidden" name="option" value="<?=$option?>" />
    <input type="hidden" name="view" value="<?=$view?>" />
    <div id="editcell">   
        <table class="adminlist">
            <thead>
                <tr>
                    <th>SALUTO</th>
                    <th>LINGUA</th>
                    <th>ID</th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <td colspan="3">
                        <?=$this->pagination->getListFooter()?>
                    </td>
                </tr>
            </tfoot>
            <tbody>
<?
        $k = 0;
        foreach ($this->items as &$row)
        {
?>
                <tr class="row<?=$k?>">
                    <td><?=$row->saluto?></td>
                    <td><?=$row->lingua?></td>
                    <td><?=$row->id?></td>
                </tr>
<?
            $k = 1 - $k;
        }
?>
            </tbody>
        </table>
    </div>
</form>

L'unica modifica che ho fatto rispetto al lato admin e' questa

ADMIN
<form action="index.php" method="post" name="adminForm" id="adminForm">

SITE
<form action="index.php" method="post" name="siteForm" id="siteForm">

Nel frontend i dati vengono correttamente visualizzati in tabella (layout a parte).
Se come prima operazione uso la funzione visualizza n x. record per pagina, successivamente quando mi sposto di pagina con successivo, fine oppure pagina 1 etc... non vengono visualizzati i dati relativi alla pagina richiesta ma (siccome non ho il file index.html) visualizzo una pagina bianca con la scritta HOME.

Ho come la sensazione che qualche variabile andasse persa se faccio determinate operazioni prima ma non riesco a capire come fare il debug o cosa sto sbagliando. E poi lato admin funziona bene.

Qualcuno mi da qualche dritta? Cosa sto sbagliando?

Grazie
  e_gigi

template
beez_20 lato site
bluestork lato admin

Localhost
Vista
Joomla (2.5.6)
Apache (2.2.11)
MySQL (5.1.23)
PHP (5.3.5)
« Ultima modifica: 01 Nov 2012, 18:43:27 da e_gigi »

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #1 il: 02 Nov 2012, 09:29:43 »
Il problema non è nella view ma nel model... la view non fa nulla recupera solo i dati dal model e li visualizza, la paginazione è legata al model di quella viusalizzazione. molto probailmente non hai settao adeguatamente la funzione  populateState del model che imposta anche i parametri di paginazione come qui ad esempio

Codice: [Seleziona]
$app = JFactory::getApplication();

// List state information
$value = JRequest::getUInt('limit', $app->getCfg('list_limit', 0));
$this->setState('list.limit', $value);

$value = JRequest::getUInt('limitstart', 0);
$this->setState('list.start', $value);

Questo è il model del com_content per gli articoli.

Dagli un occhio ciao
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #2 il: 02 Nov 2012, 11:11:20 »
Ciao, per completezza e perche' ho ancora dubbi, riporto il model:

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die();
jimport'joomla.application.component.modellist' );
class 
HelloworldModelHelloworld extends JModelList
{
    function 
getListQuery()
    {
        
$db JFactory::getDBO();
        
$query $db->getQuery(true);
        
$query->select('id, saluto, lingua');
        
$query->from('#__hello_world');
        return 
$query;
    }
}

Con questi files ho il seguente comportamento:
  • Carico il com_helloworld e visualizza tutti i dati dal db (13 record) ..ok
  • Scelgo di visaulizzare 5 record per pagina.. ok
  • Mi sposto in pagina 2 ma esce la pagina bianca con scritto HOME ..nok
  • Ricarico il componente com_helloworld e ora visualizza 5 record ..ok
  • Mi sposto in pagina 2 e funziona correttamente ..ok
A me sembra strano questo comportamento ma di sicuro faccio qualche sciocchezza.
Carneade pls
   e_gigi

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #3 il: 02 Nov 2012, 11:24:43 »
ok vuoi usare anche la select che ti imposta la paginazione?

allora come ti dicevo devi impostare la funzione populateState nel model, guardati un model di uno dei componenti predefiniti che capisci come funziona
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #4 il: 02 Nov 2012, 11:51:23 »
Ok grazie, sbircero' qualche com predefdinito...

Cmunque lo stesso codice lato admin funziona perfettamente... boh!  ::)

e_gigi

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #5 il: 02 Nov 2012, 11:55:05 »
avevo sparato na cagata, jmodel admin estende jform quindi non c'entra nulla.

comunque devi popolare per bene il model come ti avevo detto prima
« Ultima modifica: 02 Nov 2012, 12:44:57 da simone83 »
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #6 il: 02 Nov 2012, 17:00:10 »
non ti preoccupare, per me tutto fa scuola..!
Bisogna sporcarsi le mani (hihih) altrimenti non si impara...

Comunque nell'esempio che sto seguendo:

- lato Admin il model eredita la JModelList senza overriding della populateState
- ho provato comunque ad estenderla lato Site ma diciamo che non sono capace... :(

La cosa che pero' secondo me e' strana e' che:

la prima esecuzione del componente genera il seguente codice per spostarsi  ad inizio, fine, pagina 1, 2 etc
la seconda esecuzione del componente genera
Puo' essere utile capire chi genera questo codice per risolvere il mio "dramma"?

Quale classe / file se ne occupa?

Grazie
  e_gigi




mau_develop

  • Visitatore
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #7 il: 02 Nov 2012, 17:22:12 »
- lato Admin il model eredita la JModelList senza overriding della populateState
----------------------------------------------------------------------------------------------------------
no.
JModel è stato esteso con 3 classi, JModelForm, JModelItem e JModelList, già dal nome capisci le peculiarità per cui viene usato uno piuttosto che l'altro

Non tutto ciò che sta in admin è anche nel frontend per cui devi andare a vedere dove richiedere quel metodo.
Se tu usassi un ide di sviluppo come netbeans, eclipse etc... hai già un aiuto con l'autocompile e documentor dal quale capisci subito se qualcosa ce l'hai o se devi importarla.

Hai dato alla tua classe lo stesso nome che hai usato nel backend quindi probabilmente qualcosa del backend come lo state e quindi l'auth e quindi la paginazione etc dovresti ereditarla... ma non la paginazione bell'e che pronta ma i metodi per costruirla.

Uno dei principali motivi dei malfunzionamenti di ciò che sviluppi è legato al naming, su di esso Joomla costruisce numerosi "automatismi" per cui helloworld o helloworlds non è proprio la stessa cosa.
Solitamente il plurale viene usato per l'handling delle liste e il singolare per gli item.

Un gran numero di tutorial online sono ne più ne meno che fantasie di chi crede di aver capito qualcosa solo perchè funziona... anche sulle stesse docs a volte capita.
prova ad esempio a cercare un tutorial sul published / unpublished, ne trovi 500 ma inutili.... è bastato un post di Dexter per capire che c'era da approfittare di un vantaggio dell'mvc che nessuno considera... la possibilità di usare il model usato per l'edit insieme a quello per le liste.... dopo tre giorni passati a capire leggendo di tutto e di più (capire, ... non riuscire a fare..) sono bastati 30 secondi di un post sensato.
Se poi ti manca la base dell'oop è moooolto difficile capire qualcosa.

Imparare meccanicamente poteva bastare per la 1.5 che è stata "immutata" per moltissimo tempo.... con la 2.5 le cose cambiano rapidamente e riesci a risolvere velocemente solo se sai "il principio" ... se lavori a memoria è un disastro.

M.

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #8 il: 04 Nov 2012, 22:37:30 »
Citazione
JModel è stato esteso con 3 classi, JModelForm, JModelItem e JModelList, già dal nome capisci le peculiarità per cui viene usato uno piuttosto che l'altro

ok e' vero:
              class JModelList   extends JModel
abstract class JModelItem extends JModel
abstract class JModelForm extends JModel

la JModelList dovrebbe aggiungere (estendere) alla JModel, funzionalita' relative alle List(e).
Leggeremente diverso dovrebbe essere per le classi abstract..!

Citazione
Non tutto ciò che sta in admin è anche nel frontend per cui devi andare a vedere dove richiedere quel metodo.
Se tu usassi un ide di sviluppo come netbeans, eclipse etc... hai già un aiuto con l'autocompile e documentor dal quale capisci subito se qualcosa ce l'hai o se devi importarla.

Sto ancora spulciando le classi e asap andro' a vedermi il funzionamento di qualche com_predefinito.
Anche se ancora non ci sono arrivato ho avuto modo di configurare xampp per il debug tramite netbeans... grazie per la dritta... ho avuto modo di avvicinarmi all'IDE  ;)

Citazione
Hai dato alla tua classe lo stesso nome che hai usato nel backend quindi probabilmente qualcosa del backend come lo state e quindi l'auth e quindi la paginazione etc dovresti ereditarla... ma non la paginazione bell'e che pronta ma i metodi per costruirla.

Ho eliminato il backend ma faccio le stesse chiamate...
Sto cercando di studiarmi meglio le chiamate alle classi e capire cosa avviene realmente step by step


Citazione
Uno dei principali motivi dei malfunzionamenti di ciò che sviluppi è legato al naming, su di esso Joomla costruisce numerosi "automatismi" per cui helloworld o helloworlds non è proprio la stessa cosa.
Solitamente il plurale viene usato per l'handling delle liste e il singolare per gli item.

Sembra tutto corretto... boh


Per il resto...
ma esiste un tutorial on line fatto bene o e' il caso di passare ad un buon libro?


Many thanks
  e_gigi

mau_develop

  • Visitatore
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #9 il: 05 Nov 2012, 08:35:43 »
ma conosci bene la programmazione a oggetti?
hai mai provato a scrivere anche qualcosa di semplice con due o tre classi che si estendono?
se prima non capisci questo modo di scrivere difficilmente riesci a dare un senso a ciò che fa joomla.

M.

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #10 il: 05 Nov 2012, 17:54:47 »
Teoricamente, conosco i concetti base delle classi.

La pratica diciamo che la sto facendo con Joomla!

I miei post sono da newbie, lo so,
ma penso che potrebberero tornare utili anche a qualcun altro se mai un giorno postero' la soluzione....

e_gigi

mau_develop

  • Visitatore
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #11 il: 05 Nov 2012, 18:59:14 »
non è il fatto del principiante o meno... è che se capisci bene il funzionamento della programmazione ad oggetti non ci metti moltissimo a capire joomla.

secondo me ti conviene passare qualche giorno a studiare un tutorial e provare a fare qualche script semplice in php ..quando vedi che non hai difficoltà, torni su joomla e quel tutorial lo scrivi tu.

non puoi scornarti con classi statiche estensioni classi private pubblich protette etc... senza capire che vuol dire e cosa ti limitano... non vai aldilà del com hello.... ed è triste... o inizi a scrivere codice assurdo purchè funzioni....

M.

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #12 il: 06 Nov 2012, 10:39:24 »
La butto la xche mi sembra pressoche impossibile capire quale sia il tuo problema vedendo solo una porzione di codice, ma vedo che hai i sef abilitati e suppongo che non hai un file di route impostato, prova a disabilitare completamente i sef e riprovare.
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline e_gigi

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Hello World - Joomla 256 - Problema Paginazione lato Site
« Risposta #13 il: 09 Nov 2012, 22:54:00 »
Rieccomi  ;D con la soluzione...

Ricapitolando:

- Ho adattato un tutorial helloworld sviluppato nel backend, nel frontend

- Funzionava tutto correttamente tranne per la chiamata a getListFooter()

- In particolare i link generati dalla precedente chiamata erano in questo modo:
  http://localhost/Joomla256/index.php/start=5
  mentre dovevano essere cosi':
  http://localhost/Joomla256/index.php/helloworld?start=5

- Ho risolto modificando il template in questo modo:

Codice: [Seleziona]
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm">
- Quando non funzionava era cosi'
Codice: [Seleziona]
<form action="index.php" method="post" name="adminForm" id="adminForm">

Trovata la soluzione... si passa all'approfondimento ;)



 



Web Design Bolzano Kreatif