Joomla 2.5 composant de création et enregistrement des données
J'ai été à l'aide de cette documentation (le seul que je peux trouver sur le web) pour créer un composant:
http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Introduction
Je peux le comprendre, dans une certaine mesure, cependant, il n'est vraiment l'absence de toute définition. Le composant j'ai créé des œuvres à un certain degré, même si je vais avoir quelques wier problèmes.
Fondamentalement, tout ce que je besoin de la composante à faire est de simplement charger une zone paramètres à régler quelques valeurs, et à travers elle, être en mesure de modifier ces valeurs. Voici une ventilation de ce que j'ai:
Une vue pour une forme de chargement, dans les données du formulaire à partir de la base de données.
les barres d'outils de configuration pour sauvegarder/appliquer et annuler.
Cette charge sans erreurs, et selon tous les docs sur joomla, j'ai trouvé, par l'initialisation d'un JControllerForm exemple avec un JTable connecté dans le modèle, simple enregistrement des formulaires devrait fonctionner automatiquement. Cependant, même si il n'y a absolument aucune référence n'importe où dans le code d'un point de vue avec un s à la fin (vue principale est tireapi, les formes toujours redirige vers tireapis).
Ceci affiche une erreur 500, il n'y a pas de jeu d'endroit qui a de ce point de vue. La documentation inclut une liste de vue, cependant je n'ai qu'une seule ligne j'ai besoin de modifier, si une liste est inutile. Je sais que les paramètres peuvent être fixés à des composants plutôt que de faire un champ de base de données, cependant, je suis incapable de trouver de la documentation relative à.
Ce que je cherche, c'est une orientation sur la façon d'arrêter le composant de redirection vers une personne existante vue, et bien d'enregistrer les données. Liens vers de la documentation qui montre non seulement un exemple de code, mais décrit les fonctions et comment ils fonctionnent serait bénéfique.
Voici une partie du code, n'hésitez pas à signaler tout ce que je pourrais être complètement dominant (je suis plus récente à la création de composants):
tireapi.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted access');
//import joomla controller library
jimport('joomla.application.component.controller');
//Get an instance of the controller prefixed by TireAPI
$controller = JController::getInstance('TireAPI');
//Get the task
$jinput = JFactory::getApplication()->input;
$task = $jinput->get('task', "", 'STR' );
//Perform the Request task
$controller->execute($task);
//Redirect if set by the controller
$controller->redirect();
?>
controller.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted access');
//import Joomla controller library
jimport('joomla.application.component.controller');
class TireAPIController extends JController{
function display($cachable = false){
//set default view if not set
$input = JFactory::getApplication()->input;
$input->set('view', $input->getCmd('view', 'TireAPI'));
//call parent behavior
parent::display($cachable);
}
}
?>
controllers/tireapi.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted access');
//import Joomla controllerform library
jimport('joomla.application.component.controllerform');
class TireAPIControllerTireAPI extends JControllerForm{}
?>
models/tireapi.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted access');
//import the Joomla modellist library
jimport('joomla.application.component.modeladmin');
class TireAPIModelTireAPI extends JModelAdmin{
protected $settings; //define settings
public function getTable($type = 'TireAPI', $prefix = 'TireAPITable', $config = array()){
return JTable::getInstance($type, $prefix, $config);
}
public function getSettings(){ //grab settings from database
if(!isset($this->settings)){
$table = $this->getTable();
$table->load(1);
$this->settings = $table;
}
return $this->settings;
}
public function getForm($data = array(), $loadData = true){
//Get the form.
$form = $this->loadForm('com_tireapi.tireapi', 'tireapi',
array('control' => 'jform', 'load_data' => $loadData));
if (empty($form)){
return false;
}
return $form;
}
protected function loadFormData(){
//Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_tireapi.edit.tireapi.data', array());
if (empty($data)){
$data = $this->getSettings();
}
return $data;
}
}
?>
tables/tireapi.php:
<?php
//No direct access
defined('_JEXEC') or die('Restricted access');
//import Joomla table library
jimport('joomla.database.table');
class TireAPITableTireAPI extends JTable
{
function __construct( &$db ) {
parent::__construct('#__tireapi', 'id', $db);
}
}
?>
views/tireapi/view.html.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted access');
//import Joomla view library
jimport('joomla.application.component.view');
class TireAPIViewTireAPI extends JView{
function display($tpl = null){
$form = $this->get('Form');
$item = $this->get('Settings');
//Check for errors.
if(count($errors = $this->get('Errors'))){
JError::raiseError(500, implode('<br />', $errors));
return false;
}
//Assign data to the view
$this->item = $item;
$this->form = $form;
$this->addToolBar();
//Display the template
parent::display($tpl);
}
protected function addToolBar() {
$input = JFactory::getApplication()->input;
JToolBarHelper::title(JText::_('COM_TIREAPI_MANAGER_TIREAPIS'));
JToolBarHelper::apply('tireapi.apply');
JToolBarHelper::save('tireapi.save');
JToolBarHelper::cancel('tireapi.cancel');
}
}
?>
views/tireapi/tmpl/default.php:
<?php
//No direct access to this file
defined('_JEXEC') or die('Restricted Access');
//load tooltip behavior
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_tireapi&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="tireapi-form">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_TIREAPI_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="tireapi.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Ils sont tous les fichiers que je pense que peut importe, laissez-moi savoir si je dois inclure plus.
Mise à JOUR:
Je peux maintenant le problème de redirection d'arrêter, mais il ne sera pas enregistrer de données.
J'obtiens cette erreur:
Vous n'êtes pas autorisé à utiliser ce lien pour accéder directement à cette page (#1).
C'est le dernier obstacle pour obtenir ce très basique admin fonction. Des idées?
Pour clarifier, j'ai mis les formes mais un fichier xml et qui se charge correctement, même les remplir avec les données appropriées à partir de la base de données. Cependant lorsque je clique sur "appliquer" il vient de me dirige vers le formulaire avec le message d'erreur répertoriés ci-dessus, sans l'enregistrer.
OriginalL'auteur Jordan Ramstad | 2013-04-19
Vous devez vous connecter pour publier un commentaire.
La principale question qui reste ouverte est où voulez-vous qu'il redirect? Joomla par défaut redirige vers la vue de la liste (par l'ajout d'un " s " au nom de la vue, sauf si vous spécifiez une liste afficher directement).
Vous pouvez remplacer ce de deux manières:
Dans votre contrôleur (controllers/tireapi.php), définir votre propre liste. Je pense que vous pouvez même faire ce le même point de vue:
Remplacer la fonction enregistrer pour modifier la redirection qui se passe après la sauver (encore une fois dans le contrôleur). Cela fonctionne en changeant la redirection qui se passe naturellement à autre chose:
L'un de ceux-ci devraient faire l'affaire pour vous.
** Mise à JOUR
Pour obtenir le point à la caisse au départ, vous voulez changer la façon dont votre composant gère pas de vue. Maintenant que vous venez de définir le point de vue, au lieu de cela, nous allons rediriger! Mise à jour controller.php est ci-dessous.
REMARQUE: Cela fonctionne vraiment mal si plus d'une personne doit modifier ce, depuis le système vérifie quand vous ouvrez le composant si vous l'avez également rediriger les requêtes vers cette page après l'enregistrement. Car alors il sera toujours vérifié à la dernière personne qui l'a édité alors, la prochaine personne ne sera pas capable de l'ouvrir. Si une seule personne qui l'édite, il fera beau.
DEUXIÈME REMARQUE: Si vous ne voulez pas de pirater le système de commande vous pouvez également ignorer lors du processus d'enregistrement, qui est essentiellement le même niveau de piratage.
Ci-dessous est une copie de la fonction d'enregistrement à partir de controllerform.php dans
libraries/joomla/application/component/
. C'est ce qui est en cours d'exécution sur enregistrer normalement (à cause de l'endroit où vous héritez de. J'ai enlevé le vérifier si l'élément est vérifié. Donc, si vous le mettez dans votre tireapi.php contrôleur de laparent::save...
bits est, il sera exécuté à la place, et vous n'avez pas à se soucier de la vérification de l'élément (c'est à dire ignorer tous les commentaires...). (Honnêtement, dans votre cas, vous pouvez probablement supprimer un lot de plus de ceci, mais c'est ce qui se passe sur enregistrer, btw!)Lorsqu'un lien vers la page d'essayer d'utiliser le lien suivant: index.le php?option=com_tireapi&task=tireapi.edit. (Ce qui est vrai à partir d'éléments de menu ou de l'endroit où, généralement effectuée à l'affichage de la liste que vous n'avez pas.) Cela appelle la fonction éditer dans votre contrôleur qui doit commander l'élément pour vous avant de vous diriger vers le formulaire. Que la caisse devrait vous permettre de le modifier
Je vais regarder à cela, cependant, un prévisibles question est de savoir comment changer le lien dans le panneau d'admin. C'est en cours de chargement dans le menu des composants et je n'ai jamais vu un moyen de modifier ce lien. Je vais continuer à bidouiller.
Vous recherchez plus de l'ajout de la &la tâche n'est pas moi/aussi loin que je peux voir. Fondamentalement, en vertu de ma compréhension est que, après le premier échec-je le faire rediriger vers &task=tireapi.edit puis à partir de là, il doit être vérifié, Si je suis à la comprendre correctement. Toutefois le modifier en cliquant sur enregistrer fait la même chose à nouveau.
Désolé. Vous devez ajouter "&id=1 " à l'url pour qu'il sache à consulter la rubrique 1! url complète doit être index.le php?option=com_tireapi&task=tireapi.modifier&id=1. Et pour le menu, nous devons changer ce qui se passe si aucune vue n'est spécifié. Je vais mettre à jour la réponse à une option.
OriginalL'auteur David Fritsch
Ce n'est pas une vraie réponse, mais votre question est d'ailleurs pas une vraie question (j'ai dû lire 3 fois).
La chose avec le pluriel en "s" (pour tireapis) est ce que Joomla! fait automatiquement. Vous pouvez remplacer cela.
Je vous suggère de prendre un regard sur les composants de base (comme com_banners).
Ce que vous devez faire est d'éviter la redirection. Vous devez avoir seulement le bouton "Enregistrer", qui devrait vous tenir sur la même page. Alors que "Enregistrer &Fermer" vous redirige vers le pluriel de la page.
Comme l'a dit, regardez les composants de base et de comprendre comment ils fonctionnent. À l'aide d'Enregistrer ou sur Enregistrer & Proche ne devrait avoir aucune importance, JTable seront toujours utilisés.
OriginalL'auteur Valentin Despa