Joomla.it Forum
Non solo Joomla... => Sviluppo => : mpigio 28 Dec 2011, 10:14:29
-
Ciao a tutti, ho un problema con un componente che ho sviluppato, nelle liste che si creano la paginazione funziona alla perfezione sul sito di sviluppo mentre in produzione vedo la prima pagina dopodichè la lista diventa vuota.
Il numero delle pagine è corretto ma non è possibile vederne il contenuto.
Oltretutto dopo aver cliccato su una pagina dopo la prima tutto rimane vuoto anche tornando in cima alla lista.
Lo stesso accade usando i filtri di ricerca.
Mi viene da pensare che un altro componente installato sul sito di produzione faccia casini, ma accade soltanto con il mio componente... come posso trovare e risolvere l'errore?
Grazie a tutti
-
dovresti essere più specifico...
postare un pò di codice...
non possiamo aiutarti così...
-
Posto un po' di codice ed ho scoperto che il problema è dovuto ai filtri di ricerca, nel senso che la paginazione funziona se disabilito i due filtri, campo di testo libero e "categoria/area".
MODEL
function _buildWhere(){
$app =& JFactory::getApplication();
$db =& JFactory::getDBO();
$search = JString::strtolower($app->getUserStateFromRequest('com_miocom.sectors.search' ,'search', '', 'string'));
$area_search = JString::strtolower($app->getUserStateFromRequest('com_miocom.sectors.area_search' ,'area_search', '', 'int'));
$where = array();
if ($search)
$where[] = ' LOWER (name) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false );
if($area_search){
$where[] = ' area_id = '.$area_search;}
if (count($where)) $where = ' AND '.implode(' AND ', $where);
else $where = '';
$this->_where .= $where;
return $where;
}
qui se uso la paginazione senza nessun filtro, la query diventa:
SELECT * FROM #__miocom_sectors WHERE area_id = ORDER BY `name` DESC
viene passato il filtro if($area_search){ anche se la stringa è vuota
Se invece inserisco una ricerca x testo libero ho:
SELECT * FROM #__miocom_sectors WHERE LOWER (name) LIKE '%zamba%' AND area_id = ORDER BY `name` DESC
sulla view ho:
$app =& JFactory::getApplication();
$search = $app->getUserStateFromRequest("com_miocom.sectors.search",'search','','string');
$search = JString::strtolower( $search );
$lists['search']= $search;
$noopt[] = JHTML::_('select.option', '0', ' - '.JText::_('Select').' - ');
$areas = array_merge($noopt, imiocomHelper::getAreasForSearch());
$area_search = $app->getUserStateFromRequest('com_miocom.sectors.area_search', 'area_search','', 'integer');
$available_areas = JHTML::_('select.genericlist', $areas, 'area_search', 'class="inputbox" onchange="document.adminForm.submit();"', 'value', 'text', $area_search);
$lists['available_areas']= $available_areas;
nel template:
<td nowrap="nowrap">
<?php echo JText::_( 'Filter' ); ?>:
<input type="text" name="search" id="search" value="<?php echo $this->lists['search'];?>" class="text_area" onchange="document.adminForm.submit();" />
<button onclick="this.form.submit();"><?php echo JText::_( 'Go' ); ?></button>
<button onclick="document.getElementById('search').value='';this.form.getElementById('filter_state').value='';this.form.submit();"><?php echo JText::_( 'Reset' ); ?></button>
</td>
<td nowrap="nowrap" style="text-align:right;">
<?php echo JText::_('Area').' '.$this->lists['available_areas'];?>
</td>
Grazie ancora
PS: I settori si trovano all'interno delle aree, quindi posso filtrare i settori x mostrare quelli di una singola area
-
scusa ma dov'è la paginazione nel tuo script? ..il limit...
se dall'userstatefromrequest prendi il search vedi il search
..guarda verso la fine quando parla di costruire la pagination da una query:
http://docs.joomla.org/Using_JPagination_in_your_component
M.
-
C'è l'ho nel costruttore:
function __construct() {
parent::__construct();
global $mainframe, $option;
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $mainframe->getUserStateFromRequest($option.'limitstart', 'limitstart', 0, 'int');
$limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
$this->setState('limit', $limit);
$this->setState('limitstart', $limitstart);
}
Non ho riportato tutto perchè penso che l'errore sia nella funzione _buildWhere
Considera che questo codice funziona alla perfezione sul server di sviluppo.
L'unica differenza è che in produzione si entra nei due if
if ($search)
e
if($area_search){
anche se non ho impostato nessuna ricerca o filtro
Grazie
-
Visto che il problema è solo sul server di produzione potrebbe essere causato dal fatto che il server sia windows riadattato x lavorare in PHP?
Nessuno può aiutarmi?