Лучший Ответ kokgreat01 , 11 November 2014 - 07:49
Мне потребовалось настроить возможность вывода параметров в 3/4/5... колоночной таблице, причём кол-во колонок у каждого типа материала м.б. разным.
Например:
Параметр Ед.изм. Модель 1 Модель 2
Жесткий диск Гб 500 700
Процессор ГГц 1000 2000
....
Пообщавшись с разрабами, получил направление и реализовал примерно то, что нужно. Хочу описать, что сделано и спросить совет, а верно ли сделано?
1. Завел новый тип - loaderstype, настроил поля с параметрами как "повторяемые"
2. В /public_html/media/zoo/applications/jbuniversal/templates/catalog/renderer/element создал файл jbtable3c.php - это стиль
3. В файле full.php добавил этот стиль:
<?php if ($this->checkPosition('properties')) : ?> <div class="table-responsive"> <table class="table table-bordered table-hover table-condensed params table-responsive"> <?php echo $this->renderPosition('properties' , array( 'style' => 'jbtable3c', 'label' => array( 'tag' => 'td', // тег в котором будет заголовок ), 'element' => array( 'class' => 'prop' // класс элемента ) )); ?> </table> </div> <?php endif; ?>
<?php /** * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component * * @package jbzoo * @version 2.x Pro * @author JBZoo App http://jbzoo.com * @copyright Copyright (C) JBZoo.com, All rights reserved. * @license http://jbzoo.com/license-pro.php JBZoo Licence * @coder Denis Smetannikov <denis@jbzoo.com> */ // no direct access defined('_JEXEC') or die('Restricted access'); $label = ''; // Переменная в которой будет хранится заголовок /** * Т.к вывод заголовка можно указать в настройках элемента - это скрыть/показать. * Необходимо сделать данную проверку. */ if (isset($params['showlabel']) && $params['showlabel']) { // Принимаем тег заголовка, если его не указали ставимпо умолчанию тег td $labelTag = (!empty($params['label']['tag'])) ? $params['label']['tag'] : 'td' ; // Склеиваем тег и сам заголовок $label .= '<'.$labelTag.' class="par">'; $label .= $element->config->get('name'); $label .= '</'.$labelTag.'>'; } // create class attribute if (!isset($classes)) { $classes = array(); } // basic element classes $classes = array_merge( $classes, array( 'element-' . $element->getElementType(), str_replace('.', '-', $layout) ) ); // is first element in position if ($params['first']) { $classes[] = 'first'; } // is last element in position if ($params['last']) { $classes[] = 'last'; } // Принимаем класс элемента, если не указали не выводим $classes[] = (!empty($params['element']['class'])) ? $params['element']['class'] : '' ; /** * Выводим значения элементов/ * Функция render выводит в цикле значения элемента(ов) */ echo '<tr class="'. implode(' ', $classes).'">'.$label.$element->render($params).'</tr>'; // все значения элементов собираются последовательно в ячейки таблицы через Separated by TD (настройка в \media\zoo\applications\jbuniversal\elements\text\...)
5. Добавил запись в файл /public_html/media/zoo/applications/jbuniversal/elements/text/text.xml для выбора стиля обрамления каждого повторяемого параметра через Separated by TD.
<option name="TD"><![CDATA[tag=[<td class="td-item-val">%s</td>]]]></option>
6. Шапку таблицы (с несколькими колонками) тоже пришлось в виде параметров заводить (сайт//administrator/index.php?option=com_zoo&controller=manager&group=jbuniversal&task=editelements&cid%5B%5D=loaderstype)
7. Нужно теперь следить, чтобы повторяемых значений каждого параметра было одинаковое кол-во, пример, временно доступен здесь:
http://autote.tmweb....id=1&Itemid=161
Уф.. вроде всё описал.
Глядя на все эти костыли, хочу спросить у разрабов, а есть ли более элегантное (а значит правильное) решение?
Перейти к сообщению
