Jump to content

Ajout d'un champ personnalisé dans adminorders


Recommended Posts

Bonjour,


Après une très longue recherche ...

Je souhaite insérer un champ personnalisé dans la page adminorders dans le bo.
Nom du champ : datelivraison
Table orders mise à jour avec insertion du champ datelivraison

           echo ' <form action="'.$currentIndex.'&view;'.$this->table.'&token;='.$this->token.'" method="post" style="text-align:center;">';

                           echo'<input size="55" type="text" name="datelivraison" value="'.htmlentities($this->getFieldValue($obj, 'datelivraison')).'" style="width: 130px; margin-right: 44px;" />


               <input type="hidden" name="id_order" value="'.$order->id.'" />
               <input type="submit" name="submitLivraison" value="'.$this->l('Change').'" class="button" />
           </form>';



et toujours dans adminorders :

    if (Tools::isSubmit('submitLivraison') AND ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order)))
       {
           if ($this->tabAccess['edit'] === '1')
           {

               $_GET['view'.$this->table] = true;

               $datelivraison = pSQL(Tools::getValue('datelivraison'));
               $order->datelivraison = $datelivraison;
               $order->update();

           }
           else
               $this->_errors[] = Tools::displayError('You do not have permission to edit here.');
       }





Et l'erreur suivante apparaît

Notice: Undefined variable: obj in C:\wamp\www\hirondelle\tabs\AdminOrders.php


La recherche sur le forum "comment définir une variable est = 0"

Une idée ?
Link to comment
Share on other sites

Bonjour,
Je pense que vous n'avez pas défini votre variable datelivraison dans classes/order.php.

Regardez dans classes/order.php, vous verrez comment sont définies les variables déja présentes. Vous n'aurez qu'à faire de même pour votre nouvelle variable.

Link to comment
Share on other sites

Bonjour Leeloo

Merci pour votre réponse.

J'ai bien conscience qu'il me faut modifier Classes/orders.

Je cherche simplement un didacticiel sur les variables et leur définition. J'ai beau essayer dans tous les sens, je me retrouve avec la même erreur et quelques fois Clef de sécurité invalide !

Donc en résumé je cherche à apprendre et à comprendre avant de plonger les mains dans le cambouis

Bien cordialement,

Phil

Link to comment
Share on other sites

Salut ,

De toute façon il faut commencer par la classe orders , c'est clair , avant de passer aux modifs BO ...

Autant créer une override, c'est fait pour ça ...

Dans /override/classes tu crées un fichier Order.php

Dedans tu mets :

class Order extends OrderCore
{
  public $datelivraison; // j'ajoute le champ

  public function getFields()
  {
      $fields = parent::getFields();
      $fields['datelivraison'] = pSQL($this->datelivraison);
  }
}



il est clair que le champ datelivraison doit être crée au préalable dans la table (ps_)order ....

en principe , le champ devrait être disponible désormais dans ton admin BO , et ajouté correctement à la table...

A charge pour toi que ta classe Admin soit proprement ajustée .

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Merci Brocéliande pour ta réponse

 

Breton et têtu, je ne désespère jamais ! Je pense que cette solution aidera plus d'un et elle peut être adaptée en fonction de ses besoins :

 

Voici la solution :

 

---> créer un fichier override/classes/Order.php

<?php
class Order extends OrderCore
{
  public $datelivraison; // j'ajoute le champ

 public function getFields()
{
 parent::validateFields();
   $fields['datelivraison'] = pSQL($this->datelivraison);

  return $fields;
}
  }
?>

 

----> Ajouter dans tabs/AdminOrders.php : ligne 203

 

/* datelivraison */
if (Tools::isSubmit('submitLivraison') AND ($id_order = (int)(Tools::getValue('id_order'))) AND Validate::isLoadedObject($order = new Order($id_order)))
    {
	    if ($this->tabAccess['edit'] === '1')
	    {

		    $_GET['view'.$this->table] = true;

		    $datelivraison = pSQL(Tools::getValue('datelivraison'));
		    $order->datelivraison = $datelivraison;
		    $order->update();

	    }
	    else
		    $this->_errors[] = Tools::displayError('You do not have permission to edit here.');
    }

/* datelivraison */

 

----> Ajouter dans tabs/AdminOrders.php : ligne 585

 

/* Display datelivraison  */
   echo '<br />
           <fieldset style="width: 400px">
           <legend><img src="../img/admin/delivery.gif" />'.$this->l('Date de livraison').'</legend>';


   echo        $this->l('Départ prévu le :').' '.Tools::displayDate($order->datelivraison, (int)$cookie->id_lang, true);

       echo '<br />
           <form action="'.$currentIndex.'&view'.$this->table.'&token='.$this->token.'" method="post" style="text-align:center;">
               <div class="margin-form">
               <input type="text" name="datelivraison" value="" style="text-align: center" id="datelivraison" /> </div>     
           <input type="hidden" name="id_order" value="'.$order->id.'" />
               <input type="submit" name="submitLivraison" value="'.$this->l('Change').'" class="button" />
           </form>';

           includeDatepicker(array('datelivraison'), true);        
           echo '</fieldset>';

/* Display datelivraison end*/

 

Maintenant je vais essayer de récupérer ce nouveau champ pour l'inscrire dans un template d'email ... à Bientôt !

Link to comment
Share on other sites

Pour l'insertion dans un template email

 

---> Ajouter dans tabs/AdminOrders.php : ligne 126

 

$templateVars = array('{datelivraison}' => $order->datelivraison);

 

Par contre je sèche pour le format de date. Il apparait sous la forme yy-mm-dd au lieu de mm-dd-yy

 

Mon ptit doigt me dit que Broceliande connait la réponse. Isn't 'it ?

 

@+

Link to comment
Share on other sites

avec

$templateVars = array(
				'{datelivraison}' => Tools::displayDate($order->datelivraison,(int)$cookie->id_lang,true),

 

j'ai la valeur suivante : 28-11-2011 11-11-28 au lieu de 28-11-2011

 

 

--------------------> La modification fonctionne très bien dans le bo

--------------------> Fatal Error dans le FO lors de la confirmation de commande.

 

Pas de traitement de commande et le panier ne se vide pas. Une astuce ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...