Jump to content
Sign in to follow this  
OlegVladislavovich

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

Recommended Posts

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

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

Я создал через 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');



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

Share this post


Link to post
Share on other sites

В контролер категории нужно добавлять значения в массив 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)
				);

Share this post


Link to post
Share on other sites

Добавил в 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

Share this post


Link to post
Share on other sites

Вариант 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

Share this post


Link to post
Share on other sites

Вариант 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

 

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

К сожалению, после просмотра данных источников, у меня не возникло полного понимания функции 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-ой странице решение для страниц категорий.

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.