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

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


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');



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

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


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

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

Important Information

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