Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Название товаров в категории


Recommended Posts

Подскажите пожалуйста, как правильно реализовать. Сам в программировании не силен, по этому прошу не смеяться и отвечать по проще)

Вот это ванильный код из контролера категории. 
 

Спойлер

foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				}

				if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
					$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$price = false;
				}

				if ((float)$result['special']) {
					$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$special = false;
				}

				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
				} else {
					$tax = false;
				}

				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}
                			
				
				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				 );
			}

 


Как его модифицировать, чтоб он мне выводил в название товара в категории из массива поочередно. Т.е. подставлял перед названием значение из массива.

(Сами товары у меня содержат в названии только фирму и модель.)

Сам я только до такого варианта дошел, но он работает только, если никто не будет увеличивать кол-во товаров на витрине, в другом случае сыпятся ошибки.
Наверное стоит, как то через foreach сделать, но мне не хватает знаний.  Прошу подсказать.

Вот мой вариант.
 

Спойлер

foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				}

				if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
					$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$price = false;
				}

				if ((float)$result['special']) {
					$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$special = false;
				}

				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
				} else {
					$tax = false;
				}

				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}
                
				if 
				 (in_array($category_id, [94, 95, 100, 102], TRUE))
			    {
                 $category_prefix = array(); 
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Эл камин ";
				  $category_prefix[] = "Электрокамин ";
				  $category_prefix[] = "Электрический камин ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Эл камин ";
				  $category_prefix[] = "Электрокамин ";
				  $category_prefix[] = "Электрический камин ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
				  $category_prefix[] = "Элеткрокамин ";
				  $category_prefix[] = "Каминокомплект ";
                }				    
				elseif
			    ($category_id == '138') 
			    {
                 $category_prefix = array();
				  $category_prefix[] = "Элекрокаменка ";
				  $category_prefix[] = "Элекрокаменка ";
				  $category_prefix[] = "Элекрокаменка ";
				  $category_prefix[] = "Элекропечь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрическая печь ";
				  $category_prefix[] = "Элекрокаменка ";
				  }
				elseif 
				($category_id == '78') 
			    {
				$category_prefix = "Печь для бани ";
                }						  
				else
				{
                $category_prefix = null;
				}; 				
                
			   
				//Проверка типа переменной 
                if (is_array($category_prefix)) 
				{
				$prefix = $category_prefix[++$a];	
				}
				elseif (is_string($category_prefix))  
				{
				$prefix = $category_prefix;
				}
				 else
				{
                $prefix = null;
				}; 	 
				    
					
				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $prefix.$result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				 );
			}

 



 

Змінено користувачем farshmac
Надіслати
Поділитися на інших сайтах


7 минут назад, farshmac сказал:

чтоб он мне выводил в название товара в категории из массива поочередно.

вот эту фразу можно по-подробнее, не понянто, что в итоге надо.

К названию товара подставлять еще и его категории по иерархии?
Подставлять только текущую категорию ,в которой находимся?

Надіслати
Поділитися на інших сайтах

56 минут назад, Prooksius сказал:

К названию товара подставлять еще и его категории по иерархии?
Подставлять только текущую категорию ,в которой находимся?

В зависимости от категории подставлять значение из заданного массива. 

if
			    ($category_id == '138') 
			    {
                 $category_prefix = array();
				  $category_prefix[] = "Элекрокаменка ";
				  $category_prefix[] = "Печька ";
}

В данном примере, в массиве 2 значения, надо чтобы первому товару ушло первое - Электрокамина название товара, второму второе - Печька название товара и далее по кругу, 3 товар - Электрокамина название товара. (устроит вариант, где не будет по кругу, а первым двум будет присвоено значение, а дальше пустые пойдут).

Змінено користувачем farshmac
Надіслати
Поділитися на інших сайтах


Посетитель поменял сортировку у вас в магазине -  и все названия перепутались.
Удалили товар(ы) в админке - и снова все перепуталось.
Уж я не говорю про смену языка на сайте...

так а в названии товара просто добавить это все через админку почему не хотите? Я смотрю, товаров у вас немного.
P.S. А, пардон, ясно, зависит от того, в какой категории находимся..

Надіслати
Поділитися на інших сайтах

Спасибо конечно за беспокойство, но если можно, то хотелось бы помощь в реализации идеи.
А так ничего не изменится, что бы пользователь не сделал. Или какие товары не удалить/добавить.
Все манипуляции идут в контролере категории, и подстановка слов идет соответственно на странице категории и ей совершенно все равно, какой именно товар и с какой сортировкой в ней выводится.
Я хочу, что бы к товару, только на уровне категории добавились ключевые слова, которые мне нужны. И у первого товара, каким бы он не был было одно и тоже слово (фраза) перед названием.
Т.е. в категории 25 товаров выводится и если мы задали массив из 25 значений, то как ты не мешай товары, у первого в списке будет название с первым значением массива. 

Что в принципе я уже сделал, но как раз если увеличить число выводимых товаров, приводит к ошибкам (для юзера не видимых), но я хотел бы этого избежать.


ЗЫ я привел пример, товаров у меня тысячи.

 

Вот пример в скринах, с разной сортировкой:

Спойлер

2021-04-27_22-44-49.thumb.jpg.cb5bd3c0e2b2ba8d8059cc84674f3fc8.jpg

 

 

 

2021-04-27_22-45-11.thumb.jpg.5b735d0749709c802e96fa89570359d8.jpg



 

Змінено користувачем farshmac
Надіслати
Поділитися на інших сайтах


Во-первых, нужно перед началом цикла перебора товаров определить три переменные:

// Это массив первого условия
$category_prefix1 = array('Элеткрокамин', 'Эл камин', 'Электрокамин', ... , 'Каминокомплект');

// Это массив второго условия
$category_prefix2 = array('Элекрокаменка', 'Элекрокаменка', 'Элекрокаменка', ... , 'Элекрокаменка');

// это когда только одно значение добавки
$category_prefix3 = 'Печь для бани';

и уже в цикле вписать ваши условия в зав. от категорий

if (in_array($category_id, [94, 95, 100, 102], TRUE)) {
	$category_prefix = $category_prefix1;
} elseif ($category_id == '138') {
	$category_prefix = $category_prefix2;
} // ну и так далее


потом непонятно что вот здесь за $a:

$prefix = $category_prefix[++$a];

предполагаю, порядковый номер товара в цикле.
ну как вариант, если мешают ошибки, вероятно, не находится по номеру. Можно так сделать:

$prefix = isset($category_prefix[++$a]) ? $category_prefix[$a] : '';

и уже в заполнении названия товара:

'name'        => (!empty($prefix) ? ' ' . $prefix : '') . $result['name'],

- пробел можно один раз добавить.

Но это все страшный костыль, конечно...

  • +1 1
Надіслати
Поділитися на інших сайтах

непонятно, как в разной сортировке товаров подходят одни и те же добавки..

По идее нужно для каждого товара в админке сделать такое поле, "добавка", но оно будет сложное, в зав. от категорий. То есть выбираем категорию - для нее задаем добавку к этому товару, выбираем еще категорию - и к ней добавку.
И уже на сайте читать эти значения из БД и просто добавлять к названию.
Так будет правильнее.

Надіслати
Поділитися на інших сайтах

Спасибо, написал по вашему примеру, по итогу ничего не изменилось. 
Поясню. Мне надо оптимизировать страницы категорий под поисковик. Самый удобный вариант, как по мне проработать пару сотен категорий, пусть даже тысячу, чем десятки тысяч товаров. Как правильно, меня мало волнует, у многих конкурентов такой вариант, который я пытаюсь сделать реализован, как они мне конечно не скажут. Но мне кажется я иду по пути наименьшего сопротивления. Важно создать плотность по основному ключу и добавить все другие, которые мне нужны, и которые трудно добавить не в названии товара.

Да может показаться, что проще проработать выдачу по каждой категории, но это не так. Все товары имеют несколько категорий, некоторые более 10. И как сделать так, чтобы задавать сортировку по определенной категории мне не известно.
И так? вот в чем моя проблема. Это уже после ваших правок.
ЗЫ У меня не хватает знаний и поиск не помогает. Есть ли какая-то возможность зациклить массив, чтоб он отдавал 21, 22... какое-то значение. И как это сделать уже в цикле)

 

Спойлер

2021-04-28_00-30-48.jpg.77b1970a58786a5ef85ce735c64edfdc.jpg

Вот какой код у меня получился.
 

Спойлер

//Элекрокамины
				  $category_electrokamin = array(); 
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Эл камин ";
				  $category_electrokamin[] = "Электрокамин ";
				  $category_electrokamin[] = "Электрический камин ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Эл камин ";
				  $category_electrokamin[] = "Электрокамин ";
				  $category_electrokamin[] = "Электрический камин ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
				  $category_electrokamin[] = "Элеткрокамин ";
				  $category_electrokamin[] = "Каминокомплект ";
                				    
				//Элекрокаменка
			    ($category_id == '138') 
			    {
                 $category_elecrokamenka = array();
				  $category_elecrokamenka[] = "Элекрокаменка ";
				  $category_elecrokamenka[] = "Элекрокаменка ";
				  $category_elecrokamenka[] = "Элекрокаменка ";
				  $category_elecrokamenka[] = "Элекропечь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрическая печь ";
				  $category_elecrokamenka[] = "Элекрокаменка ";
				//Печь для бани
				$category-dly-bany = "Печь для бани ";
                

			$product_total = $this->model_catalog_product->getTotalProducts($filter_data);

			$results = $this->model_catalog_product->getProducts($filter_data);

			foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				}

				if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
					$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$price = false;
				}

				if ((float)$result['special']) {
					$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$special = false;
				}

				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
				} else {
					$tax = false;
				}

				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}
                
				if 
				 (in_array($category_id, [94, 95, 100, 102], TRUE))
				 {	
                $category_prefix = $category_electrokamin;
			     } 
				 elseif ($category_id == '138') 
				 {
	            $category_prefix = $category_elecrokamenka;
				}
				 elseif ($category_id == '78')
				 
				 {
	            $category_prefix = $category-dly-bany;
			   } 
			                    
				
				$prefix = isset($category_prefix[++$a]) ? $category_prefix[$a] : '';
				
				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        > (!empty($prefix) ? ' ' . $prefix : '') . $result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				 );
			}

 

Змінено користувачем farshmac
Надіслати
Поділитися на інших сайтах


Обновил, еще раз все перепроверил и переделал.
1) В итоге ругается на строку, в любых категориях: Undefined variable: a 

Цитата

$prefix = isset($category_prefix[++$a]) ? $category_prefix[$a] : '';


Что такое [++$a] я точно не знаю, я думал с помощью этого перебираются ключи массива по очереди.  

 

2) Там где нет массива, а одно значение  выводятся знаки вопросов.

17 часов назад, Prooksius сказал:

$category_prefix3 = 'Печь для бани';

Спойлер

2021-04-28_16-39-14.jpg.21a67d16189eead8755d04938a72ad59.jpg

А так выводятся 3 "добавки", если в массиве 3 ключа, что в принципе меня устраивает. Хотя возможно лучше бы было бы, что бы шло повторение. 

 

Спойлер

2021-04-28_16-38-05.thumb.jpg.d1eae10a2a27c00d4f3e116d73b280a5.jpg

 

Змінено користувачем farshmac
Надіслати
Поділитися на інших сайтах


вместо

foreach ($results as $result) {

напишите

foreach ($results as $a => $result) {

и тогда ++ уберите из той строки, где ошибка

 

 

52 минуты назад, farshmac сказал:

Хотя возможно лучше бы было бы, что бы шло повторение

так продублируйте значения в вашем массиве

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.