Composant avec plusieurs controleurs

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Composant avec plusieurs controleurs

    Bonjour.

    Je suis encore en apprentissage dans la création de composants Joomla. Je suis en train de développer un composant de slideshow. Le composant requiert seulement la partie backend. J'ai 2 tables: slides et categories.

    Mon problème est que dans l'espace d'administration de Joomla, lorsque je clique sur "Nouveau" pour créer un nouveau slide, le formulaire ne s'affiche pas.

    Voici la vue par défaut:



    Et voici celle qui s'affiche lorsque je clique sur "Nouveau":



    controller.php

    Code PHP:
    defined('_JEXEC') or die('Restricted access');

    jimport('joomla.application.component.controller');

    class 
    SkitterController extends JController
    {
        function 
    display()
        {
            
    $view =& $this->getView('slides''html');
            
    $model =& $this->getModel('slides');
            
    $view->setModel($modeltrue);
            
    $view->display();
        }

    controllers/slides.php

    Code PHP:
    defined'_JEXEC' ) or die( 'Restricted access' );

    class 
    SkitterControllerSlides extends SkitterController
    {
        
    /**
         * constructor (registers additional tasks to methods)
         * @return void
         */
        
    function __construct()
        {
            
    parent::__construct();
            
    $this->registerTask('add''edit');
        }
        
        
    /**
         * display the edit form
         * @return void
         */
        
    function edit()
        {
            
    JRequest::setVar'view''slide' );
            
    JRequest::setVar'layout''form'  );
            
    JRequest::setVar('hidemainmenu'1);

            
    parent::display();
        }

        
    /**
         * save a record (and redirect to main page)
         * @return void
         */
        
    function save()
        {
            
    $model $this->getModel('slide');

            if (
    $model->store($post)) {
                
    $msg JText::_'Slide Saved!' );
            } else {
                
    $msg JText::_'Error Saving Slide' );
            }

            
    // Check the table in so it can be edited.... we are done with it anyway
            
    $link 'index.php?option=com_skitter';
            
    $this->setRedirect($link$msg);
        }

        
    /**
         * remove record(s)
         * @return void
         */
        
    function remove()
        {
            
    $model $this->getModel('slide');
            if(!
    $model->delete()) {
                
    $msg JText::_'Error: One or More Slides Could not be Deleted' );
            } else {
                
    $msg JText::_'Slide(s) Deleted' );
            }

            
    $this->setRedirect'index.php?option=com_skitter'$msg );
        }

        
    /**
         * cancel editing a record
         * @return void
         */
        
    function cancel()
        {
            
    $msg JText::_'Operation Cancelled' );
            
    $this->setRedirect'index.php?option=com_skitter'$msg );
        }

    views/slide/view.html.php

    Code PHP:
    defined('_JEXEC') or die('Restricted access');

    jimport('joomla.application.component.view');

    class 
    SkitterViewSlide extends JView
    {
        function 
    display($tpl null)
        {
            
    $slide =& $this->get('Data');
            
    $isNew = ($slide->id 1);

            
    $text $isNew JText::_('New') : JText::_('Edit');
            
    JToolBarHelper::title(JText::_('Slide').': <small>[ ' $text ' ]</small>');
            
    JToolBarHelper::save();
            if (
    $isNew)  {
                
    JToolBarHelper::cancel();
            } else {
                
    // for existing items the button is renamed `close`
                
    JToolBarHelper::cancel('cancel''Close');
            }

            
    $this->assignRef('slide'$slide);

            
    parent::display($tpl);
        }

    views/slide/tmpl/form.php

    Code PHP:
    <?php defined('_JEXEC') or die('Restricted access'); ?>

    <form action="index.php" method="post" name="adminForm" id="adminForm">
    <div class="col100">
        <fieldset class="adminform">
            <legend><?php echo JText::_'Details' ); ?></legend>

            <table class="admintable">
            <tr>
                <td width="100" align="right" class="key">
                    <label for="greeting">
                        <?php echo JText::_'Label' ); ?>:
                    </label>
                </td>
                <td>
                    <input class="text_area" type="text" name="label" size="32" maxlength="250" value="<?php echo $this->slide->label;?>" />
                </td>
            </tr>
        </table>
        </fieldset>
    </div>
    <div class="clr"></div>

    <input type="hidden" name="option" value="com_skitter" />
    <input type="hidden" name="id" value="<?php echo $this->slide->id?>" />
    <input type="hidden" name="task" value="" />
    <input type="hidden" name="controller" value="slides" />
    </form>
    Comment créer un template Joomla | Comment créer des paramètres de sélection multiple | Sécurisez votre base de données Joomla
    TWITTER: @tomsyweb

  • #2
    Re : Composant avec plusieurs controleurs

    essaye dans le controlleur
    function display()
    {
    parent::display();
    }// function
    Connaitre son ignorance est la meilleure part de la connaissance.

    Commentaire


    • #3
      Re : Composant avec plusieurs controleurs

      si vous utilisez plusieurs controlleur, chaque controlleur exécutera la tache appeler
      Connaitre son ignorance est la meilleure part de la connaissance.

      Commentaire


      • #4
        Re : Composant avec plusieurs controleurs

        Avec ton code, j'ai cette erreur:
        500 - Une erreur est survenue

        View not found [name, type, prefix]: skitter,html,skitterView
        Comment créer un template Joomla | Comment créer des paramètres de sélection multiple | Sécurisez votre base de données Joomla
        TWITTER: @tomsyweb

        Commentaire


        • #5
          Re : Composant avec plusieurs controleurs

          n'oublier pas de mettre le <?php echo JHTML::_( 'form.token' ); ?> dans le formulaire,
          et de tester avant l'execution de tes fonction
          JRequest::checkToken() or jexit( 'Invalid Token' );
          Connaitre son ignorance est la meilleure part de la connaissance.

          Commentaire


          • #6
            Re : Composant avec plusieurs controleurs

            tu as remplacer dans le controller.php
            function display()
            {
            $view =& $this->getView('slides', 'html');
            $model =& $this->getModel('slides');
            $view->setModel($model, true);
            $view->display();
            }

            par
            function display()
            {
            parent::display()}

            et dans ton slide.php ou admin.slide.php ( a la racine de ton composant) tu as

            if( $controller = JRequest::getWord('controller'))
            {
            $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'. php';
            if( file_exists($path))
            {
            require_once $path;
            }
            else
            {
            $controller = '';
            }
            }
            Dernière édition par khadimoukoum à 07/05/2011, 16h43
            Connaitre son ignorance est la meilleure part de la connaissance.

            Commentaire


            • #7
              Re : Composant avec plusieurs controleurs

              admin.skitter.php
              Code PHP:
              defined('_JEXEC') or die('Restricted access');

              require_once(
              JPATH_COMPONENT.DS.'controller.php');

              if (
              $controller JRequest::getWord('controller'))
              {
                  
              $path JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
                  if (
              file_exists($path))
                  {
                      require_once 
              $path;
                  }
                  else
                  {
                      
              $controller '';
                  }
              }

              $classname 'SkitterController'.$controller;
              $controller = new $classname();

              $controller->execute(JRequest::getVar('task'));

              $controller->redirect(); 
              Comment créer un template Joomla | Comment créer des paramètres de sélection multiple | Sécurisez votre base de données Joomla
              TWITTER: @tomsyweb

              Commentaire


              • #8
                Re : Composant avec plusieurs controleurs

                dans ta vue principales views/slides/tmpl/default.php
                tu as specifier le controlleur dans le formulaire
                <input type="hidden" name="controller" value="slides" />
                Connaitre son ignorance est la meilleure part de la connaissance.

                Commentaire


                • #9
                  Re : Composant avec plusieurs controleurs

                  Oui je l'ai fait
                  Comment créer un template Joomla | Comment créer des paramètres de sélection multiple | Sécurisez votre base de données Joomla
                  TWITTER: @tomsyweb

                  Commentaire


                  • #10
                    Re : Composant avec plusieurs controleurs

                    je pense que vous devriez revoir ta vue principales views/slides/tmpl/default.php
                    qui transmet le valeur de id, et de la tache , et le controlleur!

                    <input type="hidden" name="option" value="com_slides" />
                    <input type="hidden" name="task" value="" />
                    <input type="hidden" name="boxchecked" value="0" />
                    <input type="hidden" name="controller" value="slides" />

                    la ca me dépasse, désolé de vous avoir fait perdre votre temps,
                    Connaitre son ignorance est la meilleure part de la connaissance.

                    Commentaire


                    • #11
                      Re : Composant avec plusieurs controleurs

                      J'ai trouvé le problème. Il a fallu que je modifie le fichier controller.php ainsi:

                      Code PHP:
                      defined('_JEXEC') or die('Restricted access');

                      jimport('joomla.application.component.controller');

                      class 
                      SkitterController extends JController
                      {
                          function 
                      display()
                          {
                              
                      $view JRequest::getCmd('view');
                              if(empty(
                      $view)) {
                                  
                      JRequest::setVar('view''slides');
                              };
                              
                              
                      parent::display();
                          }

                      Comment créer un template Joomla | Comment créer des paramètres de sélection multiple | Sécurisez votre base de données Joomla
                      TWITTER: @tomsyweb

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X