THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Problème Loop

(21-03-2017 15:57:24)


Bonjour,


J'ai crée un boucle custom avec les fichiers suivants :

config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<config xmlns="http://thelia.net/schema/dic/config"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">

    <loops>
        <loop name="subscription.paiement.mode" class="Subscription\Loop\PaiementModeLoop" />
        <loop name="subscription.bank.transfert" class="Subscription\Loop\BankTransfert" />
        <loop name="subscription.subscription"  class="Subscription\Loop\SubscriptionLoop" />
        <loop name="subscription.subscription.financial" class="Subscription\Loop\SubscriptionFinancialLoop" />
        <loop name="subscription.subscription.suspension" class="Subscription\Loop\SubscriptionSuspensionLoop" />
    </loops>

    <forms>
        <!--
        <form name="MyFormName" class="Abonnement\Form\MySuperForm" />
        -->
        <form name="subscription.form.configure" class="Subscription\Form\ConfigurationForm" />
    </forms>

    <commands>
        <!--
        <command class="Abonnement\Command\MySuperCommand" />
        -->
    </commands>

    <!--
    <services>

    </services>
    -->

    <services>
        <service id="subscription.paiement.mode.listener" class="Subscription\EventListeners\PaiementModeListener" scope="request">
            <argument type="service" id="request" />
            <tag name="kernel.event_subscriber" />
        </service>
    </services>
    
    <hooks>
        <hook id="subscription.hook.module_configuration" class="Subscription\Hook\HookManager" scope="request">
            <tag name="hook.event_listener" event="module.configuration" type="back" method="onModuleConfigure" />
        </hook>
    </hooks>

    <!--
    <exports>

    </exports>
    -->

    <!--
    <imports>

    </imports>
    -->
</config>

Mon fichier loop

<?php

namespace Subscription\Loop;

use Subscription\Model\SubscriptionQuery;
use Thelia\Core\Template\Element\BaseLoop;
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;

class SubscriptionLoop extends BaseLoop implements PropelSearchLoopInterface
{
    /**
     * @return \Thelia\Core\Template\Loop\Argument\ArgumentCollection
     */
    protected function getArgDefinitions()
    {
        return new ArgumentCollection(
            Argument::createIntTypeArgument('s_customer_id'),
        );
    }

    /**
     * this method returns a Propel ModelCriteria
     *
     * @return \Propel\Runtime\ActiveQuery\ModelCriteria
     */
    public function buildModelCriteria()
    {
        $subscriptionQuery = SubscriptionQuery::create();

        $customerId = 1;

        var_dump($customerId);
        
        /** A améliorer **/
        if(!empty($customerId)){
            return $subscriptionQuery->filterBySCustomerId($customerId);
        }
    }

    /**
     * @param LoopResult $loopResult
     *
     * @return LoopResult
     */
    public function parseResults(LoopResult $loopResult)
    {
        /** @var \Subscription\Model\Subscription $subcription */
        foreach ($loopResult->getResultDataCollection() as $key => $subcription) {
            $loopResultRow = new LoopResultRow($subcription);

            $loopResultRow->set("ID", $subcription->getSId());
            $loopResultRow->set("NUM_EVO", $subcription->getSNumEvo());
            $loopResultRow->set("ID_CUSTOMER", $subcription->getSCustomerId());
            $loopResultRow->set("ID_ORDER", $subcription->getSOrderId());
            $loopResultRow->set("ID_PAIEMENT_MODE",$subcription->getSPaiementModeId());
            $loopResultRow->set("REG_MODE",$subcription->getSRegMode());
            $loopResultRow->set("PERIOD_PRV", $subcription->getSPeriodPrv());
            $loopResultRow->set("AMOUNT", $subcription->getSAmount());
            $loopResultRow->set("PERIOD_DAY", $subcription->getSPeriodDay());
            $loopResultRow->set("STATUS", $subcription->getSStatus());
            $loopResultRow->set("DATE_NEXT_PRV", $subcription->getSDateNextPrv());
            $loopResultRow->set("DATE_START", $subcription->getSDateStart());
            $loopResultRow->set("DATE_CREATION", $subcription->getSDateCreation());
            $loopResult->addRow($loopResultRow);
        }
        return $loopResult;
    }
}

Voici la boucle que j'affiche lorsque je la place dans mon template account.html :

<table class="table table-orders table-bordered table-hover" summary="{intl l="Test"}">
                                <thead>
                                <tr>
                                    <th>{intl l="Customer number"}</th>
                                    <th>{intl l="Payment Type"}</th>
                                    <th>{intl l="IBAN"}</th>
                                    <th>{intl l="BIC"}</th>
                                    <th>{intl l="Status"}</th>
                                </tr>
                                </thead>
                                {loop type="subscription.subscription" name="subscription" s_customer_id=$ID}
                                    <tbody>
                                        <tr>
                                            <td>{$ID_CUSTOMER}</td>
                                            <td>{$REG_MODE}</td>
                                            <td>{$AMOUNT}</td>
                                            <td>{$AMOUNT}</td>
                                            <td>{$STATUS}</td>
                                        </tr>
                                    </tbody>
                                {/loop}
                            </table>

Et le problème c'est que l'affichage ne se fait pas du tout et je n'aurais retour php dans mes logs.
Merci

Offline

#2 Re: Problème Loop

(21-03-2017 17:09:54)


buildModelCriteria() doit toujours retourner quelque chose ($subscriptionQuery, à vue de nez). Ce n'est pas le cas. Une relecture attentive de ton code t(aurais permis de trouver tout seul.


OpenStudio Toulouse

Offline

#3 Re: Problème Loop

(21-03-2017 17:27:00)


si je retourne bien cela, regarde ma fonction buildModelCriteria

 public function buildModelCriteria()
    {
        $subscriptionQuery = SubscriptionQuery::create();

        $customerId = 1;

        var_dump($customerId);
        
        /** A améliorer **/
        if(!empty($customerId)){
            return $subscriptionQuery->filterBySCustomerId($customerId);
        }
    }

Offline

#4 Re: Problème Loop

(21-03-2017 17:33:21)


uniquement si $customerId n'est pas vide


OpenStudio Toulouse

Offline

#5 Re: Problème Loop

(21-03-2017 17:37:45)


Hum d'accord mais j'ai effectué une loop custom sur le même modèle et ça m'a bien retourné des données.
Donc je me sens un peu perdu là