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

Damarkuzz

  • Захожу иногда
  • 99
  • 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

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

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

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

rsn

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

draff

  • Гуру
  • 5194
  • 368 / 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

  • Захожу иногда
  • 490
  • 34 / 3
В макете категории Вирт

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

Damarkuzz

  • Захожу иногда
  • 99
  • 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

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

Damarkuzz

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

rsn

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

Damarkuzz

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

rsn

  • Захожу иногда
  • 490
  • 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

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

Damarkuzz

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

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

Damarkuzz

  • Захожу иногда
  • 99
  • 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

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

rsn

  • Захожу иногда
  • 490
  • 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

  • Захожу иногда
  • 99
  • 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

  • Захожу иногда
  • 490
  • 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

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


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

rsn

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

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

rsn

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

Damarkuzz

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

rsn

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

Damarkuzz

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

Лента новостей показывает только 9 материалов из категории

Автор Zixi 2020

Ответов: 1
Просмотров: 48
Последний ответ Сегодня в 10:13:35
от Zixi 2020
Как переопределить шаблон блога категории при переходе со списка категорий?

Автор Damarkuzz

Ответов: 0
Просмотров: 50
Последний ответ 17.04.2021, 01:54:26
от Damarkuzz
Сортировка по доп. полям на странице списка категории

Автор revil

Ответов: 3
Просмотров: 120
Последний ответ 08.04.2021, 10:34:08
от sivers
Как сделать обратную сортировку пунктов?

Автор Damarkuzz

Ответов: 1
Просмотров: 105
Последний ответ 02.04.2021, 22:50:51
от IToro82
Редактирования всплывающего окно Корзины VirtueMart

Автор DrShepard

Ответов: 10
Просмотров: 161
Последний ответ 30.03.2021, 13:50:03
от sivers