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

[Решено?..] Related_products


Recommended Posts

Здравствуйте, я стараюсь сам изменить встроенные рекомендуемые товары.

Всего меняю два файла:

 

1) в папке с шаблоном - файл Product.tpl

<!--Related Products-->
 <?php if ($products) { ?>
 <div class="box">
 <div class="box-heading"><?php echo $tab_related; ?> (<?php echo count($products); ?>)</div>
   <div class="box-content">
   <div class="box-product">
   
   
      <?php foreach ($products as $product) { ?>
      <div class="itemcolumns">
      <div>
        <?php if ($product['thumb']) { ?>
        <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
        <?php } ?>
        <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
        <?php if ($product['price']) { ?>
        <div class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
          <?php } ?>
        </div>
        <?php } ?>
        <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>
         <?php if ($this->config->get('config_review_status')) { ?>
      <div class="rating"><img src="catalog/view/theme/univer/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
      <?php } ?>
        </div>
        </div>
      <?php } ?>

      
      </div>
  </div>
  </div>
  <?php } ?>
<!--end Related Products-->

2)И Контроллер Product.php

 

Я дал рекомендуемым товарам увеличенную картинку:

if ($result['image']) {
					$image1 = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));
				} else {
					$image1 = false;
				}
 

Добавил вывод характеристик:

$wi = (int)$result['width'];
$le = (int)$result['length'];
$he = (int)$result['height'];

Для счастья нужно только одно - добавить выбор цвета - который сделан по принципу Опции->картинка (Options - Image).

Я запарился:

 

Для основного продукта текст в контроллере:

$this->data['options'] = array();
			
			foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) { 
				if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') { 
					$option_value_data = array();
					
					foreach ($option['option_value'] as $option_value) {
						if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
							if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
								$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
							} else {
								$price = false;
							}
							
							$option_value_data[] = array(
								'product_option_value_id' => $option_value['product_option_value_id'],
								'option_value_id'         => $option_value['option_value_id'],
								'name'                    => $option_value['name'],
								'image'                   => $this->model_tool_image->resize($option_value['image'], 50, 50),
								'price'                   => $price,
								'price_prefix'            => $option_value['price_prefix']
							);
						}
					}
					
					$this->data['options'][] = array(
						'product_option_id' => $option['product_option_id'],
						'option_id'         => $option['option_id'],
						'name'              => $option['name'],
						'type'              => $option['type'],
						'option_value'      => $option_value_data,
						'required'          => $option['required']
					);					
				} elseif ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {
					$this->data['options'][] = array(
						'product_option_id' => $option['product_option_id'],
						'option_id'         => $option['option_id'],
						'name'              => $option['name'],
						'type'              => $option['type'],
						'option_value'      => $option['option_value'],
						'required'          => $option['required']
					);						
				}
			}
 

 

 

Помогите сдвинуться с места. Мне нужно Прикрутить значения опций к переменной $Result

 

 

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


Ну-же, помогите, не могу разобраться с

foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option)

пробовал

foreach ($this->model_catalog_product->getProductRelated->getProductOptions($this->request->get['product_id']) as $option2) 

не помогает

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


Может быть, стоит еще посмотреть файлы в каталогах /model/ и /language/ и дать ссылку на нужную страницу сайта, чтобы Ванги могли, наконец, увидеть ошибки на странице? Или, на крайняк, скриншот с ошибкой...

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


  • 2 weeks later...

Fatal error: Call to a member function getProductOptions() on a non-object in W:\home\test1.ru\www\vqmod\vqcache\vq2-catalog_controller_product_product.php on line 527

 

Спасибо за помощь, просидел ещё прилично над этим вопросом но пока без результата, мне кажется привязать опции самое тяжелое...

 



$this->data['options'] = array();
			
			foreach ($this->model_catalog_product->getProductRelated->getProductOptions($result['product_id']) as $option2) { 
				if ($option2['type'] == 'select' || $option2['type'] == 'radio' || $option2['type'] == 'checkbox' || $option2['type'] == 'image') { 
					$option2_value_data = array();
					
					foreach ($option2['option_value'] as $option2_value) {
						if (!$option2_value['subtract'] || ($option2_value['quantity'] > 0)) {
							if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option2_value['price']) {
								$price2 = $this->currency->format($this->tax->calculate($option2_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
							} else {
								$price2 = false;
							}
							
							$option2_value_data[] = array(
								'product_option_value_id' => $option2_value['product_option_value_id'],
								'option_value_id'         => $option2_value['option_value_id'],
								'name'                    => $option2_value['name'],
								'image'                   => $this->model_tool_image->resize($option2_value['image'], 50, 50),
								'price'                   => $price2,
								'price_prefix'            => $option2_value['price_prefix']
							);
						}
					}
					
					$this->data['options'][] = array(
						'product_option_id' => $option2['product_option_id'],
						'option_id'         => $option2['option_id'],
						'name'              => $option2['name'],
						'type'              => $option2['type'],
						'option2_value'      => $option2_value_data,
						'required'          => $option2['required']
					);					
				} elseif ($option2['type'] == 'text' || $option2['type'] == 'textarea' || $option2['type'] == 'file' || $option2['type'] == 'date' || $option2['type'] == 'datetime' || $option2['type'] == 'time') {
					$this->data['options'][] = array(
						'product_option_id' => $option2['product_option_id'],
						'option_id'         => $option2['option_id'],
						'name'              => $option['name'],
						'type'              => $option2['type'],
						'option_value'      => $option2['option_value'],
						'required'          => $option2['required']
					);						
				}
			}
			


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


ну а это "...model_catalog_product->getProductRelated->getProductOptions..." кто будет убирать?

foreach ($this->model_catalog_product->getProductRelated->getProductOptions($result['product_id']) as $option2)
>>

foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option2)
Надіслати
Поділитися на інших сайтах

Если не изменить на 

$this->data['options2'][] = array

то он вываливает все возможные опции к основному товару.

 

Спасибо, из-за невнимательности были ошибки в Php теперь буду пробовать привязать к этим переменным шаблон...

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


Почти вышел этот сегмент:

Код контролера выправил для всех типов опций (по идее он верен):



$this->data['options2'] = array();
			
			foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option2) { 
				if ($option2['type'] == 'select' || $option2['type'] == 'radio' || $option2['type'] == 'checkbox' || $option2['type'] == 'image') { 
					$option2_value_data = array();
					
					foreach ($option2['option_value'] as $option2_value) {
						if (!$option2_value['subtract'] || ($option2_value['quantity'] > 0)) {
							if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option2_value['price']) {
								$price2 = $this->currency->format($this->tax->calculate($option2_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
							} else {
								$price2 = false;
							}
							
							$option2_value_data[] = array(
								'product_option_value_id' => $option2_value['product_option_value_id'],
								'option_value_id'         => $option2_value['option_value_id'],
								'name'                    => $option2_value['name'],
								'image'                   => $this->model_tool_image->resize($option2_value['image'], 50, 50),
								'price'                   => $price2,
								'price_prefix'            => $option2_value['price_prefix']
							);
						}
					}
					
					$this->data['options2'][] = array(
						'product_option_id' => $option2['product_option_id'],
						'option_id'         => $option2['option_id'],
						'name'              => $option2['name'],
						'type'              => $option2['type'],
						'option2_value'      => $option2_value_data,
						'required'          => $option2['required']
					);					
				} elseif ($option2['type'] == 'text' || $option2['type'] == 'textarea' || $option2['type'] == 'file' || $option2['type'] == 'date' || $option2['type'] == 'datetime' || $option2['type'] == 'time') {
					$this->data['options2'][] = array(
						'product_option_id' => $option2['product_option_id'],
						'option_id'         => $option2['option_id'],
						'name'              => $option2['name'],
						'type'              => $option2['type'],
						'option_value'      => $option2['option_value'],
						'required'          => $option2['required']
					);						
				}
			}
			

 

 

И приступил к шаблону:

 

 
    <!--Related Products-->
 <?php if ($products) { ?>
 <div class="box">
 <div class="box-heading"><?php echo $tab_related; ?> (<?php echo count($products); ?>)</div>
   <div class="box-content">
   <div class="box-product">


	
   
      <?php foreach ($products as $product) { ?>
      <div class="itemcolumns">
      <div>
        <?php if ($product['thumb']) { ?>
        <div class="image" ><a href="<?php echo $product['popa']; ?>" ><img src="<?php echo $product['thumb']; ?>" data-zoom-

image="<?php echo $product['popa']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
        <?php } ?>
        <div class="name"><?php echo $product['name']; ?></div>



<?php if ($product['wi'] > 0) { ?>
        <span>Размеры (ШхГхВ):</span>     <div class="name"><?php echo $product['le']; echo " x "; echo $product['wi']; echo " x 

"; echo $product['he']; ?>



</div>
<?php } ?>





<div class="name">
     

      <?php if ($options2) { ?>
      
        <h2><?php echo $text_option; ?></h2>
        <br />
        <?php foreach ($options2 as $option2) { ?>
        
        <?php if ($option2['type'] == 'image') { ?>
        <div id="option2-<?php echo $option2['product_option_id']; ?>" class="option">
          <?php if ($option2['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option2['name']; ?>:</b><br />
          <table class="option-image">
            <?php foreach ($option2['option2_value'] as $option2_value) { ?>
            <tr>
              <td style="width: 1px;"><input type="radio" name="option2[<?php echo $option2['product_option_id']; ?>]" value="<?

php echo $option2_value['product_option_value_id']; ?>" id="option2-value-<?php echo $option2_value['product_option_value_id']; 

?>" /></td>
              <td><label for="option2-value-<?php echo $option2_value['product_option_value_id']; ?>"><img src="<?php echo 

$option2_value['image']; ?>" alt="<?php echo $option2_value['name'] . ($option2_value['price'] ? ' ' . $option2_value

['price_prefix'] . $option2_value['price'] : ''); ?>" /></label></td>
              <td><label for="option2-value-<?php echo $option2_value['product_option_value_id']; ?>"><?php echo $option2_value

['name']; ?>
                  <?php if ($option2_value['price']) { ?>
                  (<?php echo $option2_value['price_prefix']; ?><?php echo $option2_value['price']; ?>)
                  <?php } ?>
                </label></td>
            </tr>
            <?php } ?>
          </table>
        </div>
        <br />
        <?php } ?>
        
      
      <?php } ?>


<?php } ?>





</div>






        <?php if ($product['price']) { ?>
        <div class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; 

?></span>
          <?php } ?>
        </div>
        <?php } ?>
        <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product

['product_id']; ?>');" class="button" /></div>
         <?php if ($this->config->get('config_review_status')) { ?>
      <div class="rating"><img src="catalog/view/theme/univer/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo 

$product['reviews']; ?>" /></div>
      <?php } ?>
        </div>
        </div>
      <?php } ?>

      
      </div>
  </div>
  </div>
  <?php } ?>
<!--end Related Products-->

 

Фиолетовым помечен фрагмент, отвечающий за опцию именно картинкой. Всё работает, НО сайт присваевает всем товарам одни и те же цвета, которые берёт у последнего товара в ряду))) Подразумеваю, что я не задал какой-то цикл неким образом связанный с переменной $products

 

aab3f2e03b60.png

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


какое еще

$this->data['options2']
??? :?

 

...
			$this->data['products'] = array();
			$results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);
			foreach ($results as $result) {
				if ($result['image']) {
...
				$this->data['products'][] = array(
					'product_id' => $result['product_id'],
...
>>

...
			$this->data['products'] = array();
			$results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);
			foreach ($results as $result) {
				
				foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option2) {
					$relatedProductOptions
					if ($option2['type'] == 'select' || $option2['type'] == 'radio' || $option2['type'] == 'checkbox' || $option2['type'] == 'image') { 
						$option2_value_data = array();
						
						foreach ($option2['option_value'] as $option2_value) {
							if (!$option2_value['subtract'] || ($option2_value['quantity'] > 0)) {
								if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option2_value['price']) {
									$price = $this->currency->format($this->tax->calculate($option2_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
								} else {
									$price = false;
								}
								
								$option2_value_data[] = array(
									'product_option_value_id' => $option2_value['product_option_value_id'],
									'option_value_id'         => $option2_value['option_value_id'],
									'name'                    => $option2_value['name'],
									'image'                   => $this->model_tool_image->resize($option2_value['image'], 50, 50),
									'price'                   => $price,
									'price_prefix'            => $option2_value['price_prefix']
								);
							}
						}
						
						$relatedProductOptions[] = array(
							'product_option_id' => $option2['product_option_id'],
							'option_id'         => $option2['option_id'],
							'name'              => $option2['name'],
							'type'              => $option2['type'],
							'option_value'      => $option2_value_data,
							'required'          => $option2['required']
						);
					} elseif ($option2['type'] == 'text' || $option2['type'] == 'textarea' || $option2['type'] == 'file' || $option2['type'] == 'date' || $option2['type'] == 'datetime' || $option2['type'] == 'time') {
						$relatedProductOptions[] = array(
							'product_option_id' => $option2['product_option_id'],
							'option_id'         => $option2['option_id'],
							'name'              => $option2['name'],
							'type'              => $option2['type'],
							'option_value'      => $option2['option_value'],
							'required'          => $option2['required']
						);
					}
				}
				
				if ($result['image']) {
...
				$this->data['products'][] = array(
					'options' => $relatedProductOptions,
					'product_id' => $result['product_id'],
...
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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