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


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

Обрамление


Лучший Ответ mmth , 29 November 2018 - 14:18

Решается всё очень просто, переопределение функции в шаблоне, идем по пути:

media\zoo\applications\jbuniversal\templates\название_шаблон\template.php

 

Переопределяем функцию добавив код:

public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );

        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);

            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }

            if ($wrapperTag != 'none') {
                $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
            }
        }

        return $output;
    }
Перейти к сообщению


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

#1 inte

inte

Отправлено 29 November 2018 - 10:40

Всем привет!

Вроде бы раньше подобная тема уже поднималась, но увы, не нашел ее.

 

Как можно рендерить элемент, в частности jbrelatedauto без обрамляющей верстки? Каждый экземпляр элемента обрамляется стандартным набором классов из /jbuniversal/framework/classes/jbtemplate.php в renderItem(); на 167 строке. Собственно точно так же как и итем. 

<div class="jbzoo-item jbzoo-item-bouquets jbzoo-item-full jbzoo-item-1"> 

Я пытаюсь сделать свой шаблон и мне важна html разметка для получения нужного результата. А в таком случае каждый элемент li списка ul обрамляется вышеуказанным блоком, что не позволяет достичь нужного результата. 

 

Подскажите, как избавится этого блока? То есть, как вывести только код из related.php, который не будет обрамлен упомянутым блоком (он же и сам итем (статью) обрамляет)?

 

Заранее спасибо!

 

 


Сообщение отредактировал inte: 29 November 2018 - 13:49

  • 0

#2 mmth

mmth

Отправлено 29 November 2018 - 13:00

Всем привет!

Вроде бы раньше подобная тема уже поднималась, но увы, не нашел ее.

 

Как можно рендерить элемент, в частности jbrelatedauto без обрамляющей верстки? Каждый экземпляр элемента обрамляется стандартным набором классов из /jbuniversal/framework/classes/jbtemplate.php в renderItem(); на 167 строке. Собственно точно так же как и итем. 

<div class="jbzoo-item jbzoo-item-bouquets jbzoo-item-full jbzoo-item-1"> 

Я пытаюсь сделать свой шаблон и мне важна html разметка для получения нужного результата. А в таком случае каждый элемент li списка ul обрамляется вышеуказанным блоком, что не позволяет достичь нужного результата. 

 

Подскажите, как избавится этого блока? То есть, как вывести только код из related.php, который не будет обрамлен упомянутым блоком (он же и сам итем (статью) обрамляет)?

 

Заранее спасибо!

в настройках приложения убираются div рамки для item-teaser, попробуйте, может и для этого уберется, если нет, то посмотреть элемента в function render что происходит


  • 0

#3 inte

inte

Отправлено 29 November 2018 - 13:43

в настройках приложения убираются div рамки для item-teaser, попробуйте, может и для этого уберется, если нет, то посмотреть элемента в function render что происходит

 

К сожалению я уже это сделал. Для наглядности прикрепил скрины. Суть такая, что элемент jbrelatedauto минимально оборачивается тем же блоком с классами, что при renderItem() при том, что вызывается renderPosition();

 

Конечно, можно в /jbuniversal/framework/classes/jbtemplate.php закомментировать несколько строк и получить желаемый результат:

    public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        if (!$htmlItem) {
            return null;
        }
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );
        $output = $htmlItem;
    /* 
        $attrs  = $this->app->jbhtml->buildAttrs($attrs);

        $wrapperTag = 'none';
        if ($this->application) {
            $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
        }

        if ($wrapperTag != 'none') {
            $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
        }
     */
        return $output;
    }

но это не комильфо. Это не гибко и придется править после каждого обновления. 

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

  • Прикрепленный файл  1.png   26.99К   0 Количество загрузок:
  • Прикрепленный файл  2.png   133.85К   0 Количество загрузок:
  • Прикрепленный файл  3.png   203.83К   0 Количество загрузок:

  • 0

#4 mmth

mmth

Отправлено 29 November 2018 - 14:18   Лучший Ответ

Решается всё очень просто, переопределение функции в шаблоне, идем по пути:

media\zoo\applications\jbuniversal\templates\название_шаблон\template.php

 

Переопределяем функцию добавив код:

public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );

        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);

            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }

            if ($wrapperTag != 'none') {
                $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
            }
        }

        return $output;
    }

  • 1

#5 inte

inte

Отправлено 29 November 2018 - 15:13

Решается всё очень просто, переопределение функции в шаблоне, идем по пути:
media\zoo\applications\jbuniversal\templates\название_шаблон\template.php
 
Переопределяем функцию добавив код:

public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );

        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);

            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }

            if ($wrapperTag != 'none') {
                $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
            }
        }

        return $output;
    }

 
К сожалению этот вариант не сработал. Вначале получаю ошибку:
0 syntax error, unexpected 'public' (T_PUBLIC), expecting end of file
если сделать без 'public' ошибка пропадает, но и функция не переопределяется. То же самое происходит, если подставить "обрезанную" функцию из третьего поста ветки http://forum.jbzoo.c...dauto/?p=108473
 
Но спасибо и на этом!

Сообщение отредактировал inte: 29 November 2018 - 15:14

  • 0

#6 mmth

mmth

Отправлено 29 November 2018 - 15:22

 
К сожалению этот вариант не сработал. Вначале получаю ошибку:

0 syntax error, unexpected 'public' (T_PUBLIC), expecting end of file
если сделать без 'public' ошибка пропадает, но и функция не переопределяется. То же самое происходит, если подставить "обрезанную" функцию из третьего поста ветки http://forum.jbzoo.c...dauto/?p=108473
 
Но спасибо и на этом!

 

код у себя в песочнице проверил, он рабочий, может вставили не туда, приложите получившийся файл сюда

P.S. судя по ошибке вы вставили мимо класса просто в файл


Сообщение отредактировал mmth: 29 November 2018 - 15:23

  • 0

#7 inte

inte

Отправлено 29 November 2018 - 15:24

В спешке я немного напутал и вставил функцию параллельно с классом JBTemplateUikit, вместо того, что сделать ее членом класса. Но даже так это не работает, к сожалению.
  • 0

#8 inte

inte

Отправлено 29 November 2018 - 15:30

<?php
/**
 * JBZoo Application
 *
 * This file is part of the JBZoo CCK package.
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @package    Application
 * @license    GPL-2.0
 * @copyright  Copyright (C) JBZoo.com, All rights reserved.
 * @link       https://github.com/JBZoo/JBZoo
 * @author     Denis Smetannikov <denis@jbzoo.com>
 */

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

/**
 * Class JBTemplateUikit
 */
class JBTemplateUikit extends JBTemplate
{

    /**
     * On init template.
     *
     * @return void
     */
    public function onInit()
    {
        $this->app->jbuikit->assets($this->params);

        $this->app->jbassets->less(array(
            'jbassets:less/uikit.styles.less',
            'jbassets:less/media/desktop.less',
            'jbassets:less/media/tablet.less',
            'jbassets:less/media/mobile.less',
        ));
    }

    /**
     * Attributes for jbzoo wrapper.
     *
     * @return array|string
     */
    public function wrapperAttrs()
    {
        $attrs        = array();
        $defaultAttrs = parent::wrapperAttrs();
        $isAddCss     = $this->params->get('global.template.add_css', 'yes_gradient');
        $isGradient   = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';

        if ($this->application) {
            if (!(int)$this->params->get('global.config.rborder', 1)) {
                $attrs['class'][] = $this->prefix . '-no-border';
            }

            $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;

            if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
                $attrs['class'][] = 'jbmodal';
            }
        }

        $attrs = array_merge_recursive($defaultAttrs, $attrs);

        return $attrs;
    }

    public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );
 
        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);
 
            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }
 
            if ($wrapperTag != 'none') {
                $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
            }
        }
 
        return $output;
    }
}

Пример с вашим кодом. Тот же результат если применяю код функции с закомментированными строками обрамления. Странно что у вас работает, а у меня нет.


  • 0

#9 mmth

mmth

Отправлено 29 November 2018 - 15:45

<?php
/**
 * JBZoo Application
 *
 * This file is part of the JBZoo CCK package.
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @package    Application
 * @license    GPL-2.0
 * @copyright  Copyright (C) JBZoo.com, All rights reserved.
 * @link       https://github.com/JBZoo/JBZoo
 * @author     Denis Smetannikov <denis@jbzoo.com>
 */

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

/**
 * Class JBTemplateUikit
 */
class JBTemplateUikit extends JBTemplate
{

    /**
     * On init template.
     *
     * @return void
     */
    public function onInit()
    {
        $this->app->jbuikit->assets($this->params);

        $this->app->jbassets->less(array(
            'jbassets:less/uikit.styles.less',
            'jbassets:less/media/desktop.less',
            'jbassets:less/media/tablet.less',
            'jbassets:less/media/mobile.less',
        ));
    }

    /**
     * Attributes for jbzoo wrapper.
     *
     * @return array|string
     */
    public function wrapperAttrs()
    {
        $attrs        = array();
        $defaultAttrs = parent::wrapperAttrs();
        $isAddCss     = $this->params->get('global.template.add_css', 'yes_gradient');
        $isGradient   = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';

        if ($this->application) {
            if (!(int)$this->params->get('global.config.rborder', 1)) {
                $attrs['class'][] = $this->prefix . '-no-border';
            }

            $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;

            if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
                $attrs['class'][] = 'jbmodal';
            }
        }

        $attrs = array_merge_recursive($defaultAttrs, $attrs);

        return $attrs;
    }

    public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'jbzoo-item',
                'jbzoo-item-' . $item->type,
                'jbzoo-item-' . $defaultLayout,
                'jbzoo-item-' . $item->id
            )
        );
 
        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);
 
            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }
 
            if ($wrapperTag != 'none') {
                $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
            }
        }
 
        return $output;
    }
}

Пример с вашим кодом. Тот же результат если применяю код функции с закомментированными строками обрамления. Странно что у вас работает, а у меня нет.

 

попробуйте просто закомментировать то, что после в if с related


попробуйте просто закомментировать то, что после в if с related

а версия у вас какая zoo jbzoo ?


  • 0

#10 inte

inte

Отправлено 29 November 2018 - 16:07

У меня JBZoo: 4.10.1

Для проверки немного изменил данные в коде, а именно имена классов и обрамляющие теги, но ничего этого я так и не увидел в исходном коде.

<?php
/**
 * JBZoo Application
 *
 * This file is part of the JBZoo CCK package.
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @package    Application
 * @license    GPL-2.0
 * @copyright  Copyright (C) JBZoo.com, All rights reserved.
 * @link       https://github.com/JBZoo/JBZoo
 * @author     Denis Smetannikov <denis@jbzoo.com>
 */

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

/**
 * Class JBTemplateUikit
 */
class JBTemplateUikit extends JBTemplate
{

    /**
     * On init template.
     *
     * @return void
     */
    public function onInit()
    {
        $this->app->jbuikit->assets($this->params);

        $this->app->jbassets->less(array(
            'jbassets:less/uikit.styles.less',
            'jbassets:less/media/desktop.less',
            'jbassets:less/media/tablet.less',
            'jbassets:less/media/mobile.less',
        ));
    }

    /**
     * Attributes for jbzoo wrapper.
     *
     * @return array|string
     */
    public function wrapperAttrs()
    {
        $attrs        = array();
        $defaultAttrs = parent::wrapperAttrs();
        $isAddCss     = $this->params->get('global.template.add_css', 'yes_gradient');
        $isGradient   = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';

        if ($this->application) {
            if (!(int)$this->params->get('global.config.rborder', 1)) {
                $attrs['class'][] = $this->prefix . '-no-border';
            }

            $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;

            if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
                $attrs['class'][] = 'jbmodal';
            }
        }

        $attrs = array_merge_recursive($defaultAttrs, $attrs);

        return $attrs;
    }

    public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
    {
        $attrs = array(
            'class' => array(
                'aaajbzoo-item',                    // вот здесь
                'aaajbzoo-item-' . $item->type,     // здесь
                'aaajbzoo-item-' . $defaultLayout,  // и здесь
                'aaajbzoo-item-' . $item->id        // и тут
            )
        );
 
        $output = $htmlItem;
        if ($defaultLayout != 'related'){//убираем для типа related
            $attrs  = $this->app->jbhtml->buildAttrs($attrs);
            $wrapperTag = 'none';
            if ($this->application) {
                $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
            }
            if ($wrapperTag != 'none') {
                $output = '<span' . $attrs . '>' . $htmlItem . '</span>'; // и даже тут
            }
        }
        return $output;
    }
}

Upd.:

На всякий случай даже обновил jbzoo )) но это ожидаемо не помогло.

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

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

Сообщение отредактировал inte: 29 November 2018 - 16:15

  • 0




Click to return to top of page in style!