Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v2.x.
Por leandromello
#59495
Amigos,
Estou utilizando este código para esconder o botão "Comprar" e mostrar "Produto esgotado" para quando o estoque estiver zerado.
Código: Selecionar todos
<?php if ($product['quantity'] > 0) { ?>
<div class="cart handpoint" onclick="addToCart('<?php echo $product['product_id']; ?>');"><i class='icon-shopping-cart'></i>&nbsp;&nbsp;<?php echo $button_cart; ?></div>
<?php } ?>   


<?php if ($product['quantity'] < 1) { ?>
<div class="cart handpoint" style="color:#F00; font-weight:bold">Produto Esgotado!</div>
<?php } ?> 
Este código é baseado na quantidade do estoque.
Agora preciso que o código seja baseado no status do produto e não no estoque.
Por exemplo, o botão comprar apareça somente para os produtos com status de "Disponível" e apareça "Produto esgotado" para quando o estoque estiver com o status de "Esgotado".

Quero isso, pq agora estou vendendo produtos com o estoque zerado.
Alguém consegue ajudar?
Por veteranodf
Mensagens Especiais
#59506
Então você tem que criar uma nova variável no controller do módulo ou página, exemplo no produto

catalog/controller/product/product.php

Acima de

$this->load->model('tool/image')

Insira

$data['msg_stock'] = $product_info['stock_status'];

Agora no template do produto

<?php if ($msg_stock == 'Aqui a mensagem referente ao estoque') { ?>
<div class="cart handpoint" style="color:#F00; font-weight:bold">Produto Esgotado!</div>
<?php } ?>
Por leandromello
#59508
veteranodf,
Não deu muito certo, deixa eu explicar melhor.
O meu OC é o 1.5.5.1
Estou tentando fazer isso no latest.tpl

O caminho é o mesmo?

Olha o meu latest.tpl, como é
Código: Selecionar todos
<?php
class ControllerModuleLatest extends Controller {
	protected function index($setting) {
		$this->language->load('module/latest');
		
      	$this->data['heading_title'] = $this->language->get('heading_title');
		
		$this->data['button_cart'] = $this->language->get('button_cart');
				
		$this->load->model('catalog/product');
        
		$this->load->model('catalog/category');
        
        $this->data['categories'] = $this->model_catalog_category->getCategories(0);

		$this->load->model('tool/image');
		
		$this->data['products'] = array();
        if (!isset($setting["filter_name"])) $setting["filter_name"] = '';
        if (!isset($setting["filter_tag"])) $setting["filter_tag"] = '';
        if (!isset($setting["filter_description"])) $setting["filter_description"] = '';
        if (!isset($setting["filter_sub_category"])) $setting["filter_sub_category"] = '';
        if (!isset($setting["filter_manufacturer_id"])) $setting["filter_manufacturer_id"] = '';
        if (!isset($setting["sort"])) $setting["sort"] = 'p.date_added';
        if (!isset($setting["order"])) $setting["order"] = 'DESC';
		if((!array_key_exists('route',$this->request->get)) || ($this->request->get['route'] == 'common/home')) {
		 $setting['limit'] = 10000;
		}
		$data = array(
            'filter_name'         => $setting["filter_name"], 
			'filter_tag'          => $setting["filter_tag"], 
			'filter_description'  => $setting["filter_description"],
			'filter_sub_category' => $setting["filter_sub_category"], 
            'filter_manufacturer_id' => $setting["filter_manufacturer_id"],
			'sort'  => $setting["sort"],
			'order' => $setting["order"],
			'start' => $setting['start'],
            'limit' => $setting['limit'],
            'filter_category_id' => $setting['category']
		);

        if (isset($setting["special"]) && $setting["special"] == 1) $results = $this->model_catalog_product->getProductSpecials($data); else $results = $this->model_catalog_product->getProducts($data);
		
		$products_feat = explode(',', $this->config->get('featured_product'));	
	
		foreach ($results as $result) {

			if ($result['image']) {
                $pageURL = "image/";
                if (file_exists($pageURL.$result['image'])) {
                    $imgsize = (getimagesize($pageURL.$result['image']));
				    $image = $this->model_tool_image->resize($result['image'], $setting['image_width'], ($imgsize[1]/($imgsize[0]/$setting['image_width'])));
                } else $image= false;
			} else {
				$image = false;
			}
						
			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_review_status')) {
				$rating = $result['rating'];
			} else {
				$rating = false;
			}
            
            $this->data['catprod'] = array();

            $product_category = $this->model_catalog_product->getCategories($result['product_id']);

            foreach ($product_category as $prodcat) {
            
            $category_info = $this->model_catalog_category->getCategory($prodcat['category_id']);
            
            if ($category_info) {
            
            $this->data['catprod'][] = array(
            'name' => $category_info['name'],
            'href' => $this->url->link('product/category', 'path=' . $category_info['category_id'])
            );
            }
            }
            //end of product category
            if((!array_key_exists('route',$this->request->get)) || ($this->request->get['route'] == 'common/home')) {
				if (in_array($result['product_id'] ,$products_feat)) {
						$this->data['products'][] = array(
						'product_id' => $result['product_id'],
						'thumb'   	 => $image,
						'name'    	 => $result['name'],
						'price'   	 => $price,
						'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 130) . '..',
						'special' 	 => $special,
						'rating'     => $rating,
						'location'   => $result['location'],
						'reviews'    => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
						'href'    	 => $this->url->link('product/product', 'product_id=' . $result['product_id']),
						'quantity'   => $result['quantity'],
						'category'   => $this->data['catprod']
					);	
				}
			
			} else {
				
				$this->data['products'][] = array(
				'product_id' => $result['product_id'],
				'thumb'   	 => $image,
				'name'    	 => $result['name'],
				'price'   	 => $price,
                'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 130) . '..',
				'special' 	 => $special,
				'rating'     => $rating,
                'location'   => $result['location'],
				'reviews'    => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
				'href'    	 => $this->url->link('product/product', 'product_id=' . $result['product_id']),
				'quantity'   => $result['quantity'],
                'category'   => $this->data['catprod']
			);
				
				
				}
			
            
		} 




		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/latest.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/module/latest.tpl';
		} else {
			$this->template = 'default/template/module/latest.tpl';
		}

		$this->render();
	}
}
?>
Por leandromello
#59510
verdade... errei. foi mal. não notei.
tem como alterar o tópico pra lá?

veteranodf, ainda consegue me ajudar?
Fiz o mesmo com o latest.tpl e não deu certo... ao invés de aparecer o resultado fica somente em branco.
O que eu preciso é me basear no stock_status_id da tabela 'product', que é a situação do estoque do produto.

No caso "Esgotado" é o stock_status_id = 5
ainda não consegui.
Avatar do usuário
Por leandrorppo
Mensagens Especiais
#59648
O status do estoque é definido conforme quantidade, acho que vai dar na mesma, mas segue o script ("rascunho" do que tem fazer), isso no tpl da página de produto, nas outras terá que fazer a chamada do stock nos controllers, etc:
<?php if ($stock == "Esgotado"){ ?>
Produto Esgotado
<?php }else{ ?>
<input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />
<?php } ?>
Editado pela última vez por leandrorppo em 07 Fev 2017, 15:15, em um total de 1 vez.
Por leandromello
#59664
Fiz a chamada no controller/latest.tpl desta maneira:
Código: Selecionar todos
'stock'   => $result['stock'],
mas não funcionou, fica aparecendo o "Produto Esgotado" e o botão comprar ao mesmo tempo nos produtos Disponíveis.
Por afarias
#60128
To procurando a um tempão a resposta a esta mesma pergunta para o OC v2.0.3.1, ai quando acho um tópico com a minha versão, o tópico com a resposta é de uma versão antiga.... foi postado no lugar errado. perdi meu tempo aqui!!! :evil:

Night games. One night, no worries Real Women P[…]

@Manoel Vidal Poderia me ajudar com 2 coisas n[…]

Looking for a partner for an unforgettable night? […]

Vou verificar, Obrigado