/** * Smarty {widget_product_gallery} function plugin * * Type: function * Name: microgalery * Date: January 11 2013 * Update: March 20 2014 * Purpose: * Output: * @author Gerits Aurelien * @author Sire Sam (sire-sam.be) * @link http://www.magix-cms.com * @version 1.0 * @param array * @param Smarty * @return string * */ function smarty_function_widget_product_gallery($params, $template) { $ModelSystem = new magixglobal_model_system(); $ModelConstructor = new magixglobal_model_constructor(); $ModelCatalog = new frontend_model_catalog(); // Set and load data $current = $ModelSystem->setCurrentId(); $conf = array('context' => 'product-gallery'); $data = $ModelCatalog->getData($conf, $current); $html = null; if ($data != null) { $pattern['default'] = patternMicroGallery(); $pattern['custom'] = null; if ($params['pattern']) { $pattern['custom'] = is_array($params['pattern']) ? $params['pattern'] : patternMicroGallery($params['pattern']); } $pattern['global'] = $ModelConstructor->mergeHtmlPattern($pattern['default'], $pattern['custom']); magixcjquery_debug_magixfire::magixFireTable('pattern', $pattern); magixcjquery_debug_magixfire::magixFireTable('pattern global', $pattern['global']); $i = 0; $items['html'] = null; foreach ($data as $row) { $i++; // *** Construit donées de l'item en array avec clée nominative unifiée ('name' => 'monname,'descr' => '<p>ma descr</p>,...) $item['data'] = $ModelCatalog->setItemData($row, $current); // Configuration de la structure HTML de l'item $pattern['item'] = $ModelConstructor->setItemPattern($pattern['global'], $i); if ($pattern['item']['img']['classLink'] != '') { $pattern['item']['img']['classLink'] = ' class="' . $pattern['item']['img']['classLink'] . '"'; } // remise à zero du compteur si élément est le dernier de la ligne if ($pattern['item']['is_last'] == 1) { $i = 0; } $items['html'] .= $pattern['item']['item']['before']; $items['html'] .= '<a href="' . $item['data']['imgSrc']['medium'] . '" rel="productGallery" title="Agrandir"' . $pattern['item']['img']['classLink'] . '>'; $items['html'] .= '<img src="' . $item['data']['imgSrc']['small'] . '" alt="Galery" />'; $items['html'] .= '</a>'; $items['html'] .= $pattern['item']['item']['after']; } } // *** ouput if ($items['html'] != null) { $html = isset($params['title']) ? $params['title'] : ''; $html .= $pattern['global']['container']['before']; $html .= isset($params['htmlPrepend']) ? $params['htmlPrepend'] : null; $html .= $items['html']; $html .= isset($params['htmlAppend']) ? $params['htmlAppend'] : null; $html .= $pattern['global']['container']['after']; } return $html; }
/** * Smarty plugin * @package Smarty * @subpackage plugins * Type: function * Name: widget_catalog_display * Date: 27/09/2013 * Update: 05/03/2013 * @author Samuel Lesire * @author Gerits Aurelien * @link htt://www.sire-sam.be, http://www.magix-dev.be * @version 1.1 * @param array * @param Smarty * @return string */ function smarty_function_widget_catalog_display($params, $template) { $ModelSystem = new magixglobal_model_system(); $ModelConstructor = new magixglobal_model_constructor(); $ModelCatalog = new frontend_model_catalog(); // Set and load data $current = $ModelSystem->setCurrentId(); $conf = is_array($params['conf']) ? $params['conf'] : array(); $data = $ModelCatalog->getData($conf, $current); $html = null; if ($data != null) { $pattern['default'] = patternCatalog(); $pattern['custom'] = null; if ($params['pattern']) { $pattern['custom'] = is_array($params['pattern']) ? $params['pattern'] : patternCatalog($params['pattern']); } $pattern['global'] = $ModelConstructor->mergeHtmlPattern($pattern['default'], $pattern['custom']); // *** format items loop (foreach item) // ** Loop management var $deep = 1; $deep_minus = $deep - 1; $deep_plus = $deep + 1; $pass_trough = 0; $data_empty = false; // ** Loop format & output var $row = array(); $items = array(); $i[$deep] = 0; // *** boucle / loop do { // *** loop management START if ($pass_trough == 0) { // Si je n'ai plus de données à traiter je vide ma variable $row[$deep] = null; } else { // Sinon j'active le traitement des données $pass_trough = 0; } // Si je suis au premier niveaux et que je n'ai pas de donnée à traiter if ($deep == 1 and $row[$deep] == null) { // récupération des données dans $data $row[$deep] = array_shift($data); } // Si ma donnée possède des sous-donnée sous-forme de tableau if (isset($row[$deep]['subdata'])) { if (is_array($row[$deep]['subdata']) and $row[$deep]['subdata'] != null) { // On monte d'une profondeur $deep++; $deep_minus++; $deep_plus++; // on récupére la première valeur des sous-données en l'éffacant du tableau d'origine $row[$deep] = array_shift($row[$deep_minus]['subdata']); // Désactive le traitement des données $pass_trough = 1; } } elseif ($deep != 1) { if ($row[$deep] == null) { if ($row[$deep_minus]['subdata'] == null) { // Si je n'ai pas de sous-données & pas de données à traiter & pas de frères à récupérer dans mon parent // ====> désactive le tableaux de sous-données du parent et retourne au niveau de mon parent unset($row[$deep_minus]['subdata']); unset($i[$deep]); $items[$deep] = $pattern['item']['container']['before'] . $items[$deep] . $pattern['item']['container']['after']; $deep--; $deep_minus = $deep - 1; $deep_plus = $deep + 1; } else { // Je récupère un frère dans mon parent $row[$deep] = array_shift($row[$deep_minus]['subdata']); } // Désactive le traitement des données $pass_trough = 1; } } // *** loop management END // *** list format START if ($row[$deep] != null and $pass_trough != 1) { $i[$deep]++; // Construit doonées de l'item en array avec clée nominative unifiée ('name' => 'monname,'descr' => '<p>ma descr</p>,...) $itemData = $ModelCatalog->setItemData($row[$deep], $current['catalog']); // Configuration de la structure HTML de l'item $pattern['global']['is_current'] = $itemData['active']; $pattern['global']['id'] = isset($itemData['id']) ? $itemData['id'] : 0; $pattern['global']['url'] = isset($itemData['url']) ? $itemData['url'] : '#'; $pattern['item'] = $ModelConstructor->setItemPattern($pattern['global'], $i[$deep], $deep); // Récupération de la taille de l'image if (isset($pattern['global']['img']['size_' . $deep])) { $row[$deep]['img_size'] = $pattern['global']['img']['size_' . $deep]; } elseif (isset($pattern['global']['img']['size'])) { $row[$deep]['img_size'] = $pattern['global']['img']['size']; } else { $row[$deep]['img_size'] = 'medium'; } $imgSize = isset($pattern['item']['img']['size']) ? $pattern['item']['img']['size'] : 'small'; if (isset($itemData['imgSrc'][$imgSize])) { $itemData['imgSrc'] = $itemData['imgSrc'][$imgSize]; } else { $itemData['imgSrc'] = $itemData['imgSrc']['default']; } // remise à zero du compteur si élément est le dernier de la ligne if ($pattern['item']['is_last'] == 1) { $i[$deep] = 0; } // Récupération de l'affichage pour le niveau $pattern['item']['display'] = is_array($pattern['global']['display'][$deep]) ? $pattern['global']['display'][$deep] : $pattern['global']['display'][1]; if ($pattern['item']['display'] == null) { $pattern['item']['display'] = $pattern['default']['display'][1]; } // Récupération des sous-données (enfants) if (isset($items[$deep_plus]) != null) { $subitems = $items[$deep_plus]; $items[$deep_plus] = null; } else { $subitems = null; } $item = null; foreach ($pattern['item']['display'] as $elem_type) { // BOUCLE de formatage des éléments contenus dans item $pattern['elem'] = $pattern['item'][$elem_type]; if (array_search($elem_type, $pattern['item']['display'])) { // Config class link $item_classLink = null; if (isset($pattern['elem']['classLink'])) { $item_classLink = ' class="' . $pattern['elem']['classLink'] . '"'; $item_classLink = $pattern['elem']['classLink'] == 'none' ? 'none' : $item_classLink; } // Format element on switch switch ($elem_type) { case 'name': $elem = $item_classLink != 'none' ? '<a' . $item_classLink . ' href="' . $itemData['url'] . '" title="' . $itemData['name'] . '">' : ''; $elem .= $itemData['name']; $elem .= $item_classLink != 'none' ? '</a>' : ''; break; case 'img': $elem = $item_classLink != 'none' ? '<a' . $item_classLink . ' href="' . $itemData['url'] . '" title="' . $itemData['name'] . '">' : ''; $elem .= '<img src="' . $itemData['imgSrc'] . '" alt="' . $itemData['name'] . '"/>'; $elem .= $item_classLink != 'none' ? '</a>' : ''; break; case 'descr': $elem = magixcjquery_form_helpersforms::inputCleanTruncate(magixcjquery_form_helpersforms::inputTagClean($itemData['content']), $pattern['item']['descr']['lenght'], $pattern['item']['descr']['delemiter']); break; case 'price': if (is_numeric($itemData['price'])) { $elem = $itemData['price'] . $pattern['item']['price']['currency']; } else { $elem = null; } break; default: $elem = null; } if ($elem != null) { $item .= $pattern['elem']['before']; $item .= $elem; $item .= $pattern['elem']['after']; } } } $items[$deep] .= $pattern['item']['item']['before']; $items[$deep] .= $item; $items[$deep] .= $subitems; $items[$deep] .= $pattern['item']['item']['after']; } // *** list format END // Si $data est vide => arrête la boucle if (empty($data) and $row[1] == null) { $data_empty = true; } } while ($data_empty == false); // *** container construct if ($items[1] != null) { $html = isset($params['title']) ? $params['title'] : ''; $html .= $pattern['global']['container']['before']; $html .= isset($params['prepend']) ? $params['prepend'] : null; $html .= $items[1]; $html .= isset($params['append']) ? $params['append'] : null; $html .= $pattern['global']['container']['after']; } else { $html = null; } } return $html; }
/** * Smarty {widget_catalog_nav} function plugin * * Type: function * Name: widget_catalog_nav * Date: 27/09/2012 * Update: 10/03/2013 * Output: * @author Sire Sam (http://www.sire-sam.be) * @author Gerits Aurélien (http://www.magix-dev.be) * @version 1.1 * @param array * @param Smarty * @return string */ function smarty_function_widget_catalog_nav($params, $template) { $ModelSystem = new magixglobal_model_system(); $ModelConstructor = new magixglobal_model_constructor(); $ModelCatalog = new frontend_model_catalog(); // Set and load data $current = $ModelSystem->setCurrentId(); $conf = is_array($params['conf']) ? $params['conf'] : array('context' => 'all'); $data = $ModelCatalog->getData($conf, $current); $current = $current['catalog']; $i = 1; $items = null; $output = null; if ($data != null) { // *** set html attribut $htmlAttr = isset($params['htmlAttribut']) ? $params['htmlAttribut'] : null; $id_container = isset($htmlAttr['id_container']) ? ' id="' . $htmlAttr['id_container'] . '"' : null; $class_container = isset($htmlAttr['class_container']) ? ' class="' . $htmlAttr['class_container'] . '"' : null; $class_current = isset($htmlAttr['class_current']) ? $htmlAttr['class_current'] : 'active'; // *** format items loop (foreach item) foreach ($data as $row_1) { $items_2 = null; if (isset($row_1['subdata']) and is_array($row_1['subdata']) and $row_1['subdata'] != null) { $sub_items_3 = null; foreach ($row_1['subdata'] as $row_2) { $items_3 = null; if (isset($row_2['subdata']) and is_array($row_2['subdata']) and $row_2['subdata'] != null) { foreach ($row_2['subdata'] as $row_3) { /** HTML FORMAT (LEVEL 3)**/ $data_item_3 = $ModelCatalog->setItemData($row_3, $current); if ($data_item_3['active'] === true) { $current_item = ' class="' . $class_current . '"'; } else { $current_item = null; } $items_3 .= '<li' . $current_item . '>'; $items_3 .= '<a href="' . $data_item_3['url'] . '" title="' . $data_item_3['name'] . '">'; $items_3 .= $data_item_3['name']; $items_3 .= '</a>'; $items_3 .= '</li>'; } } /** HTML FORMAT (LEVEL 2)**/ $data_item_2 = $ModelCatalog->setItemData($row_2, $current); if ($data_item_2['active'] === true) { $current_item = ' class="' . $class_current . '"'; } else { $current_item = null; } $items_2 .= '<li' . $current_item . '>'; $items_2 .= '<a href="' . $data_item_2['url'] . '" title="' . $data_item_2['name'] . '">'; $items_2 .= $data_item_2['name']; $items_2 .= '</a>'; $items_2 .= $items_3 != null ? '<ul class="hidden-sm">' . $items_3 . '</ul>' : ''; $items_2 .= '</li>'; } } /** HTML FORMAT (LEVEL 1)**/ $data_item = $ModelCatalog->setItemData($row_1, $current); if ($data_item['active'] === true) { $current_item = ' class="' . $class_current . '"'; } else { $current_item = null; } $items .= '<li' . $current_item . '>'; $items .= '<a href="' . $data_item['url'] . '" title="' . $data_item['name'] . '">'; $items .= $data_item['name']; $items .= '</a>'; $items .= $items_2 != null ? '<ul class="hidden-sm">' . $items_2 . '</ul>' : ''; $items .= '</li>'; } // *** container construct if ($items != null) { $output .= isset($params['title']) ? $params['title'] : null; $output .= '<ul' . $id_container . $class_container . '>'; $output .= isset($params['prepend']) ? $params['prepend'] : null; $output .= $items; $output .= isset($params['append']) ? $params['append'] : null; $output .= '</ul>'; } } return $output; }
/** * {widget_catalog_data conf =[ 'context' => 'product', 'sort' => 'name', 'plugins' => [ 'override' => 'dbCatalog', 'item' => [ 'my_field' => 'my_field' ] ] ] assign='productData' } {*<pre>{$productData|print_r}</pre>*} <div id="listing-product" class="product-list"> <div class="row"> {include file="catalog/loop/product.tpl" data=$productData} </div> </div> */ function smarty_function_widget_catalog_data($params, $template) { plugins_Autoloader::register(); $ModelSystem = new magixglobal_model_system(); $ModelCatalog = new frontend_model_catalog(); // Set and load data $current = $ModelSystem->setCurrentId(); $conf = is_array($params['conf']) ? $params['conf'] : array(); $override = $params['conf']['plugins']['override'] ? $params['conf']['plugins']['override'] : ''; $data = $ModelCatalog->getData($conf, $current, $override); $newrow = is_array($params['conf']['plugins']['item']) ? $params['conf']['plugins']['item'] : array(); $items = array(); if ($data != null) { // *** format items loop (foreach item) // ** Loop management var $deep = 1; $deep_minus = $deep - 1; $deep_plus = $deep + 1; $pass_trough = 0; $data_empty = false; // ** Loop format & output var $row = array(); $i[$deep] = 0; // *** boucle / loop do { // *** loop management START if ($pass_trough == 0) { // Si je n'ai plus de données à traiter je vide ma variable $row[$deep] = null; } else { // Sinon j'active le traitement des données $pass_trough = 0; } // Si je suis au premier niveaux et que je n'ai pas de donnée à traiter if ($deep == 1 and $row[$deep] == null) { // récupération des données dans $data $row[$deep] = array_shift($data); } // Si ma donnée possède des sous-donnée sous-forme de tableau if (isset($row[$deep]['subdata'])) { if (is_array($row[$deep]['subdata']) and $row[$deep]['subdata'] != null) { // On monte d'une profondeur $deep++; $deep_minus++; $deep_plus++; // on récupére la première valeur des sous-données en l'éffacant du tableau d'origine $row[$deep] = array_shift($row[$deep_minus]['subdata']); // Désactive le traitement des données $pass_trough = 1; } } elseif ($deep != 1) { if ($row[$deep] == null) { if ($row[$deep_minus]['subdata'] == null) { // Si je n'ai pas de sous-données & pas de données à traiter & pas de frères à récupérer dans mon parent // ====> désactive le tableaux de sous-données du parent et retourne au niveau de mon parent unset($row[$deep_minus]['subdata']); unset($i[$deep]); $deep--; $deep_minus = $deep - 1; $deep_plus = $deep + 1; } else { // Je récupère un frère dans mon parent $row[$deep] = array_shift($row[$deep_minus]['subdata']); } // Désactive le traitement des données $pass_trough = 1; } } // *** loop management END // *** list format START if ($row[$deep] != null and $pass_trough != 1) { $i[$deep]++; // Construit les données de l'item en array avec clée nominative unifiée ('name' => 'monname,'descr' => '<p>ma descr</p>,...) $itemData = $ModelCatalog->setItemData($row[$deep], $current['catalog'], $newrow); // Récupération des sous-données (enfants) if (isset($items[$deep_plus]) != null) { $itemData['subdata'] = $items[$deep_plus]; $items[$deep_plus] = null; } else { $subitems = null; } $items[$deep][] = $itemData; } // Si $data est vide => arrête la boucle if (empty($data) and $row[1] == null) { $data_empty = true; } } while ($data_empty == false); // *** container construct } $assign = isset($params['assign']) ? $params['assign'] : 'data'; $template->assign($assign, $items[$deep]); }
/** * Assign product's data to smarty * @access private */ private function load_product_data() { $template = new frontend_model_template(); $Catalog = new frontend_model_catalog(); $data = parent::s_product_data($this->idProduct); $dataClean = $Catalog->setItemData($data, true); $template->assign('product', $dataClean, true); $this->load_category_data(); $this->load_subcategory_data(); }