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

Вывод данных на карточке в категориях

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

Здравствуйте уважаемые!

 

Схожая тема неоднократно поднималась, но у меня пока, увы, так и не заработало.

 

Ситуация следующая:

OpenCart 2.3 + тема Welldone

Я создал для товаров в админке доп. поле "подарок" с ответом да/нет, записывается в б/д значением 0 - нет, 1 - да. Добавил в модель, контроллер и в карточке товара if ==1 выводится иконка со значком подарка на изображении - все как надо. То же самое в quickview - все работает.

Соответственно надо чтобы в категории, на главной - везде где товары отображаются, при условии наличия в б/д у товара 1 в строке present выводился этот значок.

 

В теме за выведение товаров отвечает listing.php, который подключается в category.tpl. В сам listing я добавил такую же запись, как и в product и quickview:

<?php if ($present==1) {?>
	<div class="present_label present_with_desc"><span><?php echo $text_present; ?></span></div>
<?php } ?>

У listing своего контроллера нет. Как я не пробовал вводить в контроллер category.php - все время ошибка "Notice: Undefined variable: present in .../listing.php".

 

В контроллер product.php я добавил в таком виде:

249ая строка - текст

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

282ая строка - значение

$data['present'] = $product_info['present'];

 

Как это все правильно записать в контроллер категории? Знания PHP, к сожалению, не хватает((

И в правильный ли я контроллер пытаюсь записать...

Если что, вот как этот listing подключается в шаблоне category.tpl:

<div class="products-grid products-listing products-col products-isotope <?php echo $content_class;?> <?php if($this->welldone->get_settings('category_listing_view','grid') == 'list'){echo 'row-view';}?>">
          <?php include("catalog/view/theme/welldone/template/welldone/listing.php");?> 
</div>

 

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


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

покажите файл listing.php

 

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


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, fanatic сказал:

покажите файл listing.php

 

<?php

static $sec_id = 0;

if (!isset($this->session->data['countdown-index']))
  $this->session->data['countdown-index'] = 1;

$this->session->data['countdown-index']++;  
 
foreach ($products as $product) {?>
<div class="product-preview-wrapper<?php echo isset($product['isotope_class_id']) ? ' '.$product['isotope_class_id'] : '';?><?php if (isset($visibility_class)){echo $visibility_class;}?>">
      <div class="product-preview">
        <div class="product-preview__image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>"/></a>
        
        <?php $count_down_end = '';$color_options = array();$sizes_options = array();
        
         foreach($product['labels'] as $label_type=>$label_text){
          if ($label_type == 'new')
            echo '<div class="product-preview__label product-preview__label--left product-preview__label--new"><span>'.$label_text.'</span></div>';
          elseif ($label_type == 'discount')
            echo '<div class="product-preview__label product-preview__label--right product-preview__label--sale"><span>'.$label_text.'</span></div>';
          elseif ($label_type == 'outofstock')
            echo '<div class="product-preview__outstock">'.$label_text.'</div>';
          elseif ($label_type == 'countdown')
            $count_down_end = $label_text;
          elseif ($label_type == 'colors')
            $color_options = $label_text;
          elseif ($label_type == 'sizes')
            $sizes_options = $label_text;       
         }
		 
         
         if ($count_down_end != '')
         {
           $ret = explode('-',$count_down_end);
           $y = (int)$ret[0];
           $m = (int)$ret[1]; 
           $d = (int)$ret[2];
           
           if ($y && $m && $d)
           {
             $c_id = $this->session->data['countdown-index'].'-'.$product['product_id'];
             
             echo '<div class="countdown_box"><div class="countdown_inner"><div class="title">'.$this->welldone->get_settings('countdown_title','special price valid:').'</div><div id="countdown-'.$c_id.'"></div></div></div>';
             echo '<script type="text/javascript">jQuery(function ($) {if ($("#countdown-'.$c_id.'").length > 0){$(\'#countdown-'.$c_id.'\').countdown({until: new Date('.$y.', '.($m - 1).', '.$d.')});}});</script>';
           }
         }
        ?>
		<!-- ПОДАРОК -->
			<?php if ($present==1) {?>
				<div class="present_label present_with_desc"><span><?php echo $text_present; ?></span></div>
			<?php } ?>
        <!-- /ПОДАРОК -->
        </div>
        
        <div class="product-preview__info text-center">
          <div class="product-preview__info__btns">
            <a href="#" class="btn btn--round" onclick="welldone_add_to_cart('<?php echo $product['product_id']; ?>', '1');return false;"><span class="icon-ecommerce"></span></a> 
            <a href="index.php?route=welldone/quickview&product_id=<?php echo $product['product_id']; ?>" class="btn btn--round btn--dark btn-quickview" data-toggle="modal" data-target="#quickView"><span class="icon icon-eye"></span></a>
          </div>
          <div class="product-preview__info__title">
            <h2><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h2>
          </div>
          
          <div class="rating">
          
          <?php if ($product['rating']) { ?>
          <div class="rating">
            <?php for ($i = 1; $i <= 5; $i++) { ?>
            <?php if ($product['rating'] < $i) { ?>
            <span class="icon-star"></span>
            <?php } else { ?>
            <span class="icon-star-fill"></span>
            <?php } ?>
            <?php } ?>
          </div>
          <?php } ?>
          
          </div>
          
          <?php if(count($color_options) && $this->welldone->get_settings('label_color_listing_status','show') == 'show' && in_array($this->welldone->get_settings('show_options','both'),array('both','colors'))) {?>
          <ul class="options-swatch options-swatch--color">
          <?php foreach ($color_options as $option_value) { ?>
						<li data-toggle="tooltip" title="<?php echo $option_value['name'];?>">
              <span class="swatch-label"><img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></span>
            </li>
          <?php } ?> 
					</ul>
          <?php }if(count($sizes_options) && $this->welldone->get_settings('label_sizes_listing_status','show') == 'show' && in_array($this->welldone->get_settings('show_options','both'),array('both','sizes'))){ ?>
            <ul class="options-swatch options-swatch--size">
            <?php foreach ($sizes_options as $option_value) { ?>
  						<li data-toggle="tooltip" title="<?php echo $option_value['name'];?>" class="size-option">
                <?php echo $option_value['name']; ?>
              </li>
            <?php } ?> 
  					</ul>
          <?php } ?>
          
          <?php if ($product['price']) { ?>
          <div class="price-box">
            <?php if (!$product['special']) { ?>
            <?php echo $product['price']; ?>
            <?php } else { ?>
            <span class="price-box__new"><?php echo $product['special']; ?></span> <span class="price-box__old"><?php echo $product['price']; ?></span>
            <?php } ?>
          </div>
          <?php } ?>
          
          <?php if (isset($product['description'])){ ?>
          <div class="product-preview__info__description">
						<p><?php echo $product['description']; ?></p>
					</div>
          <?php }?>
          
          <div class="product-preview__info__link">
            <a href="#" class="compare-link" onclick="welldone_add_to_compare('<?php echo $product['product_id']; ?>');return false;"><span class="icon icon-bars"></span><span class="product-preview__info__link__text"><?php echo $button_compare; ?></span></a> 
            <a href="#" onclick="welldone_add_to_whishlist('<?php echo $product['product_id']; ?>');return false;"><span class="icon icon-favorite"></span><span class="product-preview__info__link__text"><?php echo $button_wishlist; ?></span></a>
            <?php if(isset($button_cart)){ ?>
              <a href="#" onclick="welldone_add_to_cart('<?php echo $product['product_id']; ?>', '1');return false;" class="btn btn--wd buy-link"><span class="icon icon-ecommerce"></span><span class="product-preview__info__link__text"><?php echo $button_cart; ?></span></a>
            <?php }?>
          </div>
        </div>
      </div>
    </div>
<?php }?>    

 

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


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

в модели  catalog/model/catalog/product.php в методе getProduct,  добавляем поле present

		if ($query->num_rows) {
			return array(
				'product_id'       => $query->row['product_id'],
				'name'             => $query->row['name'],
				'description'      => $query->row['description'],
				'meta_title'       => $query->row['meta_title'],
				'meta_h1'          => $query->row['meta_h1'],
				'meta_description' => $query->row['meta_description'],
				'meta_keyword'     => $query->row['meta_keyword'],
				'tag'              => $query->row['tag'],
				'model'            => $query->row['model'],
				'sku'              => $query->row['sku'],
				'upc'              => $query->row['upc'],
				'ean'              => $query->row['ean'],
				'jan'              => $query->row['jan'],
				'isbn'             => $query->row['isbn'],
				'mpn'              => $query->row['mpn'],
				'location'         => $query->row['location'],
				'quantity'         => $query->row['quantity'],
				'stock_status'     => $query->row['stock_status'],
				'image'            => $query->row['image'],
				'manufacturer_id'  => $query->row['manufacturer_id'],
				'manufacturer'     => $query->row['manufacturer'],
				'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
				'special'          => $query->row['special'],
				'reward'           => $query->row['reward'],
				'points'           => $query->row['points'],
				'tax_class_id'     => $query->row['tax_class_id'],
				'date_available'   => $query->row['date_available'],
				'weight'           => $query->row['weight'],
				'weight_class_id'  => $query->row['weight_class_id'],
				'length'           => $query->row['length'],
				'width'            => $query->row['width'],
				'height'           => $query->row['height'],
				'length_class_id'  => $query->row['length_class_id'],
				'subtract'         => $query->row['subtract'],
				'rating'           => round($query->row['rating']),
				'reviews'          => $query->row['reviews'] ? $query->row['reviews'] : 0,
				'minimum'          => $query->row['minimum'],
				'sort_order'       => $query->row['sort_order'],
				'status'           => $query->row['status'],
				'date_added'       => $query->row['date_added'],
				'date_modified'    => $query->row['date_modified'],
				'viewed'           => $query->row['viewed'],
                                'present'          => $guery->row['present']//добавили в массив поле present
			);
		} else {
			return false;
		}

в контроллере catalog/controller/product/category.php, в массив $data['products']    тоже добавляем present

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

в listing.php

			<?php if ($product['present']==1) {?>
				<div class="present_label present_with_desc"><span><?php echo $text_present; ?></span></div>
			<?php } ?>

 

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


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

Вот ведь спасибище fanatic! Все получилось - осталось только text_present в контроллер категории подключить. Но это я думаю я уже методом тыка найду. А чтобы на главной странице все это заработало, нашел контроллер модуля, отвечающий за вывод того же listing'а.

Спасибо огромное!

...как бы теперь еще понять как тему в "решено" перевести...

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


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, Sepika сказал:

осталось только text_present в контроллер категории подключить.

 

В 28.07.2017 в 09:23, Sepika сказал:

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

и в catalog/language/ru-ru/product/category.php  добавить

$_['text_present'] = 'нужный текст';

 

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


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

fanatic, да - уже добавил - все работает! Спасибо огромное!

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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