Best Answer 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
Уф.. вроде всё описал.
Глядя на все эти костыли, хочу спросить у разрабов, а есть ли более элегантное (а значит правильное) решение?
Go to the full post


This topic is locked









