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


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

Обрамление


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

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

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

 

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

  1. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  2. {
  3. $attrs = array(
  4. 'class' => array(
  5. 'jbzoo-item',
  6. 'jbzoo-item-' . $item->type,
  7. 'jbzoo-item-' . $defaultLayout,
  8. 'jbzoo-item-' . $item->id
  9. )
  10. );
  11.  
  12. $output = $htmlItem;
  13. if ($defaultLayout != 'related'){//убираем для типа related
  14. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  15.  
  16. $wrapperTag = 'none';
  17. if ($this->application) {
  18. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  19. }
  20.  
  21. if ($wrapperTag != 'none') {
  22. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  23. }
  24. }
  25.  
  26. return $output;
  27. }
Перейти к сообщению


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

#1 inte

inte

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

Всем привет!

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

 

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

  1. <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

inte сказал(а) 29 Ноя 2018 - 09:40:

Всем привет!

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

 

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

  1. <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

mmth сказал(а) 29 Ноя 2018 - 12:00:

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

 

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

 

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

  1. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  2. {
  3. if (!$htmlItem) {
  4. return null;
  5. }
  6. $attrs = array(
  7. 'class' => array(
  8. 'jbzoo-item',
  9. 'jbzoo-item-' . $item->type,
  10. 'jbzoo-item-' . $defaultLayout,
  11. 'jbzoo-item-' . $item->id
  12. )
  13. );
  14. $output = $htmlItem;
  15. /*
  16. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  17.  
  18. $wrapperTag = 'none';
  19. if ($this->application) {
  20. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  21. }
  22.  
  23. if ($wrapperTag != 'none') {
  24. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  25. }
  26. */
  27. return $output;
  28. }
  29.  

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

Прикрепленные изображения

  • 1.png
  • 2.png
  • 3.png

  • 0

#4 mmth

mmth

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

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

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

 

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

  1. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  2. {
  3. $attrs = array(
  4. 'class' => array(
  5. 'jbzoo-item',
  6. 'jbzoo-item-' . $item->type,
  7. 'jbzoo-item-' . $defaultLayout,
  8. 'jbzoo-item-' . $item->id
  9. )
  10. );
  11.  
  12. $output = $htmlItem;
  13. if ($defaultLayout != 'related'){//убираем для типа related
  14. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  15.  
  16. $wrapperTag = 'none';
  17. if ($this->application) {
  18. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  19. }
  20.  
  21. if ($wrapperTag != 'none') {
  22. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  23. }
  24. }
  25.  
  26. return $output;
  27. }

  • 1

#5 inte

inte

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

mmth сказал(а) 29 Ноя 2018 - 13:18:

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

  1. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  2. {
  3. $attrs = array(
  4. 'class' => array(
  5. 'jbzoo-item',
  6. 'jbzoo-item-' . $item->type,
  7. 'jbzoo-item-' . $defaultLayout,
  8. 'jbzoo-item-' . $item->id
  9. )
  10. );
  11.  
  12. $output = $htmlItem;
  13. if ($defaultLayout != 'related'){//убираем для типа related
  14. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  15.  
  16. $wrapperTag = 'none';
  17. if ($this->application) {
  18. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  19. }
  20.  
  21. if ($wrapperTag != 'none') {
  22. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  23. }
  24. }
  25.  
  26. return $output;
  27. }

 
К сожалению этот вариант не сработал. Вначале получаю ошибку:
  1. 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

inte сказал(а) 29 Ноя 2018 - 14:13:

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

  1. 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

  1. <?php
  2. /**
  3. * JBZoo Application
  4. *
  5. * This file is part of the JBZoo CCK package.
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. *
  9. * @package Application
  10. * @license GPL-2.0
  11. * @copyright Copyright (C) JBZoo.com, All rights reserved.
  12. * @link https://github.com/JBZoo/JBZoo
  13. * @author Denis Smetannikov <denis@jbzoo.com>
  14. */
  15.  
  16. // no direct access
  17. defined('_JEXEC') or die('Restricted access');
  18.  
  19. /**
  20. * Class JBTemplateUikit
  21. */
  22. class JBTemplateUikit extends JBTemplate
  23. {
  24.  
  25. /**
  26. * On init template.
  27. *
  28. * @return void
  29. */
  30. public function onInit()
  31. {
  32. $this->app->jbuikit->assets($this->params);
  33.  
  34. $this->app->jbassets->less(array(
  35. 'jbassets:less/uikit.styles.less',
  36. 'jbassets:less/media/desktop.less',
  37. 'jbassets:less/media/tablet.less',
  38. 'jbassets:less/media/mobile.less',
  39. ));
  40. }
  41.  
  42. /**
  43. * Attributes for jbzoo wrapper.
  44. *
  45. * @return array|string
  46. */
  47. public function wrapperAttrs()
  48. {
  49. $attrs = array();
  50. $defaultAttrs = parent::wrapperAttrs();
  51. $isAddCss = $this->params->get('global.template.add_css', 'yes_gradient');
  52. $isGradient = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';
  53.  
  54. if ($this->application) {
  55. if (!(int)$this->params->get('global.config.rborder', 1)) {
  56. $attrs['class'][] = $this->prefix . '-no-border';
  57. }
  58.  
  59. $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;
  60.  
  61. if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
  62. $attrs['class'][] = 'jbmodal';
  63. }
  64. }
  65.  
  66. $attrs = array_merge_recursive($defaultAttrs, $attrs);
  67.  
  68. return $attrs;
  69. }
  70.  
  71. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  72. {
  73. $attrs = array(
  74. 'class' => array(
  75. 'jbzoo-item',
  76. 'jbzoo-item-' . $item->type,
  77. 'jbzoo-item-' . $defaultLayout,
  78. 'jbzoo-item-' . $item->id
  79. )
  80. );
  81. $output = $htmlItem;
  82. if ($defaultLayout != 'related'){//убираем для типа related
  83. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  84. $wrapperTag = 'none';
  85. if ($this->application) {
  86. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  87. }
  88. if ($wrapperTag != 'none') {
  89. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  90. }
  91. }
  92. return $output;
  93. }
  94. }
  95.  

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


  • 0

#9 mmth

mmth

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

inte сказал(а) 29 Ноя 2018 - 14:30:

  1. <?php
  2. /**
  3. * JBZoo Application
  4. *
  5. * This file is part of the JBZoo CCK package.
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. *
  9. * @package Application
  10. * @license GPL-2.0
  11. * @copyright Copyright (C) JBZoo.com, All rights reserved.
  12. * @link https://github.com/JBZoo/JBZoo
  13. * @author Denis Smetannikov <denis@jbzoo.com>
  14. */
  15.  
  16. // no direct access
  17. defined('_JEXEC') or die('Restricted access');
  18.  
  19. /**
  20. * Class JBTemplateUikit
  21. */
  22. class JBTemplateUikit extends JBTemplate
  23. {
  24.  
  25. /**
  26. * On init template.
  27. *
  28. * @return void
  29. */
  30. public function onInit()
  31. {
  32. $this->app->jbuikit->assets($this->params);
  33.  
  34. $this->app->jbassets->less(array(
  35. 'jbassets:less/uikit.styles.less',
  36. 'jbassets:less/media/desktop.less',
  37. 'jbassets:less/media/tablet.less',
  38. 'jbassets:less/media/mobile.less',
  39. ));
  40. }
  41.  
  42. /**
  43. * Attributes for jbzoo wrapper.
  44. *
  45. * @return array|string
  46. */
  47. public function wrapperAttrs()
  48. {
  49. $attrs = array();
  50. $defaultAttrs = parent::wrapperAttrs();
  51. $isAddCss = $this->params->get('global.template.add_css', 'yes_gradient');
  52. $isGradient = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';
  53.  
  54. if ($this->application) {
  55. if (!(int)$this->params->get('global.config.rborder', 1)) {
  56. $attrs['class'][] = $this->prefix . '-no-border';
  57. }
  58.  
  59. $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;
  60.  
  61. if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
  62. $attrs['class'][] = 'jbmodal';
  63. }
  64. }
  65.  
  66. $attrs = array_merge_recursive($defaultAttrs, $attrs);
  67.  
  68. return $attrs;
  69. }
  70.  
  71. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  72. {
  73. $attrs = array(
  74. 'class' => array(
  75. 'jbzoo-item',
  76. 'jbzoo-item-' . $item->type,
  77. 'jbzoo-item-' . $defaultLayout,
  78. 'jbzoo-item-' . $item->id
  79. )
  80. );
  81. $output = $htmlItem;
  82. if ($defaultLayout != 'related'){//убираем для типа related
  83. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  84. $wrapperTag = 'none';
  85. if ($this->application) {
  86. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  87. }
  88. if ($wrapperTag != 'none') {
  89. $output = '<' . $wrapperTag . ' ' . $attrs . '>' . $htmlItem . '</' . $wrapperTag . '>';
  90. }
  91. }
  92. return $output;
  93. }
  94. }
  95.  

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

 

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


mmth сказал(а) 29 Ноя 2018 - 14:44:

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

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


  • 0

#10 inte

inte

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

У меня JBZoo: 4.10.1

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

  1. <?php
  2. /**
  3. * JBZoo Application
  4. *
  5. * This file is part of the JBZoo CCK package.
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. *
  9. * @package Application
  10. * @license GPL-2.0
  11. * @copyright Copyright (C) JBZoo.com, All rights reserved.
  12. * @link https://github.com/JBZoo/JBZoo
  13. * @author Denis Smetannikov <denis@jbzoo.com>
  14. */
  15.  
  16. // no direct access
  17. defined('_JEXEC') or die('Restricted access');
  18.  
  19. /**
  20. * Class JBTemplateUikit
  21. */
  22. class JBTemplateUikit extends JBTemplate
  23. {
  24.  
  25. /**
  26. * On init template.
  27. *
  28. * @return void
  29. */
  30. public function onInit()
  31. {
  32. $this->app->jbuikit->assets($this->params);
  33.  
  34. $this->app->jbassets->less(array(
  35. 'jbassets:less/uikit.styles.less',
  36. 'jbassets:less/media/desktop.less',
  37. 'jbassets:less/media/tablet.less',
  38. 'jbassets:less/media/mobile.less',
  39. ));
  40. }
  41.  
  42. /**
  43. * Attributes for jbzoo wrapper.
  44. *
  45. * @return array|string
  46. */
  47. public function wrapperAttrs()
  48. {
  49. $attrs = array();
  50. $defaultAttrs = parent::wrapperAttrs();
  51. $isAddCss = $this->params->get('global.template.add_css', 'yes_gradient');
  52. $isGradient = ($isAddCss == 'yes_gradient') ? 'yes' : 'no';
  53.  
  54. if ($this->application) {
  55. if (!(int)$this->params->get('global.config.rborder', 1)) {
  56. $attrs['class'][] = $this->prefix . '-no-border';
  57. }
  58.  
  59. $attrs['class'][] = $this->prefix . '-gradient-' . $isGradient;
  60.  
  61. if ($isQuickView = $this->app->jbrequest->get('jbquickview', false)) {
  62. $attrs['class'][] = 'jbmodal';
  63. }
  64. }
  65.  
  66. $attrs = array_merge_recursive($defaultAttrs, $attrs);
  67.  
  68. return $attrs;
  69. }
  70.  
  71. public function renderItem(Item $item, $defaultLayout = 'teaser', $htmlItem)
  72. {
  73. $attrs = array(
  74. 'class' => array(
  75. 'aaajbzoo-item', // вот здесь
  76. 'aaajbzoo-item-' . $item->type, // здесь
  77. 'aaajbzoo-item-' . $defaultLayout, // и здесь
  78. 'aaajbzoo-item-' . $item->id // и тут
  79. )
  80. );
  81. $output = $htmlItem;
  82. if ($defaultLayout != 'related'){//убираем для типа related
  83. $attrs = $this->app->jbhtml->buildAttrs($attrs);
  84. $wrapperTag = 'none';
  85. if ($this->application) {
  86. $wrapperTag = $this->params->get('global.config.wrap_item_style', 'none');
  87. }
  88. if ($wrapperTag != 'none') {
  89. $output = '<span' . $attrs . '>' . $htmlItem . '</span>'; // и даже тут
  90. }
  91. }
  92. return $output;
  93. }
  94. }

Upd.:

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

Прикрепленные изображения

  • 4.png

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

  • 0




Click to return to top of page in style!