THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


J'ai cette erreur sur la fiche d'un produit :

SmartyCompilerException in smarty_internal_templatecompilerbase.php line 347:
Syntax error in template "C:\wamp64\www\marketplaceyadlapatate\templates\frontOffice\theliaartabanmarketplacetemplatefrontoffice\product.html" on line 385 "var PSE = {$pse | json_encode nofilter}" - Unexpected "|"

losrque je met ce code :

....
                <h1 class="name"><span itemprop="name">{$TITLE}</span><span id="pse-name" class="pse-name"></span></h1>

                {loop name="seller.name" type="ampseller" product_id={$ID}}
                <h2 class="seller-name">
                    <a href="{url path='?view=seller' seller_id="{$ID}"}">
                        {$TITLE}
                    </a>
                </h2>
                {/loop}
....

Le problème vient de la loop apparement. Lorsque je la retire, ça marche, mais je ne comprend absoluement pas pourquoi...

Toute aide serat grandement appréciée !

Offline


Que se passe-t-il si tu enlève le <a>... </a> dans ta boucle ?
Quelles sont les variables retournées par ta boucle ?


OpenStudio Toulouse

Offline


En mettant juste

{loop name="seller.name" type="ampseller" product_id={$ID}}

{/loop}

J'ai la même erreur :

Syntax error in template "C:\wamp64\www\marketplaceyadlapatate\templates\frontOffice\theliaartabanmarketplacetemplatefrontoffice\product.html" on line 381 "var PSE = {$pse | json_encode nofilter}" - Unexpected "|

Lorsque tu parles de variable de ma boucle, tu parle de celle gérées par le fichier qui définit la boucle ?

Je met le code pour au cas où:

<?php

/* * ********************************************************************************** */
/*      This file is part of the Thelia package.                                     */
/*                                                                                   */
/*      Copyright (c) OpenStudio                                                     */
/*      email : dev@thelia.net                                                       */
/*      web : http://www.thelia.net                                                  */
/*                                                                                   */
/*      For the full copyright and license information, please view the LICENSE.txt  */
/*      file that was distributed with this source code.                             */
/* * ********************************************************************************** */
/* * ********************************************************************************** */

namespace ArtabanMarketplace\Loop;

use ArtabanMarketplace\Model\AmpSeller;
use ArtabanMarketplace\Model\AmpSellerQuery;
use ArtabanMarketplace\Model\Map\AmpSellerTableMap;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\Join;
use Thelia\Core\Template\Element\BaseI18nLoop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\PropelSearchLoopInterface;
use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Model\Map\ProductTableMap;
use ArtabanMarketplace\Model\Map\AmpSellerProductTableMap;

/**
 * Class SellerLoop
 * @package ArtabanMarketplace\Loop
 */
class SellerLoop extends BaseI18nLoop implements PropelSearchLoopInterface {

    /**
     * @param LoopResult $loopResult
     *
     * @return LoopResult
     */
    public function parseResults(LoopResult $loopResult) {
        /** @var AmpSeller $seller */
        foreach ($loopResult->getResultDataCollection() as $seller) {
            $loopResultRow = new LoopResultRow($seller);

            $loopResultRow
                    ->set('ID', $seller->getId())
                    ->set('REF', $seller->getRef())
                    ->set("ADDRESS1", $seller->getAddress1())
                    ->set("ADDRESS2", $seller->getAddress2())
                    ->set("ADDRESS3", $seller->getAddress3())
                    ->set("ZIPCODE", $seller->getZipcode())
                    ->set("CITY", $seller->getCity())
                    ->set("COUNTRY_ID", $seller->getCountryId())
                    ->set("EMAIL", $seller->getEmail())
                    ->set("PHONE", $seller->getPhone())
                    ->set("FAX", $seller->getFax())
                    ->set("URL", $seller->getUrl())
                    ->set("FACEBOOK", $seller->getFacebook())
                    ->set("TWITTER", $seller->getTwitter())
                    ->set("PINTEREST", $seller->getPinterest())
                    ->set("GOOGLE", $seller->getGoogle())
                    ->set("YOUTUBE", $seller->getYoutube())
                    ->set("INSTAGRAM", $seller->getInstagram())
                    ->set("LAT", $seller->getLatitude())
                    ->set("LON", $seller->getLongitude())
                    ->set("CREATE_DATE", $seller->getCreatedAt())
                    ->set("UPDATE_DATE", $seller->getUpdatedAt())
                    ->set("VISIBLE", $seller->getVisible())
            ;

            if ($seller->hasVirtualColumn('i18n_TITLE')) {
                $loopResultRow->set("TITLE", $seller->getVirtualColumn('i18n_TITLE'));
            }

            if ($seller->hasVirtualColumn('i18n_ACCESS')) {
                $loopResultRow->set("ACCESS", $seller->getVirtualColumn('i18n_ACCESS'));
            }

            if ($seller->hasVirtualColumn('i18n_DESCRIPTION')) {
                $loopResultRow->set("DESCRIPTION", $seller->getVirtualColumn('i18n_DESCRIPTION'));
            }

            if ($this->getWithPrevNextInfo()) {
                $previous = $this->getPrevious($seller);
                $next = $this->getNext($seller);
                $loopResultRow
                        ->set("HAS_PREVIOUS", $previous != null ? 1 : 0)
                        ->set("HAS_NEXT", $next != null ? 1 : 0)
                        ->set("PREVIOUS", $previous != null ? $previous->getId() : -1)
                        ->set("NEXT", $next != null ? $next->getId() : -1);
            }

            $loopResult->addRow($loopResultRow);
        }

        return $loopResult;
    }

    /**
     * @inheritdoc
     */
    protected function getArgDefinitions() {
        return new ArgumentCollection(
                Argument::createIntListTypeArgument('id'), Argument::createIntListTypeArgument('admin_id'), Argument::createIntListTypeArgument('country_id'), Argument::createIntListTypeArgument('content_id'), Argument::createIntListTypeArgument('folder_id'), Argument::createIntListTypeArgument('brand_id'), Argument::createIntListTypeArgument('product_id'), Argument::createBooleanTypeArgument('visible'), Argument::createAnyListTypeArgument('city'), Argument::createBooleanTypeArgument('with_prev_next_info', false), Argument::createEnumListTypeArgument('order', [
                    'id',
                    'id-reverse',
                    'date',
                    'date-reverse',
                    'title',
                    'title-reverse',
                    'address1',
                    'address1-reverse',
                    'zipcode',
                    'zipcode-reverse',
                    'city',
                    'city-reverse'
                        ], 'id')
        );
    }

    /**
     * @inheritdoc
     */
    public function buildModelCriteria() {
        $query = AmpSellerQuery::create();

        // manage translations
        $this->configureI18nProcessing(
                $query, [
            'TITLE',
            'DESCRIPTION',
            'ACCESS'
                ], null, 'ID', $this->getForceReturn()
        );

        if (null != $id = $this->getId()) {
            $query->filterById($id);
        }

        if (null != $country_id = $this->getCountryId()) {
            $query->filterByCountryId($country_id);
        }

        if (null != $city = $this->getCity()) {
            $query->filterByCity($city);
        }

        if (null != $visible = $this->getVisible()) {
            $query->filterByVisible($visible);
        }

        if (null != $product_id = $this->getProductID()) {
            if (is_array($product_id)) {
                $product_id = implode(",", $product_id);
            }

            $ampSellerJoin = new Join(AmpSellerTableMap::ID, AmpSellerProductTableMap::AMP_SELLER_ID,  Criteria::LEFT_JOIN);
            $query
                    ->addJoinObject($ampSellerJoin, "ampSellerJoin")
                    ->where(AmpSellerProductTableMap::PRODUCT_ID . " " . Criteria::IN . " (" . $product_id . ")");
        }

        if ($this->getBackendContext() === true) {
            $query = $this->getAdminArtabanMarketplace($query);
        }

        foreach ($this->getOrder() as $order) {
            switch ($order) {
                case 'id' :
                    $query->orderById();
                    break;
                case 'id-reverse' :
                    $query->orderById(Criteria::DESC);
                    break;
                case 'date' :
                    $query->orderByCreatedAt();
                    break;
                case 'date-reverse' :
                    $query->orderByCreatedAt(Criteria::DESC);
                    break;
                case 'title' :
                    $query->useAmpSellerI18nQuery()->orderByTitle()->endUse();
                    break;
                case 'title-reverse' :
                    $query->useAmpSellerI18nQuery()->orderByTitle(Criteria::DESC)->endUse();
                    break;
                case 'address1' :
                    $query->orderByAddress1();
                    break;
                case 'address1-reverse' :
                    $query->orderByAddress1(Criteria::DESC);
                    break;
                case 'zipcode' :
                    $query->orderByZipcode();
                    break;
                case 'zipcode-reverse' :
                    $query->orderByZipcode(Criteria::DESC);
                    break;
                case 'city' :
                    $query->orderByCity();
                    break;
                case 'city-reverse' :
                    $query->orderByCity(Criteria::DESC);
                    break;
                default:
                    break;
            }
        }

        return $query;
    }

    /**
     * @param AmpSeller $seller
     * @return AmpSeller
     */
    protected function getPrevious($seller) {
        $query = AmpSellerQuery::create();

        foreach ($this->getOrder() as $order) {
            switch ($order) {
                case 'id' :
                    $query->orderById(Criteria::DESC);
                    $query->filterById($seller->getId(), Criteria::LESS_THAN);
                    break;
                case 'id-reverse' :
                    $query->orderById();
                    $query->filterById($seller->getId(), Criteria::GREATER_THAN);
                    break;
                default:
                    $query->orderById(Criteria::DESC);
                    $query->filterById($seller->getId(), Criteria::LESS_THAN);
                    break;
            }
        }

        return $query->findOne();
    }

    /**
     * @param AmpSeller $seller
     * @return AmpSeller
     */
    protected function getNext($seller) {
        $query = AmpSellerQuery::create();

        foreach ($this->getOrder() as $order) {
            switch ($order) {
                case 'id' :
                    $query->orderById();
                    $query->filterById($seller->getId(), Criteria::GREATER_THAN);
                    break;
                case 'id-reverse' :
                    $query->orderById(Criteria::DESC);
                    $query->filterById($seller->getId(), Criteria::LESS_THAN);
                    break;
                default:
                    $query->orderById();
                    $query->filterById($seller->getId(), Criteria::GREATER_THAN);
                    break;
            }
        }

        return $query->findOne();
    }

    /** NOT USED
     * @param AmpSellerQuery $query
     * @return AmpSellerQuery
     */
    protected function getAdminArtabanMarketplace($query) {
        /** @var \Thelia\Model\Admin $admin */
        $admin = $this->securityContext->getAdminUser();

        if ($admin === null) {
            return $query;
        }

        if ($admin->getProfileId() === null) {
            return $query;
        }

        // If the current admin has an allowed profile_id, let him see all the sellers
        if (null != $configProfileIds = \ArtabanMarketplace\AmpSeller::getConfigValue(\ArtabanMarketplace\AmpSeller::CONFIG_ALLOW_PROFILE_ID)) {
            $profileIds = explode(',', $configProfileIds);

            if (in_array($admin->getProfileId(), $profileIds)) {
                return $query;
            }
        }

        return $query->useAmpSellerAdminQuery()->filterByAdminId($admin->getId())->endUse();
    }

}

Last edited by GillesL (21-01-2019 09:31:08)

Offline


Désolé, je ne vois pas...


OpenStudio Toulouse

Offline


Merci de ton temps. Je passe à autre chose. Je regarderais en détail plus tard.

Offline


J'ai trouvé ! Lorsque je mettais ma loop, je faisais une remise en forme auto du code et ça mettais le bazar dans le code js vers le bas du fichier...