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?

Share this post


Link to post
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.

Share this post


Link to post
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...

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More