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

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Имеется скрипт:
Спойлер
[свернуть]

Делается это для того, чтобы потом сравнить title страницы и наименование категории, если совпадает - выводим инфу о категории.
Теперь о проблеме. Категорий около 30 000, когда я начинаю выполнять $parent_cat = $cat_model->getCategory($product->virtuemart_category_id); , страница начинает "думать".

Подозреваю, что делаю что-то не так. Пожалуйста, укажите, что не так. Спасибо заранее! ^-^
*

gartes

  • Завсегдатай
  • 1641
  • 127 / 5
  • Е = mс²
А сколько у Вас count( $products ) ?
Да и в обще - Вы для каждого товара в модели запрашиваете данные категории ..
Ну если сильно нужно то там по моему есть получить список категорий id которых в массиве !
то есть это будет 1 запрос а не == count( $products )
То есть если сильно хотите - то соберите id категорий в массив - и получите все категории одним запросом
что то типа
Код
' WHERE #__virtuemart_category.category_id IN ( ' . implode( ' , ' , $arrayCat_id ). ' ) ';
Ну или через модель - но своим запросом будет быстрей !
*

rsn

  • Захожу иногда
  • 486
  • 34 / 3
Код
if($products as $product) {
    ...
}
Может тут надо не if, а foreach?

Но дело даже не в этом.
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?
Возможно, будет интересно: Интеграция с Ozon
*

gartes

  • Завсегдатай
  • 1641
  • 127 / 5
  • Е = mс²
Может тут надо не if, а foreach?
Ха - А я и не глянул ! Что логический оператор перепутали с итерацией ! )))
то я бы на месте сервера - тоже долго думал бы что от меня хотят -  встретив такое  ! )))
*

rsn

  • Захожу иногда
  • 486
  • 34 / 3
я бы на месте сервера - тоже долго думал бы что от меня хотят -  встретив такое  ! )))

 :laugh:
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Может тут надо не if, а foreach?

Но дело даже не в этом.
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?

Прошу прощения, опечатался, в коде было именно foreach.
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
А сколько у Вас count( $products ) ?
Да и в обще - Вы для каждого товара в модели запрашиваете данные категории ..
Ну если сильно нужно то там по моему есть получить список категорий id которых в массиве !
то есть это будет 1 запрос а не == count( $products )
То есть если сильно хотите - то соберите id категорий в массив - и получите все категории одним запросом
что то типа
Код
' WHERE #__virtuemart_category.category_id IN ( ' . implode( ' , ' , $arrayCat_id ). ' ) ';
Ну или через модель - но своим запросом будет быстрей !

Прошу прощения, выше упомянул, что опечатался, на самом деле указан foreach,  а не if.

count( $products ) возвращает 710.
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
@rsn
Цитировать
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?

Возможно, вы знаете модуль mod_virtuemart_products, в нём есть функция фильтрации вывода товара по родительской категории.
У меня имеется около 400 страниц с некоторым "калькулятором ссылки" на исходный товар. На каждой из страниц необходимо вывести ссылку на товар + наименование товара + картинку товара.

Мой мозг, зеленый в подобных затеях, подумал: зачем создавать 400 модулей, если можно брать категорию из title страницы, и вывести товар по сверке title и соотв. категории.
Код
if (strpos($current_title, $allParentsCategory)!== false) {
*

gartes

  • Завсегдатай
  • 1641
  • 127 / 5
  • Е = mс²
Ну то как придумает так и решает !
Главное что бы это по ресурсам не затратно было !!
Кста - включите отладку (общие настройки Joomla ) и там можно посмотреть - сколько какой процесс - хавает памяти и времени ! -
*

rsn

  • Захожу иногда
  • 486
  • 34 / 3
@Damarkuzz не понял Вашу задачу. Попробуйте объяснить другими словами.
Возможно, будет интересно: Интеграция с Ozon
*

gartes

  • Завсегдатай
  • 1641
  • 127 / 5
  • Е = mс²
Код
count( $products ) возвращает 710.
Что то Вы точно не совсем то затеяли !
при таких количествах count( $products ) возвращает 710 - я бы не советовал в обще ни каких вычислений и расчетов проводить !
А тем более  в прямом потоке HTTP - Запроса !
*

gartes

  • Завсегдатай
  • 1641
  • 127 / 5
  • Е = mс²
не понял Вашу задачу. Попробуйте объяснить другими словами.
Та да ! - То ли объяснили не так - то ли - что то не то делаете - типа как делить на ноль ! == можно - но ненужно ! )))
*

draff

  • Гуру
  • 5188
  • 367 / 7
  • ищу работу
Делается это для того, чтобы потом сравнить title страницы и наименование категории, если совпадает - выводим инфу о категории.
Т.е. фильтрация PHP, а не SQL ?
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
@rsn
Цитировать
@Damarkuzz не понял Вашу задачу. Попробуйте объяснить другими словами.

Вкратце.

1) На 400 страницах в SP PageBuilder требуется вывести по одной категории товаров VirtueMart (всего 400 категорий).

2) Чтобы не создавать 400 разных модулей mod_virtuemart_products (на каждую категорию), я решил перебрать вызвать все товары через foreach ($products as $product). Возникает вопрос, как нам теперь из общего потока товаров всех категорий вывести нужную? (моё решение в п.3)

3) С помощью PHP мы берем title заголовка, и сопоставляем его с перечнем категорий
Код
foreach ($products as $product) {
   if (strpos($current_title, $allCategories)!== false) {
      print_r($product)
   }
}
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
@draff
Цитировать
Т.е. фильтрация PHP, а не SQL ?
Цитировать
Да, по другому пока что не умею
*

draff

  • Гуру
  • 5188
  • 367 / 7
  • ищу работу
Как вариант хак модуля, включить фильтр и добавить в точку входа модуля
$doc = JFactory::getDocument();
$current_title = $doc->getTitle();
$db = JFactory::getDbo();
            
            $query = $db
               ->getQuery(true)
               ->select('virtuemart_category_id')
               ->from($db->quoteName('#__virtuemart_categories_ru_ru'))
               ->where($db->quoteName('category_name'). " = " . $db->quote($current_title));
            $db->setQuery($query);
            $category_id = $db->loadResult();
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
@draff
Цитировать
Как вариант хак модуля, включить фильтр и добавить в точку входа модуля


Спасибо, пытался выполнить Ваш код, дописав некоторые вещи:


Спойлер
[свернуть]


Данным действиями я получил родительскую категорию, затем вызвал дочерние, в которых находятся товары, которые нужно вывести.
Но теперь, если выводить продукты через конструкцию foreach ($product as $products) {...}, выводятся все товары, без фильтрации по категории. Подскажите, как вывести товар, но отфильтровав по категориям?

*

draff

  • Гуру
  • 5188
  • 367 / 7
  • ищу работу
Вы создаете новый модуль или используете стандартный Вирт для вывода продуктов ?
п.с.
Выводит товары из подкатегории в стандартном модуле Вирт и без фильтрации по группе.
Спойлер
[свернуть]
« Последнее редактирование: 04.12.2020, 05:22:30 от draff »
*

draff

  • Гуру
  • 5188
  • 367 / 7
  • ищу работу
Запрос на получение родительской категории
Код
				$query = $db
->getQuery(true)
->select($db->quoteName('vc.category_parent_id'))
->from($db->quoteName('#__virtuemart_categories', 'vc'))
->join('INNER', $db->quoteName('#__virtuemart_categories_ru_ru', 'rc'). '  ON ' . $db->quoteName('rc.virtuemart_category_id'). ' = ' . $db->quoteName('vc.virtuemart_category_id'))
->where($db->quoteName('rc.category_name'). " = " . $db->quote($current_title));
$db->setQuery($query);
$category_id = !empty($db->loadResult())? $db->loadResult() : $category_id;
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Вы создаете новый модуль или используете стандартный Вирт для вывода продуктов ?
п.с.
Выводит товары из подкатегории в стандартном модуле Вирт и без фильтрации по группе.
Спойлер
[свернуть]

Большое спасибо, получилось вывести товары:
1) Главной категории (Тест)
2) Дочерней категории первой вложенности (Тест -> Тапочки)

Но, если товары находятся во второй вложенности и далее (Тест->Тапочки->Тканевые) - товары не выводятся.
*

draff

  • Гуру
  • 5188
  • 367 / 7
  • ищу работу
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
@draff да, гораздо быстрее
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Редактирования всплывающего окно Корзины VirtueMart

Автор DrShepard

Ответов: 10
Просмотров: 158
Последний ответ 30.03.2021, 13:50:03
от sivers
Подключить скрипт в body шаблона

Автор IToro82

Ответов: 6
Просмотров: 187
Последний ответ 24.03.2021, 23:28:24
от IToro82
Возможно ли сделать унаследование под категорий?

Автор sesil

Ответов: 1
Просмотров: 81
Последний ответ 12.02.2021, 15:53:58
от beliyadm
Где изменяется CSS блога категорий материалов?

Автор polezniy

Ответов: 14
Просмотров: 146
Последний ответ 02.02.2021, 17:52:24
от polezniy
Как отключить пагинацию товаров в VirtueMart 3?

Автор Damarkuzz

Ответов: 3
Просмотров: 143
Последний ответ 31.01.2021, 20:33:28
от rsn