Jump to content

Smarty : variable existante provoque un écran blanc


Recommended Posts

Bonjour à tous,

J'ai créé un fichier tpl qui correspond à des pages magasins personnalisées, et lorsque je tente d'afficher des infos dessus de cette façon en modifiant le controller, pas moyen, j'ai un écran blanc.

$this->context->smarty->assign('store', $store);

        parent::initContent();

        if($store)
            $this->setTemplate('cms/store.tpl');

Lorsque je fais {debug}sur la page tpl, je vois que les infos sont bien là mais elles refusent de s'afficher lorsque je fais par exemple {$store.wysiwyg1} (qui est un de mes champs personnalisés).

 

Précision : le contenu du debug :

Array (2)
value => Store Object (25)
   ->id = 1
   ->id_country = "8"
   ->id_state = "0"
   ->name = Array (1)
    1 => "nom du magasin"
   ->address1 = Array (1)
    1 => "adresse"
   ->address2 = Array (1)
    1 => ""
   ->postcode = "75015"
   ->city = "Paris"
   ->latitude = "coordonnées"
   ->longitude = "coordonnées"
   ->hours = Array (1)
    1 => "a:7:{i:0;s:6:"Fermé";i:1;s:29:"10h00 ..."
   ->phone = "01 02 03 04 05"
   ->fax = "09 01 02 03 04"
   ->note = Array (1)
    1 => "..."
   ->email = ""
   ->date_add = "2016-09-05 10:49:06"
   ->date_upd = "2019-08-20 11:27:44"
   ->active = "1"
   ->wysiwyg1 = Array (1)
    1 => "<h2><a href="lien..."
   ->wysiwyg2 = Array (1)
    1 => "<h2>Le magasin en photos </h2> <p><i..."
   ->payments = Array (1)
    1 => "Espèces, Visa, MasterCard, American E..."
   ->url_rewrite = Array (1)
    1 => "url-récente"
   ->id_shop_list = Array (0)
   ->force_id = false
   ->id_image = 1
scope => "Smarty object"

 

Est-ce une nouveauté de prestashop 1.7?

Link to comment
Share on other sites

Sur mon template, il n'y a rien pour l'instant, voici le reste de mon code cela dit.
J'ai créé un champs personnalisé sur les pages magasins appelé url_rewrite que j'ai ajouté dans ps_store_lang (avec les autres chmaps personnalisés).

j'ai donc créé cette fonction :

    public static function getStoreByUrl($url_rewrite)
    {
        $id_store = Db::getInstance()->getValue('
        SELECT id_store
        FROM '._DB_PREFIX_.'store_lang
        WHERE url_rewrite = "'.$url_rewrite.'"');
        return $id_store;
    }

qui permet de comprendre avec une url quel est le store dont on parle, puis dans les controllers, vu que je ne réussissais pas à overrider, j'ai fait ça :

    public function initContent()
    {
        $distance_unit = Configuration::get('PS_DISTANCE_UNIT');
        if (!in_array($distance_unit, array('km', 'mi'))) {
            $distance_unit = 'km';
        }

        $this->context->smarty->assign(array(
            'mediumSize' => Image::getSize(ImageType::getFormattedName('medium')),
            'searchUrl' => $this->context->link->getPageLink('stores'),
            'distance_unit' => $distance_unit,
            'stores' => $this->getTemplateVarStores(),
        ));

        parent::initContent();
        $this->setTemplate('cms/stores');


        $store = false;

        if(Tools::getValue('url_rewrite'))
        {
            $id_store = Store::getStoreByUrl(Tools::getValue('url_rewrite'));

            if($id_store) {
                $store = new Store($id_store);

                $address = new Address();
                $address->country = Country::getNameById($this->context->language->id, $store->id_country);
                $address->address1 = $store->address1;
                $address->address2 = $store->address2;
                $address->postcode = $store->postcode;
                $address->city = $store->city;

                $addresses_formated = AddressFormat::getFormattedLayoutData($address);

                $has_picture = file_exists(_PS_STORE_IMG_DIR_ . (int)$store->id . '.jpg');
                $working_hours = Tools::unSerialize($store->hours);

                $this->context->smarty->assign(array(
                    'has_picture' => $has_picture,
                    'addresses_formated' => $addresses_formated,
                    'working_hours' => $working_hours,
                ));
            }
        }

        $this->context->smarty->assign('store', $store);

        parent::initContent();

        if($store)
            $this->setTemplate('cms/store.tpl');
    }



Comme je le disais plus haut, ce qui est étonnant, c'est que lorsque je débug la page, je vois bien toutes les variables de $store qui ont été envoyées.

 

Merci pour les réponses en tous cas.

Link to comment
Share on other sites

Ben oui c'est un array() tu l'as débugué juste avant

   ->wysiwyg1 = Array (1)
    1 => "<h2><a href="lien..."
   ->wysiwyg2 = Array (1)

un foreach sera pas mal venu ou alors détecter l'id_lang directement dans le controleur...

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...