Jump to content
PrestashopUser03

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

Il faudrait voir ton template (et le reste de ton code) , mais ... ça semble venir du fait que tu n'a pas filtré par langue (getStores() ?)

Share this post


Link to post
Share on other sites
il y a 2 minutes, doekia a dit :

l faudrait voir ton template (et le reste de ton code)

 

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
il y a 9 minutes, doekia a dit :

Il faudrait voir ton template

c'est une blague non?

Share this post


Link to post
Share on other sites

je me suis mal exprimé, sur mon template, lors que je fais

$store.wysiwyg1

qui devrait afficher le contenu du champs wysiwyg1, rien ne s'affiche et pire encore, il provoque un écran blanc.

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

Mais non... Il fallait ajouter ".1" à chaque variable, deux heures que je me prends la tête pour un truc aussi con. En tous cas, merci Eolia !

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

×
×
  • Create New...

Important Information

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