Bonjour,
Voilà je suis en train de développer un petit composant pour la 1ère fois avec Joomla 1.6. J'avais déjà fait ça sous Joomla 1.5 il y a quelques temps. Il y a quand même des nouveautés qui changent pas mal les choses ! Heureusement pour m'aider j'ai lu l'article de Christophe Demko qui est paru dans le dernier PHPSolutions HS.
J'ai voulu aller un peu plus loin que ce qu'il explique et notamment ajouter dans l'admin de mon composant la fonction de tri sur les colonnes. Pour m'aider j'ai notamment regardé du côté du composant contacts fourni dans l'install de Joomla.
J'ai finalement réussi, mais une chose m'ennuie car j'ai été obligé d'ajouter quelque chose qui n'est pas présent dans le composant contacts, mais qui s'avère indispensable dans le mien pour que cela marche. Et je ne comprends pas vraiment pourquoi.
Dans le template de ma vue (views/courses/tmpl/default.php), j'ai bien mis les 2 champs cachés filter_order et filter_order_Dir qui permettent de transmettre les paramètres de tri. Mes différentes colonnes sont équipées du grid.sort avec pour chacune les paramètres $listDirn et $listOrder qui proviennent d'un state->get. Jusque là pas de différence avec com_contacts.
Par contre dans mon modèle (qui hérite de JModelList), dans ma fonction populateState, je suis obligé de rajouter les lignes suivantes :
Dans la fonction getListQuery je rajoute une clause order en récupérant le list.ordering et le list.direction avec un state->get
Pas de problème ça marche !
Sauf que dans le modèle de com_contacts, les lignes que j'ai indiquées ci-dessus je ne les trouve nulle part ! Et pourtant le tri marche. Alors que dans mon composant, sans ces lignes, ça ne marche pas.
Du coup, je me dis qu'il y a un truc qui m'échappe et je n'aime pas ça.
Dans le même ordre d'idée, il y a autre chose que je suis obligé de mettre alors que dans com_contacts ce n'est pas la peine. C'est pour la suppression d'un enregistrement (action delete). Dans com_contacts, il n'y a pas besoin de déclarer une fonction delete dans le controleur, elle est directement dans le modèle et ça marche. Alors que dans mon composant ça ne marche pas si je ne mets pas ce qui suit dans mon contrôleur :
Avez-vous une idée de la raison ?
En tout cas merci déjà d'avoir lu mes 2 questions
Et encore plus merci si vous avez des réponses à me donner.
Nicolas
Voilà je suis en train de développer un petit composant pour la 1ère fois avec Joomla 1.6. J'avais déjà fait ça sous Joomla 1.5 il y a quelques temps. Il y a quand même des nouveautés qui changent pas mal les choses ! Heureusement pour m'aider j'ai lu l'article de Christophe Demko qui est paru dans le dernier PHPSolutions HS.
J'ai voulu aller un peu plus loin que ce qu'il explique et notamment ajouter dans l'admin de mon composant la fonction de tri sur les colonnes. Pour m'aider j'ai notamment regardé du côté du composant contacts fourni dans l'install de Joomla.
J'ai finalement réussi, mais une chose m'ennuie car j'ai été obligé d'ajouter quelque chose qui n'est pas présent dans le composant contacts, mais qui s'avère indispensable dans le mien pour que cela marche. Et je ne comprends pas vraiment pourquoi.
Dans le template de ma vue (views/courses/tmpl/default.php), j'ai bien mis les 2 champs cachés filter_order et filter_order_Dir qui permettent de transmettre les paramètres de tri. Mes différentes colonnes sont équipées du grid.sort avec pour chacune les paramètres $listDirn et $listOrder qui proviennent d'un state->get. Jusque là pas de différence avec com_contacts.
Par contre dans mon modèle (qui hérite de JModelList), dans ma fonction populateState, je suis obligé de rajouter les lignes suivantes :
Code PHP:
$orderCol = $this->getUserStateFromRequest('list.ordering','filter_order', 'title', 'cmd');
$this->setState('list.ordering',$orderCol);
$orderDirn = $this->getUserStateFromRequest('list.direction','filter_order_Dir', 'asc', 'word');
if ($orderDirn != 'asc') {
$orderDirn = 'desc';
}
$this->setState('list.direction',$orderDirn);
Pas de problème ça marche !
Sauf que dans le modèle de com_contacts, les lignes que j'ai indiquées ci-dessus je ne les trouve nulle part ! Et pourtant le tri marche. Alors que dans mon composant, sans ces lignes, ça ne marche pas.
Du coup, je me dis qu'il y a un truc qui m'échappe et je n'aime pas ça.
Dans le même ordre d'idée, il y a autre chose que je suis obligé de mettre alors que dans com_contacts ce n'est pas la peine. C'est pour la suppression d'un enregistrement (action delete). Dans com_contacts, il n'y a pas besoin de déclarer une fonction delete dans le controleur, elle est directement dans le modèle et ça marche. Alors que dans mon composant ça ne marche pas si je ne mets pas ce qui suit dans mon contrôleur :
Code PHP:
public function delete() {
$this->getModel()->delete();
}
En tout cas merci déjà d'avoir lu mes 2 questions
Et encore plus merci si vous avez des réponses à me donner.
Nicolas