Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-09-2012 17:37:48

jacka
Nouveau membre
Date d'inscription: 30-08-2012
Messages: 3

ZendX -> datePicker dans formulaire

Bonjour,
je cherche depuis plusieurs jours à mettre un champs calendrier afin d'inscrire une date dans mon formulaire.

J'ai regardé tous les topics du forum à ce sujet. J'ai consulté beaucoup de tuto, le manuel mais je ne trouve pas de solution.

Oui, j'ai vu cette vidéo : http://www.zendcasts.com/working-with-z … y/2010/07/
Pas la peine de la poster.

Je ne comprend pas bien ce qu'il y a à faire par moment... Voici mon code avec mes explications :

Je suis en local et jusqu'à présent le site fonctionnait très bien.

Voila ce que j'ai fait pour que ça beug :

Au niveau des dossiers :

-> J'ai mis la librarie "ZendX" dans le dossier library à la racine de mon site.
-> J'ai mis deux fichiers dans le dossier "public/js/" qui sont :
"jquery-ui-1.7.3.custom.min.js" et "jquery-1.3.2.min.js"
-> J'ai mis un fichier dans le dossier "public/css/ui-lightness/" qui est :
"jquery-ui-1.7.3.custom.css"
-> De plus il y a un dossier "image" dans "public/css/" qui correspond aux images du theme ui-lightness de jQueryUI

Au niveau du code :

J'ai un IndexController.php ("application/controllers/") et un index.phtml ("application/views/scripts/index/) qui permettent de gérer la page d'accueil.
L'IndexController communique avec la base de données via un fichier php DbTable.
Je ne poste pas le code car je ne l'ai pas touché pour ces fichiers.

Sur l'index.phtml, il y a un lien qui appelle un ProjetsController.php ("application/controllers/"). Dans ce controller, c'est l'action "tempsAction" qui est appelé via l'url "projets/temps/id/n° id".

Le code (raccourcis grâce au "...") :

Code:

class ProjetsController extends Zend_Controller_Action
{
    public function init()
    {
        /* Initialize action controller here */
        $this->view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper');
    }

   ...

    public function tempsAction()
    {
        $auth = Zend_Auth::getInstance();
        $id_user = $auth->getIdentity()->id;

        $form = new Application_Form_EditerTemps();
        $this->view->form = $form;

        if($this->getRequest()->isPost()){
            $formData = $this->getRequest()->getPost();
            if($form->isValid($formData)){
                $id_projet = $this->_getParam('id', 0);
                $temps = $form->getValue('temps');
                $dateUtilisateur = $form->getValue('dateUtilisateur');

                $temps_obj = new Application_Model_DbTable_Temps();
                $temps_obj->ajouterTemps($id_user, $id_projet, $temps, $dateUtilisateur);

                $this->_helper->redirector('index');
            }else{
                $form->populate($formData);
            }
        }
   ...
    }
...
}

Comme on peut le voir il y a dans cette action la création d'un objet $form de type formulaire ("Application_Form_EditerTemps") qu'on envoie ensuite à la vue ("$this->view->form = $form;").

Voici donc maintenant la vue ("application/views/scripts/projets/temps.phtml") :

Code:

<?php

$auth = Zend_Auth::getInstance();
$compteur = 0;

if($auth->hasIdentity()){ ?>
        <div class="contenu">

            <h4>Projets <?php echo $this->projets->id.' : '.$this->projets->titre; ?></h4>
            <p>Temps passé sur le projet depuis le <?php echo $this->projets->dateDebut ?> : <?php echo $this->join->temps ?></p>
            <?php 
                echo $this->form;
            ?>
        </div>
    <?php
}
else{
  $this->form->setAction($this->url((array('controller'=>'auth', 'action'=>'connexion'))));
  echo $this->form;
}


?>

Et le formulaire :

Code:

class Application_Form_EditerTemps extends ZendX_JQuery_Form
{

    public function init()
    {
        $this->setName('validForm');
        $this->setMethod('post');

        $notEmptyVal = new Zend_Validate_NotEmpty();
        $notEmptyVal->setMessage('<span class="supprimer"></span> <span style="margin-top:0px;">Champs obligatoire.</span>', Zend_Validate_NotEmpty::IS_EMPTY);

        $this->addElement('text', 'temps', array(
            'filters'    => array('StringTrim', 'StringToLower'),
            'validators' => array(array('StringLength', false, array(0, 50)), $notEmptyVal),
            'required'   => true,
            'label'      => 'Temps',
            'prepend' => '<i class="icon-time"></i>',
            'class' => 'required'
        ));

        $elem = new ZendX_JQuery_Form_Element_DatePicker('start_date', array(
                      'label'         => 'Start Date',
                      'required'      => true,
                      'validators'    => array('Date'),
                      'jQueryParams'  => array(
                          'dateFormat' => 'dd-mm-yy',
                          'minDate'    => '+1')
                ));
           
          $this->addElement($elem);
   }
}

J'ai aussi modifier le fichier application.ini ("application/configs/") :

Code:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpSettings.date.timezone = "Europe/Paris"
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
autoloaderNamespaces[] = "Twitter"
autoloaderNamespaces[] = "ZendX"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 
resources.db.params.dbname = **********
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 864000

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"


[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Les étoiles sur le nom de la base sont normales, merci de ne pas y prêter attention.

Et enfin le fichier layouts ("application/layouts/scripts/layout.phtml") :

Code:

<?php
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle('Inéance Horaires');
$this->headTitle()->setSeparator(' - ');
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <?php echo $this->headMeta(); ?>
    <?php echo $this->headTitle(); ?>
    <?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/bootstrap.css'); ?>
    <?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/design-default.css'); ?>
    <?php echo $this->headLink()->appendStylesheet($this->baseUrl().'/css/ui-lightness/jquery-ui-1.7.3.custom.css'); ?>
    <?php echo $this->headScript()->appendScript($this->baseUrl().'/js/index.js'); ?>
    <?php echo $this->headScript()->appendScript($this->baseUrl().'/js/jquery-1.3.2.min.js'); ?>
    <?php echo $this->headScript()->appendScript($this->baseUrl().'/js/jquery-ui-1.7.3.custom.min.js'); ?>
    <?php echo $this->jQuery(); ?>
</head>
...

Le layout et la vue s'affiche bien, mais à la place du formulaire j'ai un jolie warning doublé d'un "call stack" juste en dessous. En revanche, "Temps passé sur le projet depuis le" ainsi que les variables s'affiche bien.


Voila, j'espère que j'ai rien oublié sinon faite moi signe.
Tous commentaires, insultes ou humiliation acceptés même si ça concerne le code et pas le problème posé !
J'ai aussi tenté avec des méthodes par le bootstrap mais ça marche pas non plus.


Je consulterai ce post assez fréquemment.
Merci d'avance.

PS :  Lorsque je veux afficher le champs dans ma vue "temps.phtml" via "echo $this->datePicker('dp', '', array());" ça marche !

Dernière modification par jacka (14-09-2012 17:42:09)

Hors ligne

 

#2 04-10-2012 00:45:49

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: ZendX -> datePicker dans formulaire

Je ne sais pas si c'est toujours d'actualité, mais déjà essaye ça :

Je sais que faire de multiple echo m'avait posé problème à une époque.
Il faut n'en mettre qu'un de temps en temps.
Je m'explique :

Code:

[lang=php]
<?php echo $this->headScript()->appendScript($this->baseUrl().'/js/index.js'); ?>
<?php echo $this->headScript()->appendScript($this->baseUrl().'/js/jquery-1.3.2.min.js'); ?>
<?php echo $this->headScript()->appendScript($this->baseUrl().'/js/jquery-ui-1.7.3.custom.min.js'); ?>

Devrait être :

Code:

[lang=php]
<?php echo $this->headScript()->appendScript($this->baseUrl().'/js/index.js')
                               ->appendScript($this->baseUrl().'/js/jquery-1.3.2.min.js')
                               ->appendScript($this->baseUrl().'/js/jquery-ui-1.7.3.custom.min.js'); ?>

Concrètement, je fais ça dans mon layout :

Code:

[lang=php]
    <?php
    if ($this->jQuery()->isEnabled())
    {
        $this->jQuery()->setLocalPath($this->baseUrl().'/js/jquery-1.8.1.min.js')
                ->setUiLocalPath($this->baseUrl().'/js/jquery-ui-1.8.23.custom.min.js')
                ->addJavascriptFile($this->baseUrl().'/js/jquery-ui-i18n.min.js')
                ->addStylesheet($this->baseUrl().'/styles/cupertino/jquery-ui-1.8.23.custom.css');
    }
    echo $this->jQuery();    ?>

    <?php echo $this->headScript();        // Inclus les javascripts définis dans les vues.    ?>

Et dans l'action du contrôleur :

Code:

[lang=php]
        // On active l'utilisation de la librairie jQuery
        $this->view->jQuery()->enable();
        $this->view->jQuery()->uiEnable();
        
        // On charge la fichier javascript contenant toutes les fonctions de gestion de la grille des vacations
        $this->view->headScript()->appendFile($this->view->baseUrl().'/js/scriptpersonnel.js');

Bonne chance pour la suite.



EDIT : J'ai ça dans le bootstrap pour initialiser l'utilisation de JQuery :

Code:

[lang=php]
    /**
     * Initialisation de JQuery, des aides de vue et de la pagination
     */
    protected function _initJQuery()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
        // On utilise le mode "NoConflict" de Jquery (seulement si on utilise d'autres frameworks ajax)
        //ZendX_JQuery_View_Helper_JQuery::enableNoConflictMode();
        
    }

Dernière modification par gmifsud (04-10-2012 00:57:11)

Hors ligne

 

#3 16-11-2012 17:59:57

thomadson
Membre
Date d'inscription: 16-11-2012
Messages: 12

Re: ZendX -> datePicker dans formulaire

Bonsoir, moi j'utilise la version minimale 1.11.11 Je cherche en vain le répertoire ZendX, j'ai même télécharge la version full pour le copier mais je ne le trouve pas. Svp pouviez vous m'aider je vous en prie. Merci

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages