From 2478ddbd24a28bd2720c397ba5b2281e4f150768 Mon Sep 17 00:00:00 2001 From: Etienne Roudeix Date: Mon, 29 Jul 2013 16:04:05 +0200 Subject: [PATCH] in progress : feature loop --- core/lib/Thelia/Config/Resources/config.xml | 1 + .../lib/Thelia/Core/Template/Loop/Country.php | 4 +- .../lib/Thelia/Core/Template/Loop/Feature.php | 168 ++++++++++++++++++ templates/default/category.html | 9 + 4 files changed, 180 insertions(+), 2 deletions(-) create mode 100755 core/lib/Thelia/Core/Template/Loop/Feature.php diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 38d8052fb..b0bd00b5c 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -11,6 +11,7 @@ + diff --git a/core/lib/Thelia/Core/Template/Loop/Country.php b/core/lib/Thelia/Core/Template/Loop/Country.php index c9918edce..e947b7776 100755 --- a/core/lib/Thelia/Core/Template/Loop/Country.php +++ b/core/lib/Thelia/Core/Template/Loop/Country.php @@ -110,11 +110,11 @@ class Country extends BaseLoop $search->addAscendingOrderByColumn(\Thelia\Model\Map\CountryI18nTableMap::TITLE); - $countrys = $this->search($search, $pagination); + $countries = $this->search($search, $pagination); $loopResult = new LoopResult(); - foreach ($countrys as $country) { + foreach ($countries as $country) { $loopResultRow = new LoopResultRow(); $loopResultRow->set("ID", $country->getId()); $loopResultRow->set("AREA", $country->getAreaId()); diff --git a/core/lib/Thelia/Core/Template/Loop/Feature.php b/core/lib/Thelia/Core/Template/Loop/Feature.php new file mode 100755 index 000000000..02d8b66cf --- /dev/null +++ b/core/lib/Thelia/Core/Template/Loop/Feature.php @@ -0,0 +1,168 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Template\Loop; + +use Propel\Runtime\ActiveQuery\Criteria; +use Propel\Runtime\ActiveQuery\Join; +use Thelia\Core\Template\Element\BaseLoop; +use Thelia\Core\Template\Element\LoopResult; +use Thelia\Core\Template\Element\LoopResultRow; + +use Thelia\Core\Template\Loop\Argument\ArgumentCollection; +use Thelia\Core\Template\Loop\Argument\Argument; +use Thelia\Log\Tlog; + +use Thelia\Model\Base\ProductCategoryQuery; +use Thelia\Model\Base\FeatureQuery; +use Thelia\Model\ConfigQuery; +use Thelia\Model\Map\ProductCategoryTableMap; +use Thelia\Type\TypeCollection; +use Thelia\Type; + +/** + * + * Feature loop + * + * + * Class Feature + * @package Thelia\Core\Template\Loop + * @author Etienne Roudeix + */ +class Feature extends BaseLoop +{ + /** + * @return ArgumentCollection + */ + protected function getArgDefinitions() + { + return new ArgumentCollection( + Argument::createIntListTypeArgument('id'), + Argument::createIntListTypeArgument('product'), + Argument::createIntListTypeArgument('category'), + Argument::createBooleanTypeArgument('visible', 1), + Argument::createIntListTypeArgument('exclude'), + new Argument( + 'order', + new TypeCollection( + new Type\EnumListType(array('alpha', 'alpha_reverse', 'manual', 'manual_reverse')) + ), + 'manual' + ) + ); + } + + /** + * @param $pagination + * + * @return \Thelia\Core\Template\Element\LoopResult + */ + public function exec(&$pagination) + { + $search = FeatureQuery::create(); + + $id = $this->getId(); + + if (null !== $id) { + $search->filterById($id, Criteria::IN); + } + + $exclude = $this->getExclude(); + + if (null !== $exclude) { + $search->filterById($exclude, Criteria::NOT_IN); + } + + $visible = $this->getVisible(); + + $search->filterByVisible($visible); + + $product = $this->getProduct(); + $category = $this->getCategory(); + + if(null !== $product) { + $productCategories = ProductCategoryQuery::create()->select(array(ProductCategoryTableMap::CATEGORY_ID))->filterByProductId($product, Criteria::IN)->find()->getData(); + + if(null === $category) { + $category = $productCategories; + } else { + $category = array_merge($category, $productCategories); + } + } + + /* TODO */ + if(null !== $category) { + $search->filterByCategory( + ProductCategoryQuery::create()->select(array(ProductCategoryTableMap::CATEGORY_ID))->filterByProductId($product, Criteria::IN)->find(), + Criteria::IN + ); + } + + /** + * Criteria::INNER_JOIN in second parameter for joinWithI18n exclude query without translation. + * + * @todo : verify here if we want results for row without translations. + */ + + $search->joinWithI18n( + $this->request->getSession()->getLocale(), + (ConfigQuery::read("default_lang_without_translation", 1)) ? Criteria::LEFT_JOIN : Criteria::INNER_JOIN + ); + + $orders = $this->getOrder(); + + foreach($orders as $order) { + switch ($order) { + case "alpha": + $search->addAscendingOrderByColumn(\Thelia\Model\Map\FeatureI18nTableMap::TITLE); + break; + case "alpha_reverse": + $search->addDescendingOrderByColumn(\Thelia\Model\Map\FeatureI18nTableMap::TITLE); + break; + case "manual": + $search->orderByPosition(Criteria::ASC); + break; + case "manual_reverse": + $search->orderByPosition(Criteria::DESC); + break; + } + } + + $features = $this->search($search, $pagination); + + $loopResult = new LoopResult(); + + foreach ($features as $feature) { + $loopResultRow = new LoopResultRow(); + $loopResultRow->set("ID", $feature->getId()); + $loopResultRow->set("TITLE",$feature->getTitle()); + $loopResultRow->set("CHAPO", $feature->getChapo()); + $loopResultRow->set("DESCRIPTION", $feature->getDescription()); + $loopResultRow->set("POSTSCRIPTUM", $feature->getPostscriptum()); + + $loopResult->addRow($loopResultRow); + } + + return $loopResult; + } +} \ No newline at end of file diff --git a/templates/default/category.html b/templates/default/category.html index a46ffd2b3..7c003c805 100755 --- a/templates/default/category.html +++ b/templates/default/category.html @@ -48,10 +48,19 @@ {loop name="product" type="product" order="ref"}

PRODUCT #ID : #REF / #TITLE

+

Accessories

    {loop name="acc" type="accessory" product="#ID" order="accessory,max_price"}
  • #REF
  • {/loop}
+ +

Features

+
    + {loop name="ft" type="feature" order="manual" product="#ID"} +
  • #TITLE
  • + {/loop} +
+ {/loop} \ No newline at end of file