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


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

Доработка шаблона модуля Zoo Comment


Лучший Ответ zeus07 , 02 May 2016 - 08:53

Итак, хотел бы подытожить результат этой темы. 

 

1. Получение имени айтема.

Для этого необходим вот такой код 

<?php 
   $item = $comment->getItem(); //получаем объект item
   echo '<a href="' . $zoo->route->item($item) . '">' . $item->name . '</a>'; //вывод ссылки на item
?>

2. Получение изображения из айтема.

<?php 
   $item = $comment->getItem(); //получаем объект item
   $element = $item->getElement('<здесь ID элемента с картинкой>'); //получаем элемент, содержащий картинку
   $data = (array)$element->data(); // получаем данные и преобразуем в массив
?>
        
   <img src="<?php echo $data['file']; ?>" alt="<?php echo $item->name; ?>" /> // вывод картинки

Надеюсь, что подобная инструкция многим поможет.

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 31

#1 zeus07

zeus07

Отправлено 14 April 2016 - 14:20

Здравствуйте!

 

Дорабатываю под себя шаблон вывода модуля Zoo Comment. И мне необходимо вывести кроме стандартных полей ещё название материала и его картинку.

 

Через какие переменные можно получить эти данные? Нужно ли для этого подключать рендер, или можно обойтись без него?


  • 0

#2 SmetDenis

SmetDenis

Отправлено 15 April 2016 - 07:25

У объекта комментария должен быть доступ к материалу.

 

$item = $comment->getItem();

 

Имя материала - $item->name;

Получить картинки сложнее. нужно получить элемент через getElement()

http://forum.jbzoo.c...enta-zoo-jbzoo/


  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 happy home

happy home

Отправлено 15 April 2016 - 08:32

Здравствуйте.

 

Мне помогали Денис и Сергей с решением похожей задачи вот тут - http://forum.jbzoo.c...modul-ko/page-2, но по какой то причине само решение удалено из поста...

 

Попробую вспомнить... я создал копию модуля Zoo comments и в нем изменил файл темы "List" - которую вы выбираете в настройках модуля.

 

вот привожу содержимое файла темы modules\mod_zoocomment\tmpl\list.php

<?php
/**
* @package   ZOO Comment
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/

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

// include css
$zoo->document->addStylesheet('mod_zoocomment_all:tmpl/list/style.css');

?>

<?php if (count($comments)) : ?>

<section class="zoo-comments-list">

	<?php $i = 0; foreach ($comments as $comment) : ?>

		<?php // set author name
			$author = $comment->getAuthor();
			$author->name = $author->name ? $author->name : JText::_('COM_ZOO_ANONYMOUS');
		?>

		<noindex>
		<article class="<?php if ($author->isJoomlaAdmin()) echo 'comment-byadmin'; ?>">

		<table style="height: 100%;">
	<tbody>
		<tr>
			<td style="height: 150px !important; width: 170px !important;" valign="top"><?php if ($params->get('show_avatar', 1)) : ?>
			<br />
			<?php if ($params->get('show_meta', 1)) : ?>
			<p class="meta">
				<?php echo $zoo->html->_('date', $comment->created, $zoo->date->format(JText::_('ZOO_COMMENT_MODULE_DATE_FORMAT')), $zoo->date->getOffset()); ?>
			</p>
			<?php endif; ?>
			<br />
			<div class="avatar hov">
			<?php $item   = $comment->getItem();
                $params = array(
                    "display"  => "first",
                    "template" => "default",
                    "width"    => "150",
                    "height"   => "100",
                );
                $params = $zoo->data->create($params);
                $img    = $item->getElement('e95a11be-248d-4690-a505-8f84b575b773')->render($params);
                echo '<a href="' . $zoo->route->item($item) . '">' . $img . '</a>'; ?>
			</div>
			<?php endif; ?></td>
			<td rowspan="3" valign="top"><?php if ($params->get('show_author', 1)) : ?>
			<div>
			<?php  $item   = $comment->getItem();
			echo '<a href="' . $zoo->route->item($item) . '">' . $item->name . '</a>'; ?>
			</div><br />
			<p class="author h2">
				<?php if ($author->url) : ?><a href="<?php echo $author->url; ?>" title="<?php echo $author->url; ?>" rel="nofollow"><?php endif; ?>
				<?php echo $author->name; ?>
				<?php if ($author->url) : ?></a><?php endif; ?>
			</p>
			<?php endif; ?>
			<br />
			<div class="content"><p><?php echo $zoo->comment->filterContentOutput($zoo->string->truncate($comment->content, $zoo->get('commentsmodule.max_characters'))); ?></p></div>
			</td>
		</tr>
		<tr>
			<td style="height: 30px !important;" valign="top"><div><a href="<?php echo JRoute::_($zoo->route->comment($comment)); ?>">Подробнее о товаре...</a></div></td>
		</tr>
		<tr>
			<td>&nbsp;</td>
		</tr>
	</tbody>
</table>
		</article>
		</noindex>
		<hr class="dotted">

	<?php $i++; endforeach; ?>


</section>

<?php else : ?>
	<?php echo JText::_('COM_ZOO_NO_COMMENTS_FOUND'); ?>
<?php endif;

в строке 51 значение e95a11be-248d-4690-a505-8f84b575b773 вам необходимо заменить на собственное из элемента картинок jbimage

 

возможно в данном коде вы найдете необходимые вам переменные...

 

Вот это Заголовок комментируемого материала:

<?php $item = $comment->getItem();
echo '<a href="' . $zoo->route->item($item) . '">' . $item->name . '</a>'; ?>

а это изображение из модуля jbimage комментируемого материала:

<?php $item   = $comment->getItem();
                $params = array(
                    "display"  => "first",
                    "template" => "default",
                    "width"    => "150",
                    "height"   => "100",
                );
                $params = $zoo->data->create($params);
                $img    = $item->getElement('e95a11be-248d-4690-a505-8f84b575b773')->render($params);
                echo '<a href="' . $zoo->route->item($item) . '">' . $img . '</a>'; ?>

Сообщение отредактировал happy home: 15 April 2016 - 10:42

  • 4

#4 zeus07

zeus07

Отправлено 15 April 2016 - 18:06

Всем спасибо за помощь!  

 

С именем айтема получилось всё превосходно! Но вот с изображением так не прокатит, объясню почему. Суть в том, что на сайте 3 каталога, каждый каталог под один язык (русский, испанский, английский). Естественное, у каждого каталога элемент картинки свой. 

 

В принципе наверное через такой способ можно сделать, но нужно будет добавить проверку на язык, и уже в зависимости от выбранного языка отображать тот или иной элемент. 

 

И ещё. Каталог этот я обновлял с версии JBZoo 2.1.5, а изображение айтема там сделано с помощью стандартного элемента Zoo Image


  • 0

#5 SmetDenis

SmetDenis

Отправлено 18 April 2016 - 09:12

Но вот с изображением так не прокатит, объясню почему...
 

 

Тогда объект картинки можно выбирать по типу элемента, а не id

$elements = $item->getElementsByType('jbimage');
// или
$elements = $item->getElementsByType('image');
 
$element = $elements[0]; // вернется массив. берем первый элемент
print_r((array)$element->data()); // смотрим

 

либо делать зависимость идентификатора элемента от языка.

 

 

И ещё. Каталог этот я обновлял с версии JBZoo 2.1.5, а изображение айтема там сделано с помощью стандартного элемента Zoo Image

тогда тип будет "image"


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 zeus07

zeus07

Отправлено 18 April 2016 - 09:40

$elements = $item->getElementsByType('image');
 

 

У меня почему-то ругается на вот эту строку: 

Fatal error: Call to a member function getElementsByType() on a non-object in /home/artcolor/artcolorit.com/terra/templates/terrastudy/html/mod_zoocomment/slider.php on line 18

  • 0

#7 SmetDenis

SmetDenis

Отправлено 18 April 2016 - 09:42

Переменная материала $item существует?


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 zeus07

zeus07

Отправлено 18 April 2016 - 09:45

Видимо нет. Попытался объявить вот таким образом: 

$item = $comment->getItem();

Это верно? Если нет, подскажите пожалуйста как правильно.


  • 0

#9 SmetDenis

SmetDenis

Отправлено 18 April 2016 - 09:49

По идее правильно. Возможно этого материала больше не существует и вернулся null.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#10 zeus07

zeus07

Отправлено 18 April 2016 - 09:51

По идее null не возвращается, так как название айтема я получаю без проблем

 

На строку: 

$item = $comment->getItem();

Ругается вот так: 

Fatal error: Call to a member function getItem() on a non-object in /home/artcolor/artcolorit.com/terra/templates/terrastudy/html/mod_zoocomment/slider.php on line 18

Сообщение отредактировал zeus07: 18 April 2016 - 09:52

  • 0




Click to return to top of page in style!