Перейти к содержанию
OlegVladislavovich

[Решено] Проблемы с отображением новых полей товара в категориях

Рекомендуемые сообщения

Добрый день дорогие участники форума!)

В процессе работы у меня назрел такой вопрос.

Я создал через phpmyadmin новые переменные в ocproduct. Называются они "capacity" и "polarity". В переводе Ёмкость и Полярность. Создавал затем, чтобы вывести их в карточку товара, и вывести нужно именно таким образом, а не через атрибуты (через атрибуты мне не подходит).
В карточку товара я успешно вывел эти величины и сделал это с помощью такого кода:

<div class="description">
<span><?php echo $text_capacity; ?></span> <?php echo $capacity; ?><br />
<span><?php echo $text_polarity; ?></span> <?php echo $polarity; ?><br />
</div>

Плюс к этому прописал следующие строки в контроллере

$this->data['text_capacity'] = $this->language->get('text_capacity');
$this->data['text_polarity'] = $this->language->get('text_polarity');


$this->data['capacity'] = $product_info['capacity'];
$this->data['polarity'] = $product_info['polarity'];



В итоге в карточку товара я вывел то, что хотел вывести. Но это ещё не всё. Те же величины мне необходимо вывести в категории, и я попытался сделать это по аналогии, но получил ошибку

text_capacity Notice: Undefined variable: capacity in /var/www/user44692/data/www/mrakb.ru/catalog/view/theme/lethe/template/product/category.tpl on line 55
text_polarity Notice: Undefined variable: polarity in /var/www/user44692/data/www/mrakb.ru/catalog/view/theme/lethe/template/product/category.tpl on line 56

Вот что прописано в документе category.tpl

<div class="description">
<span><?php echo $text_capacity; ?></span> <?php echo $capacity; ?><br />
<span><?php echo $text_polarity; ?></span> <?php echo $polarity; ?><br />
</div>

А вот category.php

$this->data['text_capacity'] = $this->language->get('text_capacity');
$this->data['text_polarity'] = $this->language->get('text_polarity');



Вопрос собственно в том, как избежать этой ошибки и успешно выполнить цель?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В контролер категории нужно добавлять значения в массив products

				$this->data['products'][] = array(
					'product_id'  => $result['product_id'],
'capacity' => $result['capacity'],
'polarity' => $result['polarity'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'rating'      => $result['rating'],
					'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил в catalog/controller/product/category.php то, что вы написали, и в итоге такая ошибка вылезла :cry: Вроде та же самая, которая и была до этого

text_capacity Notice: Undefined variable: capacity in /var/www/user44692/data/www/mrakb.ru/catalog/view/theme/lethe/template/product/category.tpl on line 55
text_polarity Notice: Undefined variable: polarity in /var/www/user44692/data/www/mrakb.ru/catalog/view/theme/lethe/template/product/category.tpl on line 56

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант 1

 

На ocStore, возможна разница в том, что в карточке товара:

$product_info = $this->model_catalog_product->getProduct($product_id);

А в категории:

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

В зависимости от версии они могут возвращать разный результат, т.е. одна из них возвращает результат без capacity и polarity. Смотрите файл model/catalog/product.php. 

 

Вариант 2

 

Невнимательность + Ctrl+C/Ctrl+V. 

<div class="description">
<span><?php echo $text_capacity; ?></span> <?php echo $product['capacity']; ?><br />
<span><?php echo $text_polarity; ?></span> <?php echo $product['polarity']; ?><br />
</div>
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант 1

 

На ocStore, возможна разница в том, что в карточке товара:

$product_info = $this->model_catalog_product->getProduct($product_id);

А в категории:

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

В зависимости от версии они могут возвращать разный результат, т.е. одна из них возвращает результат без capacity и polarity. Смотрите файл model/catalog/product.php. 

 

Вариант 2

 

Невнимательность + Ctrl+C/Ctrl+V. 

<div class="description">
<span><?php echo $text_capacity; ?></span> <?php echo $product['capacity']; ?><br />
<span><?php echo $text_polarity; ?></span> <?php echo $product['polarity']; ?><br />
</div>

 

Упорно не могу понять в чём дело. Прописал пару новых строк в контроллер категорий, но я скину лучше весь контроллер категорий. Здесь следует обратить внимание на такие величины как "capacity" "polarity". Я просто стреляюсь уже, честно говоря. И что примечательно, раньше у меня их получалось вывести. Затем мне пришлось вывести на их место атрибуты, а сейчас появилась необходимость сделать всё по-прежнему и вывести на это место capacity polarity. Посмотрите пожалуйста, дело именно в этом документе, я предполагаю... С tpl всё должно быть в полном порядке...

<?php 
class ControllerProductCategory extends Controller {  
	public function index() { 
		$this->language->load('product/category');
		
		$this->load->model('catalog/category');
		
		$this->load->model('catalog/product');
		
		$this->load->model('tool/image'); 
		
		if (isset($this->request->get['filter'])) {
			$filter = $this->request->get['filter'];
		} else {
			$filter = '';
		}

			
		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'p.sort_order';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		} else {
			$order = 'ASC';
		}
		
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else { 
			$page = 1;
		}	
							
		if (isset($this->request->get['limit'])) {
			$limit = $this->request->get['limit'];
		} else {
			$limit = $this->config->get('config_catalog_limit');
		}

					
		$this->data['breadcrumbs'] = array();

   		$this->data['breadcrumbs'][] = array(
       		'text'      => $this->language->get('text_home'),
			'href'      => $this->url->link('common/home'),
       		'separator' => false
   		);	
			
		if (isset($this->request->get['path'])) {
			$url = '';
			
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}	
			
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}

				
			$path = '';
		
			$parts = explode('_', (string)$this->request->get['path']);
		
			$category_id = (int)array_pop($parts);

			foreach ($parts as $path_id) {
				if (!$path) {
					$path = (int)$path_id;
				} else {
					$path .= '_' . (int)$path_id;
				}
									
				$category_info = $this->model_catalog_category->getCategory($path_id);
				
				if ($category_info) {
	       			$this->data['breadcrumbs'][] = array(
   	    				'text'      => $category_info['name'],
						'href'      => $this->url->link('product/category', 'path=' . $path . $url),
        				'separator' => $this->language->get('text_separator')
        			);
				}

			}		
		
			
		} else {
			$category_id = 0;
		}

		
		$category_info = $this->model_catalog_category->getCategory($category_id);
	
		if ($category_info) {
			if ($category_info['seo_title']) {
		  		$this->document->setTitle($category_info['seo_title']);
			} else {
		  		$this->document->setTitle($category_info['name']);
			}

			$this->document->setDescription($category_info['meta_description']);
 			$this->document->setKeywords($category_info['meta_keyword']);
			$this->document->addScript('catalog/view/javascript/jquery/jquery.total-storage.min.js');
			
			if ($category_info['seo_h1']) {
				$this->data['heading_title'] = $category_info['seo_h1'];
			} else {
				$this->data['heading_title'] = $category_info['name'];
			}
			
			$this->data['text_refine'] = $this->language->get('text_refine');
			$this->data['text_empty'] = $this->language->get('text_empty');			
			$this->data['text_quantity'] = $this->language->get('text_quantity');
			$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
                        $this->data['text_capacity'] = $this->language->get('text_capacity');
			$this->data['text_polarity'] = $this->language->get('text_polarity');
			$this->data['text_stamps'] = $this->language->get('text_stamps');
                        $this->data['text_capacity'] = $this->language->get('text_capacity');
                        $this->data['text_polarity'] = $this->language->get('text_polarity');
                        $this->data['text_stamps'] = $this->language->get('text_stamps');
                        $this->data['capacity'] = $product_info['capacity'];
                        $this->data['polarity'] = $product_info['polarity'];
                        $this->data['stamps'] = $product_info['stamps'];
			$this->data['text_model'] = $this->language->get('text_model');
			$this->data['text_price'] = $this->language->get('text_price');
			$this->data['text_tax'] = $this->language->get('text_tax');
			$this->data['text_points'] = $this->language->get('text_points');
			$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
			$this->data['text_display'] = $this->language->get('text_display');
			$this->data['text_list'] = $this->language->get('text_list');
			$this->data['text_grid'] = $this->language->get('text_grid');
			$this->data['text_sort'] = $this->language->get('text_sort');
			$this->data['text_limit'] = $this->language->get('text_limit');
			$this->data['button_cart'] = $this->language->get('button_cart');
			$this->data['button_wishlist'] = $this->language->get('button_wishlist');
			$this->data['button_compare'] = $this->language->get('button_compare');
			$this->data['button_continue'] = $this->language->get('button_continue');
			
			// Set the last category breadcrumb		
			$url = '';
			
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}	
			
			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}
			
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
									
			$this->data['breadcrumbs'][] = array(
				'text'      => $category_info['name'],
				'href'      => $this->url->link('product/category', 'path=' . $this->request->get['path']),
				'separator' => $this->language->get('text_separator')
			);
								
					
			if ($category_info['image']) {
				$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
				$this->document->setOgImage($this->data['thumb']);
			} else {
				$this->data['thumb'] = '';
			}
									
			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
			$this->data['compare'] = $this->url->link('product/compare');

			$url = '';
			
			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}	

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}	
			
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
								
			$this->data['categories'] = array();
			
			$results = $this->model_catalog_category->getCategories($category_id);
			
			foreach ($results as $result) {
				$data = array(
					'filter_category_id'  => $result['category_id'],
					'filter_sub_category' => true
				);
				
				$product_total = $this->model_catalog_product->getTotalProducts($data);				
				
				$this->data['categories'][] = array(
					'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
					'thumb' => $this->model_tool_image->resize(($result['image']=='' ? 'no_image.jpg' : $result['image']), $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'))
				);
			}
			
			$this->data['products'] = array();
			
			$data = array(
				'filter_category_id' => $category_id,
				'filter_filter'      => $filter, 
				'sort'               => $sort,
				'order'              => $order,
				'start'              => ($page - 1) * $limit,
				'limit'              => $limit
			);
					
			$results = $this->model_catalog_product->getProducts($data);
			//Вызов метода getFoundProducts должен проводится сразу же после getProducts
			//только тогда он выдает правильное значения количества товаров
			$product_total = $this->model_catalog_product->getFoundProducts(); 
			
			foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('no_image.jpg', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
				}
				
				if (($this->config->get('config_customer_price') && $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')));
				} 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')));
				} else {
					$special = false;
				}	
				
				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
				} else {
					$tax = false;
				}				
				
				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}
								
				$this->data['products'][] = array(
					'product_id'  => $result['product_id'],
                                        'capacity' => $result['capacity'],
                                        'polarity' => $result['polarity'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
					'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'rating'      => $result['rating'],
					'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);
			}
			
			$url = '';
			
			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}
				
	
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
										
			$this->data['sorts'] = array();
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_default'),
				'value' => 'p.sort_order-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
			);
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_name_asc'),
				'value' => 'pd.name-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $url)
			);

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_name_desc'),
				'value' => 'pd.name-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $url)
			);

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_price_asc'),
				'value' => 'p.price-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)
			); 

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_price_desc'),
				'value' => 'p.price-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
			); 
			
			$url = '';
			
			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
			
			$this->data['limits'] = array();
			
			$limits = array_unique(array($this->config->get('config_catalog_limit'), 25, 50, 75, 100));
			
			sort($limits);
	
			foreach($limits as $value){
				$this->data['limits'][] = array(
					'text'  => $value,
					'value' => $value,
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $value)
				);
			}
			
			$url = '';
			

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
	
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
					
			$pagination = new Pagination();
			$pagination->total = $product_total;
			$pagination->page = $page;
			$pagination->limit = $limit;
			$pagination->text = $this->language->get('text_pagination');
			$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}');
		
			$this->data['pagination'] = $pagination->render();
		
			$this->data['sort'] = $sort;
			$this->data['order'] = $order;
			$this->data['limit'] = $limit;
		
			$this->data['continue'] = $this->url->link('common/home');

			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
				$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
			} else {
				$this->template = 'default/template/product/category.tpl';
			}
			
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
				
			$this->response->setOutput($this->render());										
    	} else {
			$url = '';
			
			if (isset($this->request->get['path'])) {
				$url .= '&path=' . $this->request->get['path'];
			}
			
			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}
				
									
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
				
			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}
						
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
						
			$this->data['breadcrumbs'][] = array(
				'text'      => $this->language->get('text_error'),
				'href'      => $this->url->link('product/category', $url),
				'separator' => $this->language->get('text_separator')
			);
				
			$this->document->setTitle($this->language->get('text_error'));

      		$this->data['heading_title'] = $this->language->get('text_error');

      		$this->data['text_error'] = $this->language->get('text_error');

      		$this->data['button_continue'] = $this->language->get('button_continue');

      		$this->data['continue'] = $this->url->link('common/home');

			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
				$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
			} else {
				$this->template = 'default/template/error/not_found.tpl';
			}
			
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
					
			$this->response->setOutput($this->render());
		}
  	}
}
?> 

Ошибки пропали, но нормального результата я по-прежнему не достиг. Вместо необходимых данных отображается чушь какая-то...

WlZFpXVaURQ.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы знаете что такое var_dump? Пользуйтесь им. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря, не знаю, первый раз такое слышу. Не могли бы дать отсылку на материал по var_dump чтобы я понял как юзать. Буду очень благодарен)
 

Вы знаете что такое var_dump? Пользуйтесь им. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я это сам нашёл и посмотрел до того как вы это скинули. Тем не менее премного благодарен вам за помощь в поиске информации.

К сожалению, после просмотра данных источников, у меня не возникло полного понимания функции var_dump. Просто в кодах я очень несилён.

Вот конкретный вопрос. В какой файл нужно вставлять var_dump? В php? И в какую часть документа?

Это будет выглядеть вот так? тут "a" "b" "c" это вроде, как я понимаю, строки, но я даже не знаю сколько у меня строк, мне не понятно, что считать строкой. Сначала у меня идёт text_capacity, а затем сама величина capacity

<?php
$capacity = array(1, 2, array("a", "b", "c"));
var_dump($capacity);
?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Я это сам нашёл и посмотрел до того как вы это скинули. Тем не менее премного благодарен вам за помощь в поиске информации.

К сожалению, после просмотра данных источников, у меня не возникло полного понимания функции var_dump. Просто в кодах я очень несилён.

Вот конкретный вопрос. В какой файл нужно вставлять var_dump? В php? И в какую часть документа?

Это будет выглядеть вот так? тут "a" "b" "c" это вроде, как я понимаю, строки, но я даже не знаю сколько у меня строк, мне не понятно, что считать строкой. Сначала у меня идёт text_capacity, а затем сама величина capacity

<?php
$capacity = array(1, 2, array("a", "b", "c"));
var_dump($capacity);
?>

 

С помощью var_dump можно проверить наличие и содержимое переменной. Если ее нет, то Вы где-то ошиблись. Мы Вам дали ВСЕ, что нужно.

 

Вот здесь посмотрите, там та же самая задача, а на 4-ой странице решение для страниц категорий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С помощью var_dump можно проверить наличие и содержимое переменной. Если ее нет, то Вы где-то ошиблись. Мы Вам дали ВСЕ, что нужно.

 

Вот здесь посмотрите, там та же самая задача, а на 4-ой странице решение для страниц категорий.

 

Да, ссылка действительно помогла, благодарю Вас! Большое спасибо человеческое

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.