Joomla.it Forum
Non solo Joomla... => Sviluppo => : mpigio 24 May 2013, 12:31:55
-
Ho realizzato un componente x Joomla 2.5 collegato a 3 differenti tabelle.
Sulla prima cliccando sui bottoni di pubblica/nascondi di ogni item e quelli globali della Toolbar funziona tutto e riesco a vedere che passa per la funzione populateState del model relativo.
Nelle altre due tabelle, nelle relitive pagine con le liste degli item, questo non accade ed ho notato che entra nella funzione populateState soltanto al primo accesso e non dopo aver cliccato su pubblica/nascondi e credo che per questo non riesca a cambiare lo stato degli item.
Come posso rintracciare il problema? Da dove si richiama quel metodo?
Ho verificato che i file sono identici a meno dei nomi che ovviamente cambiano sia nei file che all'interno degli stessi.
Spero possiate aiutarmi e da tempo che ci sbatto la testa senza risolvere.
Grazie a tutti
EDIT:
Dimenticavo che anche passando con il mouse sopra ai bottoni della toolbar dopo aver premuto pubblica o nascondi si ottiene il link: index.php# al posto di index.php?option=com_miocom&view=miaview
Questo il listato del model
....
protected function populateState($ordering = null, $direction = null)
{
// Load the filter state.
$search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
$this->setState('filter.search', $search);
$published = $this->getUserStateFromRequest($this->context.'.filter.published', 'filter_published', '');
$this->setState('filter.published', $published);
// List state information.
parent::populateState($ordering, $direction);
}
e del view.html.php
....
protected function addToolBar()
{
JToolBarHelper::title( JText::_( 'COM_MIOCOM_USERS' ), 'generic.png' );
JToolBarHelper::custom('users.sendmsg', 'sendmsg', '', 'COM_MIOCOM_MSG_SEND', true);
JToolBarHelper::divider();
JToolBarHelper::addNewX('user.add');
JToolBarHelper::publishList('users.publish');
JToolBarHelper::unpublishList('users.unpublish');
JToolBarHelper::editListX('user.edit');
JToolBarHelper::deleteList( JText::_( 'COM_MIOCOM_CONFIRM_DELETE' ), 'users.delete' );
JToolBarHelper::divider();
JToolBarHelper::preferences('com_miocom', '400');
}
-
Nessuno può aiutarmi?
-
intendi pubblica sospendi credo non nascondi, comunque populate state non centra nulla, publish e unpublish delle liste richiamano una funzione della classe JControllerAdmin a meno che tu non li voglia riscrivere nel tuo controller, qui viene richiamata la funzione del JModelAdmin che a sua volta ricchiama l'oggetto jtable dell'elemento che forma la lista
-
Infatti non le ho riscritte, usa quindi quelle del framework di joomla, allora dove posso ricercare il problema?
Il problema potrebbe essere sul db? Ho inserito un campo 'published' tinyint(1) Null: No Predefinito: 0
Come su un'altra tabella in cui mi funziona! Non so più dove cercare!!!
-
ad esempio io non uso published ma state, quindi mi riscrivo la funzione JTable publish nelle mie class JTable.
Molto probabilmente a te non arriva nel controller giusto prova a riscrivere la funzione publish nel controller dove pensi che dovrebbe andare e mettici un die
-
Bene! Grazie al tuo suggerimento ho scoperto che riscrivendo la funziona publish nel controller la raggiungo e mi "saluta" :)
Ho inserito:
function publish()
{
echo 'ciao';
die;
}
Posso evitare di riscrivere qui la funzione di pubblicazione e trovare l'inghippo o mi conviene fare la query di update in questo override?
Grazie ancora
-
se guardi come funziona sulla 3.1 capisci subito cosa fare e molto probabilmente riesci ad usare gli stessi metodi visto che la platform dovrebbe essere la stessa.
attenzione che non usa il model che ti aspetteresti... ma l'altro... almeno sulla 3.1
nel controller si usa il proxi al model, probabilmente è quello che non funziona.
-
prova a postare il codice del tuo controller, forse c'e qualche impostazione di abse che non va
-
Ecco il codice:
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controlleradmin library
jimport('joomla.application.component.controlleradmin');
/**
* About Controller
*/
class LifeMsgControllerGroups extends JController {
function __construct( $config = array() )
{
parent::__construct( $config );
}
public function getModel($name = 'Group', $prefix = 'LifeMsgModel')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
function publish()
{
echo 'ciao';
die;
}
}
?>
-
bene, publish userà un metodo del model per cambiare lo stato
il metodo del model userà la table per farlo e restituirà un true o false
anche il metodo del model ritornerà un true o false al controller che provvederà al redirect alla vista lista oppure alla stessa con messaggio di errore
oppure se usi ajax puoi semplicemente ucciderla dopo la risposta
se ti serve usare metodi di diversi model puoi farlo con un getModel, di defaul hai il proxi getModel($name = 'Group'
-
Ah l'ereditarieta delle classi....
ecco il tuo errore,
jimport('joomla.application.component.controlleradmin');
/**
* About Controller
*/
class LifeMsgControllerGroups extends JController {
Se dai uno sguardo alla cartella libraries joomla application component vedrai la classe JController, prova a ceracare il metodo publish, bene non c'e. questo perche si trova in JControllerAdmin che estende jController quindi tu estendendo JController non hai un metodo publish impostato. Se guardi il tuo codice vedrai che avevi giustamente incluso controller admin, quindi basta che fai
class LifeMsgControllerGroups extends JControllerAdmin e dovrebbe andare
-
:) che falco
-
:) hai visto che occhio clinico
-
Grazie a tutti in particolare all'occhio clinico di simone83, problema RISOLTO!!!