0 Пользователей и 1 Гость просматривают эту тему.
  • 23 Ответов
  • 728 Просмотров
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Использую Virtuemart3.
Имеется подобное дерево категорий: Категория1->Категория2->Продукт
Требуется взять фото товара как изображение для Категория1 из Продукт1.
Используя код ниже всё получается, но только если мы ставим этот код для Категория2..
Прошу помощи, пытался всячески адаптировать код, но не получается.

Код
		          <?php 
$productModel = VmModel::getModel('product');
$prod_in_category = $productModel->getProductListing(false, 1, false, true, true, true, $category->virtuemart_category_id);
$productModel->addImages($prod_in_category[0],1);
if(!empty($prod_in_category[0]->images[0])){
echo $prod_in_category[0]->images[0]->displayMediaThumb("",false);
} else {
echo $category->images[0]->displayMediaThumb("",false);
}
 ?>
« Последнее редактирование: 20.09.2020, 10:51:20 от Damarkuzz »
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
А где Вы хотите выводить такое фото категории: на странице категории или в списке категорий?

Если в списке - такой подход не очень хорош с точки зрения быстродействия и нагрузки.

Но могут быть и другие варианты достижения цели.
Возможно, будет интересно: Интеграция с Ozon
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Думаю, более оптимальным решением было бы сделать скрипт, который пробегается по категориям и, если у них нет изображения, то проставляет, взяв из товара, генерируя нужный размер. Можно даже нужный формат, например, webp.
Такой скрипт запускать по расписанию, скажем, 1-2 раза в день.
Возможно, будет интересно: Интеграция с Ozon
*

draff

  • Гуру
  • 5803
  • 432 / 7
  • ищу работу
В макете категории Вирт
Код
$productModel = VmModel::getModel('Product');
$productModel->addImages($this->products[0]);
if(!empty($this->products[0]->images[0]))
echo $this->products[0]->images[0]->displayMediaThumb ('class="sample-product__img"', FALSE);
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
В макете категории Вирт

Почему-то мне кажется, что картинка нужна не для вывода в макете категории )
Но дождёмся ответа ТС.
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
В макете категории Вирт
Код
$productModel = VmModel::getModel('Product');
$productModel->addImages($this->products[0]);
if(!empty($this->products[0]->images[0]))
echo $this->products[0]->images[0]->displayMediaThumb ('class="sample-product__img"', FALSE);
Благодарю за ответы. Проблема в том, что требуется вызвать не фото продуктов категории первичной вложенности, а продукты категории вторичной вложенности.
То есть:
   Категория 1
   -Категория 2
   --Товар 1
Нужно, чтобы для категории 1 вызывалось изображение Товар 1.

Надеюсь, объяснил понятно, не запутал.
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
А где Вы хотите выводить такое фото категории: на странице категории или в списке категорий?
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
На странице категории
Для самой этой категории или Для её подкатегорий?
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Для самой этой категории или Для её подкатегорий?
Для самой категории, которая Категория 1
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Думаю, Вы можете получить id первой дочерней категории, например, так:

Код
if (!empty($this->category->children[0]->virtuemart_category_id)) {
    $sub_id = $this->category->children[0]->virtuemart_category_id;
    // код, используя $sub_id
}

а потом подставить $sub_id в $prod_in_category вместо $category->virtuemart_category_id
Возможно, будет интересно: Интеграция с Ozon
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Возможно, в Вашем случае $this не надо.
Вы правите переопределение шаблона? Или какой файл?
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Возможно, в Вашем случае $this не надо.
Вы правите переопределение шаблона? Или какой файл?

Путь: /components/com_virtuemart/views/category/tmpl/default.php
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Возможно, в Вашем случае $this не надо.
Вы правите переопределение шаблона? Или какой файл?
Вставляю код:
Код
		     <?php
$productModel = VmModel::getModel('product');
$prod_in_category = $productModel->getProductListing(false, 1, false, true, true, true, $sub_id);
$productModel->addImages($prod_in_category[0],1);
if (!empty($category->children[0]->virtuemart_category_id)) {
$sub_id = $category->children[0]->virtuemart_category_id;
}
else {
echo $category->images[0]->displayMediaThumb("",false);
}
?>
Ничего не отображается, но и страница не крашится.
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Хотя нет, крашится с ошибкой
Код
Call to a member function displayMediaThumb() on null
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Вставляю код:
Код
		     <?php
$productModel = VmModel::getModel('product');
$prod_in_category = $productModel->getProductListing(false, 1, false, true, true, true, $sub_id);
$productModel->addImages($prod_in_category[0],1);
if (!empty($category->children[0]->virtuemart_category_id)) {
$sub_id = $category->children[0]->virtuemart_category_id;
}
else {
echo $category->images[0]->displayMediaThumb("",false);
}
?>
Только это вставили или ещё условие, которое я писал?
Покажите целиком.
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Благодарю всем за помощь, в итоге работает для моей задачи данный код:
Код
		
<?php
    $productModel = VmModel::getModel('product');
    $sub_id = $this->category->children[0]->virtuemart_category_id;
    $prod_in_category = $productModel->getProductListing(false, 1, true, true, true, true, $sub_id);
    $productModel->addImages($prod_in_category[0],1);
    echo '<img class="def1-cat-img" src="'.$prod_in_category[0]->file_url.'">';
?>
Отдельная благодарность @rsn
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Код
<?php
    $productModel = VmModel::getModel('product');
    $sub_id = $this->category->children[0]->virtuemart_category_id;
    $prod_in_category = $productModel->getProductListing(false, 1, true, true, true, true, $sub_id);
    $productModel->addImages($prod_in_category[0],1);
    echo '<img class="def1-cat-img" src="'.$prod_in_category[0]->file_url.'">';
?>

Я бы всё-таки предложил вставить условие
Код
if (!empty($this->category->children[0]->virtuemart_category_id)) {
    // код
}
Иначе - если, в категории не будет подкатегорий, то результат может быть для Вас неожиданным.
Возможна ошибка. Или предупреждение. Или вывод фото товара из Корневой категории.

Кроме того, лучше делать такие правки не в этом файле:
Путь: /components/com_virtuemart/views/category/tmpl/default.php
(его лучше не трогать)
- а сделать переопределение этого файла в своём шаблоне. Так корректнее. VirtueMart поддерживает переопределения.
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Я бы всё-таки предложил вставить условие


Вот так получается, в общем. В категории 2 на всех страницах подобного шаблона не грузит фотографию первой категории. Код, который Вы помогли составить отображается в "Категория 1"
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Код, который Вы помогли составить отображается в "Категория 1"
Вы же и спрашивали для Категория 1  ^-^
Кто же знал, что Вам надо, что этот же был расчитан одновременно на 2 случая )

Попробуйте так:
Код
if (!empty($this->category->children[0]->virtuemart_category_id)) {
    // код для Категории 1
}
else {
    // код для Категории 2, когда берет фото просто дочернего товара
}
(если я правильно понял, как выводите Категории 2)
Возможно, будет интересно: Интеграция с Ozon
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
не грузит фотографию первой категории
Если это подкатегории - для подкатегории с названием "3" установлено фото?
(как для 3Т, например)
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Если это подкатегории - для подкатегории с названием "3" установлено фото?
(как для 3Т, например)
Нет, у всех категорий вообще нет изображений, оно есть только у фото. Моя задача сделать так, чтобы не требовалось добавлять фото для категорий.
Спойлер
[свернуть]
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
А какой файл и фрагмент кода у Вас отвечает за вывод изображений для категорий 3Т, 5, 5Т на этой странице, которую Вы показали выше?
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
А какой файл и фрагмент кода у Вас отвечает за вывод изображений для категорий 3Т, 5, 5Т на этой странице, которую Вы показали выше?
Решил создать новую тему, мне показалось, что то, что я не упомянул двойной вывод фото уже другой топик Как устранить конфликт вызова фото в Virtuemart3?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Получить категории кастомных полей

Автор Zelyonkin

Ответов: 5
Просмотров: 161
Последний ответ 03.08.2022, 12:11:17
от sivers
Настраиваемые поля не отображаются в дочерней категории

Автор Dolphin4ik_1

Ответов: 0
Просмотров: 100
Последний ответ 13.07.2022, 16:05:02
от Dolphin4ik_1
Как сделать переопределение?

Автор Ykitero

Ответов: 0
Просмотров: 130
Последний ответ 11.07.2022, 14:11:08
от Ykitero
Блог категории и пагинация

Автор marksetter

Ответов: 4
Просмотров: 205
Последний ответ 30.06.2022, 08:01:21
от marksetter
Как стилизовать сортировку на странице категории товаров?

Автор NSS

Ответов: 2
Просмотров: 199
Последний ответ 03.06.2022, 14:56:56
от anatol81n