THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Demande de documentation

(16-06-2015 01:07:47)


Je suis un débutant de thelia 2.
J'ai créer mon tout premier module, mais quand j'accède à la page du module, j'ai cette erreur (module générer avec CRUD)
[BBCode]
Une erreur est survenue
La pge demandé a rencontré un problème. Merci de contacter le développeur du module que vous êtes en train d'utiliser ou bien d'ouvrir une issue à l'équipe de développement de Thelia sur github : here

Le message d'erreur suivant a été trouvé : Loop type 'hitest' is not defined.
[/BBCode]

My routting:
  <route id="hitest.configuration.default" path="/admin/module/HiTest" methods="get">
    <default key="_controller">HiTest:HiTestConfig:default</default>
  </route>
  <route id="hitest.configuration.save" path="/admin/module/HiTest" methods="post">
    <default key="_controller">HiTest:HiTestConfig:save</default>
  </route>
  <route id="hitest.hitest.list" path="/admin/module/HiTest/hitest" methods="get">
    <default key="_controller">HiTest:Hitest:default</default>
  </route>
  <route id="hitest.hitest.create" path="/admin/module/HiTest/create" methods="post">
    <default key="_controller">HiTest:Hitest:create</default>
  </route>

Pour la page de creation:

Oops ! Une erreur est survenue
Template file module/HiTest/hitest/create.html cannot be found.

Y-a t-il un Tutorial pour créer un module de a-z?

Merci d'avance

Offline

#2 Re: Demande de documentation

(16-06-2015 01:44:00)


On peut voir la déclaration des loops dans config.xml ? Ca devrait ressembler à ça : http://doc.thelia.net/en/documentation/ … loops.html, une des loops doit avoir l'id "hitest" pour qu'on puisse écrire dans les templates: {loop type="hitest" .... }


OpenStudio Toulouse

Offline

#3 Re: Demande de documentation

(21-06-2015 18:52:34)


Bonjour,
Effectivement dans la config il est bien définie:

<loops>
    <loop name="hitest" class="HiTest\Loop\Hitest"/>
</loops>

Dans le template:

{loop name="hitest-list" type="hitest" order=$order}
 {/loop}

Mais l'action qui passe les paramètre il y'a que

 protected function renderListTemplate($currentOrder)
    {
        $this->getParser()  ->assign("order", $currentOrder)       ;
    }

Offline

#4 Re: Demande de documentation

(21-06-2015 21:09:49)


Dans ta définition des routes, il vaut mieux utiliser la syntaxe HiTest\Controller\HiTestConfig::default plutôt  que HiTest:HiTestConfig:default


OpenStudio Toulouse

Offline

#5 Re: Demande de documentation

(21-06-2015 21:12:18)


hielh wrote:

Mais l'action qui passe les paramètre il y'a que

 protected function renderListTemplate($currentOrder)
    {
        $this->getParser()  ->assign("order", $currentOrder)       ;
    }

Je ne comprend pas cette partie.

Tu as bien créé une classe HiTest\Loop\Hitest pour implémenter ta boucle ?


OpenStudio Toulouse

Offline

#6 Re: Demande de documentation

(22-06-2015 00:41:11)


Il est généré automatiquement, car dans cet exemple, j'ai essayé de faire un CRUD

<?php

/**
 * This class has been generated by TheliaStudio
 * For more information, see [url]https://github.com/thelia-modules/TheliaStudio[/url]
 */

namespace HiTest\Loop;

use HiTest\Loop\Base\Hitest as BaseHitestLoop;

/**
 * Class Hitest
 * @package HiTest\Loop
 */
class Hitest extends BaseHitestLoop {

    public function buildModelCriteria()
    {
        $query = new HitestQuery();

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

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

        if (null !== $position = $this->getPosition()) {
            $query->filterByPosition($position);
        }

        if (null !== $title = $this->getTitle()) {
            $title = array_map("trim", explode(",", $title));
            $query->filterByTitle($title);
        }

        if (null !== $message_id = $this->getMessageId()) {
            $query->filterByMessageId($message_id);
        }

        foreach ($this->getOrder() as $order) {
            switch ($order) {
                case "id":
                    $query->orderById();
                    break;
                case "id-reverse":
                    $query->orderById(Criteria::DESC);
                    break;
                case "visible":
                    $query->orderByVisible();
                    break;
                case "visible-reverse":
                    $query->orderByVisible(Criteria::DESC);
                    break;
                case "manual":
                    $query->orderByPosition();
                    break;
                case "manual-reverse":
                    $query->orderByPosition(Criteria::DESC);
                    break;
                case "title":
                    $query->orderByTitle();
                    break;
                case "title-reverse":
                    $query->orderByTitle(Criteria::DESC);
                    break;
                case "description":
                    $query->orderByDescription();
                    break;
                case "description-reverse":
                    $query->orderByDescription(Criteria::DESC);
                    break;
                case "chapo":
                    $query->orderByChapo();
                    break;
                case "chapo-reverse":
                    $query->orderByChapo(Criteria::DESC);
                    break;
                case "postscriptum":
                    $query->orderByPostscriptum();
                    break;
                case "postscriptum-reverse":
                    $query->orderByPostscriptum(Criteria::DESC);
                    break;
                case "message_id":
                    $query->orderByMessageId();
                    break;
                case "message_id-reverse":
                    $query->orderByMessageId(Criteria::DESC);
                    break;
            }
        }
        var_dump($query);die;
        return $query;
    }

    public function parseResults(LoopResult $loopResult) {
        /** @var \HiTest\Model\Hitest $entry */
        foreach ($loopResult->getResultDataCollection() as $entry) {
            $row = new LoopResultRow($entry);

            $row
                    ->set("ID", $entry->getId())
                    ->set("VISIBLE", $entry->getVisible())
                    ->set("POSITION", $entry->getPosition())
                    ->set("TITLE", $entry->getTitle())
                    ->set("DESCRIPTION", $entry->getDescription())
                    ->set("CHAPO", $entry->getChapo())
                    ->set("POSTSCRIPTUM", $entry->getPostscriptum())
                    ->set("MESSAGE_ID", $entry->getMessageId())
            ;
            var_dump($row);
            die;
            $this->addMoreResults($row, $entry);

            $loopResult->addRow($row);
        }

        return $loopResult;
    }

    /**
     * You may now add your own logic
     */
    public function getArgDefinitions() {
        var_dump($query);die;
        return new ArgumentCollection(
                Argument::createIntListTypeArgument('id'), new Argument(
                'ref', new TypeCollection(
                new Type\AlphaNumStringListType()
                )
                ), Argument::createIntListTypeArgument('description')
        );
    }
}

Pour les routes

<route id="hitest.configuration.default" path="/admin/module/HiTest" methods="get">
    <default key="_controller">HiTest:HiTestConfig:default</default>
  </route>
  <route id="hitest.configuration.save" path="/admin/module/HiTest" methods="post">
    <default key="_controller">HiTest:HiTestConfig:save</default>
  </route>
  <route id="hitest.hitest.list" path="/admin/module/HiTest/hitest" methods="get">
    <default key="_controller">HiTest:Hitest:default</default>
  </route>
  <route id="hitest.hitest.create" path="/admin/module/HiTest/create" methods="post">
    <default key="_controller">HiTest:Hitest:create</default>
  </route>
  <route id="hitest.hitest.view" path="/admin/module/HiTest/hitest/edit" methods="get">
    <default key="_controller">HiTest:Hitest:update</default>
  </route>
  <route id="hitest.hitest.edit" path="/admin/module/HiTest/hitest/edit" methods="post">
    <default key="_controller">HiTest:Hitest:processUpdate</default>
  </route>
  <route id="hitest.hitest.delete" path="/admin/module/HiTest/hitest" methods="post">
    <default key="_controller">HiTest:Hitest:delete</default>
  </route>
  <route id="hitest.hitest.update_position" path="/admin/module/HiTest/hitest/updatePosition" methods="get">
    <default key="_controller">HiTest:Hitest:updatePosition</default>
  </route>
  <route id="hitest.hitest.toggle_visibility" path="/admin/module/HiTest/hitest/toggleVisibility" methods="get">
    <default key="_controller">HiTest:Hitest:setToggleVisibility</default>
  </route>

Je pense que le problème n'est pas dans la création du loop, mais, plutôt passer cette loop depuis l'action au template

Cdt,
Hicham

Offline

#7 Re: Demande de documentation

(22-06-2015 19:58:37)


Je ne sais pas si j'étais assez claire?

Hicham

Offline

#8 Re: Demande de documentation

(22-06-2015 21:01:11)


plutôt passer cette loop depuis l'action au template

Je ne vois pas ce que ça veut dire.

Si tu as ça dans le config.xml de ton module, et que la classe HiTest\Loop\Hitest existe bien dans ton module, et que ton module est activé alors c'est bon, ça doit marcher.

<loops>
    <loop name="hitest" class="HiTest\Loop\Hitest"/>
</loops>

Si ça ne marche pas, vide les caches.


OpenStudio Toulouse

Offline

#9 Re: Demande de documentation

(23-06-2015 00:44:01)


Merci déjà pour ton suivi,
Mais ça marche pas, j'en ai bien les éléments cités. Si tu as 5 min tu bien faire une passe sur le code de ce module. cliquer pour télécharger
https://www.zipshare.com/download/eyJhc … lsLmNvbSJ9

Si tu as une solution je suis preneur, elle sera mon début pour aller plus vite wink.

Merci d'avance,
hicham