From: vincent@cubedesigners.com Date: Wed, 29 Jun 2016 15:23:43 +0000 (+0000) Subject: Work on view helpers & models | wip #487 @2 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=bf86f70d6d675887ea11e97fb1bd3865f8b4220a;p=fluidbook-v3.git Work on view helpers & models | wip #487 @2 --- diff --git a/framework/application/forms/CMS/Sub/Exemples/Category.php b/framework/application/forms/CMS/Sub/Exemples/Category.php index 0be9386..d5c2bb5 100644 --- a/framework/application/forms/CMS/Sub/Exemples/Category.php +++ b/framework/application/forms/CMS/Sub/Exemples/Category.php @@ -10,12 +10,17 @@ class Fluidbook_Form_CMS_Sub_Exemples_Category extends CubeIT_Form_List_Model { $title = new Zend_Form_Element_Text('name'); $title->setLabel('Nom'); - $this->addElementLocalized($title,false); + $this->addElementLocalized($title, false); + + $sortorder = new CubeIT_Form_Element_Int('sortorder'); + $sortorder->setLabel('Ordre'); + $this->addElement($sortorder); $this->setListTitle('Exemples') ->setNewTitle('Créer une catégorie') ->setEditTitle('Edition de la catégory « $name »') ->setModel('Fluidbook_Model_Reference_Category') - ->setTitleColumn("name"); + ->setTitleColumn("name") + ->setAdditionnalColumns(array('sortorder')); } } \ No newline at end of file diff --git a/framework/application/forms/CMS/Sub/Exemples/Fluidbook.php b/framework/application/forms/CMS/Sub/Exemples/Fluidbook.php index d0a0dc4..e175a34 100644 --- a/framework/application/forms/CMS/Sub/Exemples/Fluidbook.php +++ b/framework/application/forms/CMS/Sub/Exemples/Fluidbook.php @@ -45,9 +45,7 @@ class Fluidbook_Form_CMS_Sub_Exemples_Fluidbook extends CubeIT_Form_List_Model { ->setEditTitle('Edition de l\'exemple « $title »') ->setModel('Fluidbook_Model_Reference') ->setTitleColumn("title") - ->setAdditionnalColumns(array('fluidbook_id', 'featured')) + ->setAdditionnalColumns(array('fluidbook_id', 'featured','date')) ->setSearchColumns(array('text', 'fluidbook_id')); } - - } \ No newline at end of file diff --git a/framework/application/models/Reference.php b/framework/application/models/Reference.php index 7fc37bd..42f3803 100644 --- a/framework/application/models/Reference.php +++ b/framework/application/models/Reference.php @@ -13,6 +13,8 @@ class Fluidbook_Model_Reference extends CubeIT_Model_Data_Table { protected $featured; protected $categories; + protected $_types = array('categories' => 'json', 'title' => 'json', 'text' => 'json', 'image' => 'json'); + public static function getSchema($schema) { $table = parent::getSchema($schema); $table->addColumn('title', 'text'); @@ -25,4 +27,18 @@ class Fluidbook_Model_Reference extends CubeIT_Model_Data_Table { $table->addColumn('categories', 'string', array('length' => 64)); return $table; } + + public function getUrl() { + $res = parent::getUrl(); + if (CubeIT_Util_Json::isJson($res)) { + $res = CubeIT_Util_Json::decode($res); + } + if (is_string($res)) { + return $res; + } + if (!$res->en) { + $res->en = $res->fr; + } + return $res; + } } \ No newline at end of file diff --git a/framework/application/models/Reference/Category.php b/framework/application/models/Reference/Category.php index fbed00d..8f38b6d 100644 --- a/framework/application/models/Reference/Category.php +++ b/framework/application/models/Reference/Category.php @@ -10,10 +10,12 @@ class Fluidbook_Model_Reference_Category extends CubeIT_Model_Data_Table{ protected static $_table = 'exemples_categories'; protected $name; + protected $sortorder; public static function getSchema($schema) { $table = parent::getSchema($schema); $table->addColumn('name', 'text'); + $table->addColumn('sortorder', 'integer'); return $table; } } \ No newline at end of file diff --git a/framework/application/views/helpers/Exemples.php b/framework/application/views/helpers/Exemples.php new file mode 100644 index 0000000..cb55b12 --- /dev/null +++ b/framework/application/views/helpers/Exemples.php @@ -0,0 +1,72 @@ +order('date', 'DESC')->find(); + + $max_featured = 2; + $normal_per_featured = 4; + $max_normal = $max_featured * $normal_per_featured; + + $featured = array(); + $normal = array(); + foreach ($exemples as $id => $exemple) { + if (!in_array($category, $exemple->getCategories())) { + continue; + } + + if ($exemple->getFeatured()) { + $featured[] = $id; + } else { + $normal[] = $id; + } + } + + + $nb_featured = count($featured); + if ($nb_featured < $max_featured) { + for ($i = $nb_featured; $i < $max_featured; $i++) { + $featured[] = array_shift($normal); + } + } + + $featured = array_slice($featured, 0, $max_featured); + $normal = array_slice($normal, 0, $max_normal); + + + $res = ''; + for ($i = 0; $i < $max_featured; $i++) { + $res .= $this->_publication($exemples[$featured[$i]], true); + for ($j = 0; $j < $normal_per_featured; $j++) { + $k = ($i * $normal_per_featured) + $j; + $res .= $this->_publication($exemples[$normal[$k]], false); + } + } + + return $this->htmlElement($res, 'section', array('class' => "exemples")); + } + + /** + * @param $f Fluidbook_Model_Reference + * @param bool $featured + */ + protected function _publication($f, $featured = false) { + $f = $f->unserialize(); + + $res = $this->htmlElement($f->getTitle(), 'h3'); + if ($featured) { + $res .= $this->htmlElement($f->getText(), 'p'); + } + $res .= $this->htmlElement(__('Voir le Fluidbook'), 'button', array('type' => 'button')); + $attrs = array(); + if ($featured) { + $attrs['class'] = 'featured'; + } + + return $this->link($res, $f->getUrl(), $attrs); + } +} \ No newline at end of file diff --git a/framework/application/views/scripts/templates/exemples.phtml b/framework/application/views/scripts/templates/exemples.phtml index 596ff1d..80fc927 100644 --- a/framework/application/views/scripts/templates/exemples.phtml +++ b/framework/application/views/scripts/templates/exemples.phtml @@ -1,7 +1,3 @@ exemples(1); \ No newline at end of file