Перейти к содержимому


Фотография
- - - - -

Связанные элементы - ручной выбор/ Возможна ли настройка вывода не в одbн столбец

связанные элементы related item

Сообщений в теме: 7

#1 Maxi-all

Maxi-all

Отправлено 01 July 2016 - 06:53

на данный момент по умолчанию вывод в один столбец. А возможна ли настройка в несколько столбцов, в зависимости от необходимости, как в авто релейтидах????

или только править файлы? Тогда где и как??? 


  • 0

#2 MOKEV

MOKEV

Отправлено 01 July 2016 - 09:28

Да возможна.

1. В файле ..\media\zoo\elements\relateditems\relateditems.xml добавляем в группу "render"параметры

<param name="columns" type="radio" default="0" label="JBZOO_RELATEDAUTO_COLUMNS"
               description="JBZOO_RELATEDAUTO_COLUMNS_DESC">
            <option value="1">JBZOO_NUMBERS_1</option>
            <option value="2">JBZOO_NUMBERS_2</option>
            <option value="3">JBZOO_NUMBERS_3</option>
            <option value="4">JBZOO_NUMBERS_4</option>
            <option value="5">JBZOO_NUMBERS_5</option>
            <option value="6">JBZOO_NUMBERS_6</option>
            <option value="0">JBZOO_NOT_USE</option>
        </param>

2. В файле ..\media\zoo\elements\relateditems\relateditems.php заменяем функцию "render" на

public function render($params = array()) {

		// init vars
		$params   = $this->app->data->create($params);
		$renderer = $this->app->renderer->create('item')->addPath(array($this->app->path->path('component.site:'), $this->_item->getApplication()->getTemplate()->getPath()));
		$items    = $this->_orderItems($this->_getRelatedItems($params), $params->get('order'));

		// create output
		$layout   = $params->get('layout');
		$output   = array();
		foreach ($items as $item) {
			$path   = 'item';
			$prefix = 'item.';
			$type   = $item->getType()->id;
			if ($renderer->pathExists($path.DIRECTORY_SEPARATOR.$type)) {
				$path   .= DIRECTORY_SEPARATOR.$type;
				$prefix .= $type.'.';
			}

			if (in_array($layout, $renderer->getLayouts($path))) {
				$output[] = $renderer->render($prefix.$layout, array('item' => $item));
			} elseif ($params->get('link_to_item', false) && $item->getState()) {
				$output[] = '<a href="'.$this->app->route->item($item).'" title="'.$item->name.'">'.$item->name.'</a>';
			} else {
				$output[] = $item->name;
			}
		}
		
		$columns = $params->get('columns', 1);
        if ($columns > 0 && $params->get('layout', false)) {
            if ($layout = $this->getLayout()) {
                return self::renderLayout(
                    $layout, array(
                        'items'   => $output,
                        'columns' => $columns
                    )
                );
            }
        }

		return $this->app->element->applySeparators($params->get('separated_by'), $output);
	}

3. В папке ..\media\zoo\elements\relateditems\tmpl создаём файл relateditems.php и пишем туда вот это

<?php
// no direct access
defined('_JEXEC') or die('Restricted access');


$count = count($items);

if ($count) {

    $appParams = $this->getItem()->getApplication()->params;
    if ((int)$appParams->get('global.config.column_heightfix', 0)) {
        $this->app->jbassets->heightFix();
    }

    echo '<div class="related-items related-items-col-' . $columns . ' clearfix">';

    $j = 0;
    foreach ($items as $item) {

        $classes = array(
            'rborder',
            'column',
            'width' . intval(100 / $columns)
        );

        $first = ($j == 0) ? $classes[] = 'first' : '';
        $last  = ($j == $count - 1) ? $classes[] = 'last' : '';
        $j++;

        $isLast = $j % $columns == 0;

        if ($isLast) {
            $classes[] = 'last';
        }

        echo '<div class="' . implode(' ', $classes) . '">'
                . '<div class="jb-box">'
                    . $item
                . '</div>'
            . '</div>';
    }

    echo '</div>';
}


Сообщение отредактировал Evgeny_M: 01 July 2016 - 09:29

  • 1

#3 Maxi-all

Maxi-all

Отправлено 04 July 2016 - 06:00

спасибо, пробуем


  • 0

#4 annaaa

annaaa

Отправлено 12 July 2018 - 21:09

Спасибо за решение! элементы выстраиваются в ряд. но в итоге наползают друг на друга( настройки прилагаю. Что я сделала не так?)

 

http://gspland.ru/im...6plusr500-5-egl

 

 

Да возможна.

1. В файле ..\media\zoo\elements\relateditems\relateditems.xml добавляем в группу "render"параметры

<param name="columns" type="radio" default="0" label="JBZOO_RELATEDAUTO_COLUMNS"
               description="JBZOO_RELATEDAUTO_COLUMNS_DESC">
            <option value="1">JBZOO_NUMBERS_1</option>
            <option value="2">JBZOO_NUMBERS_2</option>
            <option value="3">JBZOO_NUMBERS_3</option>
            <option value="4">JBZOO_NUMBERS_4</option>
            <option value="5">JBZOO_NUMBERS_5</option>
            <option value="6">JBZOO_NUMBERS_6</option>
            <option value="0">JBZOO_NOT_USE</option>
        </param>

2. В файле ..\media\zoo\elements\relateditems\relateditems.php заменяем функцию "render" на

public function render($params = array()) {

		// init vars
		$params   = $this->app->data->create($params);
		$renderer = $this->app->renderer->create('item')->addPath(array($this->app->path->path('component.site:'), $this->_item->getApplication()->getTemplate()->getPath()));
		$items    = $this->_orderItems($this->_getRelatedItems($params), $params->get('order'));

		// create output
		$layout   = $params->get('layout');
		$output   = array();
		foreach ($items as $item) {
			$path   = 'item';
			$prefix = 'item.';
			$type   = $item->getType()->id;
			if ($renderer->pathExists($path.DIRECTORY_SEPARATOR.$type)) {
				$path   .= DIRECTORY_SEPARATOR.$type;
				$prefix .= $type.'.';
			}

			if (in_array($layout, $renderer->getLayouts($path))) {
				$output[] = $renderer->render($prefix.$layout, array('item' => $item));
			} elseif ($params->get('link_to_item', false) && $item->getState()) {
				$output[] = '<a href="'.$this->app->route->item($item).'" title="'.$item->name.'">'.$item->name.'</a>';
			} else {
				$output[] = $item->name;
			}
		}
		
		$columns = $params->get('columns', 1);
        if ($columns > 0 && $params->get('layout', false)) {
            if ($layout = $this->getLayout()) {
                return self::renderLayout(
                    $layout, array(
                        'items'   => $output,
                        'columns' => $columns
                    )
                );
            }
        }

		return $this->app->element->applySeparators($params->get('separated_by'), $output);
	}

3. В папке ..\media\zoo\elements\relateditems\tmpl создаём файл relateditems.php и пишем туда вот это

<?php
// no direct access
defined('_JEXEC') or die('Restricted access');


$count = count($items);

if ($count) {

    $appParams = $this->getItem()->getApplication()->params;
    if ((int)$appParams->get('global.config.column_heightfix', 0)) {
        $this->app->jbassets->heightFix();
    }

    echo '<div class="related-items related-items-col-' . $columns . ' clearfix">';

    $j = 0;
    foreach ($items as $item) {

        $classes = array(
            'rborder',
            'column',
            'width' . intval(100 / $columns)
        );

        $first = ($j == 0) ? $classes[] = 'first' : '';
        $last  = ($j == $count - 1) ? $classes[] = 'last' : '';
        $j++;

        $isLast = $j % $columns == 0;

        if ($isLast) {
            $classes[] = 'last';
        }

        echo '<div class="' . implode(' ', $classes) . '">'
                . '<div class="jb-box">'
                    . $item
                . '</div>'
            . '</div>';
    }

    echo '</div>';
}

 

Прикрепленные файлы

  • Прикрепленный файл  1212.jpg   55.29К   0 Количество загрузок:

  • 0

#5 mmth

mmth

Отправлено 13 July 2018 - 03:57

Спасибо за решение! элементы выстраиваются в ряд. но в итоге наползают друг на друга( настройки прилагаю. Что я сделала не так?)

 

http://gspland.ru/im...6plusr500-5-egl

Пользуйтесь консолью разработчика гугл хром (правой кнопкой по элементу на странице и выбираем в контекстом меню "Посмотреть код"), к данному решению вопросов у Вас нет!

У Вас проблема в верстке, выше по дереву элементов если подниметесь

......
<div class="jb-row item-related">
  <div class="width20"> вот это класс width20 вам портит внешний вид, его нужно убрать
    Аксессуары
    <div class="related-items related-items-col-5 clearfix">
......


  • 1

#6 annaaa

annaaa

Отправлено 13 July 2018 - 19:48

 

Пользуйтесь консолью разработчика гугл хром (правой кнопкой по элементу на странице и выбираем в контекстом меню "Посмотреть код"), к данному решению вопросов у Вас нет!

У Вас проблема в верстке, выше по дереву элементов если подниметесь

......
<div class="jb-row item-related">
  <div class="width20"> вот это класс width20 вам портит внешний вид, его нужно убрать
    Аксессуары
    <div class="related-items related-items-col-5 clearfix">
......

Спасибо! Выручили=) Теперь все отлично. Только еще один маленький вопросик) У меня высота всех элементов одинаковая, я включила в настройках "JS фикс высоты колонок". Но эта опция не распространяется на строчку связанных товаров. Это можно как-то исправить? Или слишком сложно и лучше поиграться с названиями?)) 


  • 0

#7 mmth

mmth

Отправлено 14 July 2018 - 07:54

 

 

Пользуйтесь консолью разработчика гугл хром (правой кнопкой по элементу на странице и выбираем в контекстом меню "Посмотреть код"), к данному решению вопросов у Вас нет!

У Вас проблема в верстке, выше по дереву элементов если подниметесь

......
<div class="jb-row item-related">
  <div class="width20"> вот это класс width20 вам портит внешний вид, его нужно убрать
    Аксессуары
    <div class="related-items related-items-col-5 clearfix">
......

Спасибо! Выручили=) Теперь все отлично. Только еще один маленький вопросик) У меня высота всех элементов одинаковая, я включила в настройках "JS фикс высоты колонок". Но эта опция не распространяется на строчку связанных товаров. Это можно как-то исправить? Или слишком сложно и лучше поиграться с названиями?)) 

 

опять же советую учиться читать код со страницы, есть функция JBZooHeightFix, там указано для кого она отрабатывает

нужно у div c  классом related-items добавить класс "items" или чуть выше


  • 1

#8 annaaa

annaaa

Отправлено 14 July 2018 - 22:56

опять же советую учиться читать код со страницы, есть функция JBZooHeightFix, там указано для кого она отрабатывает

нужно у div c  классом related-items добавить класс "items" или чуть выше

Спасибо! Не догадалась, что нужно добавить этот класс) Да, теперь все отлично работает.


  • 1





Темы с аналогичным тегами связанные элементы, related item

Click to return to top of page in style!