Try the Demo

Magento Forum

   
Sortare dupa Pret - crescator - fara valoare 0
 
Alecs00
Member
 
Total Posts:  40
Joined:  2011-05-03
 

Salutare,

Momentan produsele sunt sortate dupa pret, problema mea e ca cele cu pret \"0\" apar primele, ceea ce e si normal

Folosesc un cod de genu\”:

<?php if($_product->price==0): ?>
    <?php 
echo \'<div class=\"price-box\"><span>Produsul este disponibil</span></div>\'?>
<?php 
else: ?>
    <?php 
echo $this->getPriceHtml($_producttrue?>
<?php 
endif; ?>

Care imi afisera \"produsul nu este disponibil\” Daca acesta are pretul \"0\".

Cum pot sa ordonez dupa pret dar totusi produsele cu pretul 0 sa apara ultimile?

PS: am 9000 de produse deci nu le pot ordona dupa pozitie.

 Signature 

MediaPixel Blog MediaPixel

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2168
Joined:  2009-11-18
Bucharest, Romania
 

Salut.
Uite cum am facut eu.
Am agaugat un nou atribut de tip da/nu pe produs. (cred ca se poate si fara dar e mai usor de facut selecturi cu atributul respectiv).
Sa ul numim ‘has_zero_price’.
Atributul e global (sau la are scop ‘website’ daca atributul pret are scop ‘website’) si are ‘use_in _product_listing’ true.
Am facut un observer care la salvarea produsului, in cazul in care pretul este 0 atunci seteaza acest atribut pe ‘Da’(1). Daca pretul e diferit atunci atributul are valoare ‘Nu’(0).

Apoi am suprascris clasa Mage_Catalog_Model_Resource_Product_Collection.
(ghid pentru a suprascrie un model)
Mai exact metoda addAttributeToSort.
Arata asa in clasa mea:

public function addAttributeToSort($attribute$dir self::SORT_ORDER_ASC)
    
{
        
if ($attribute == 'price'){
            parent
::addAttributeToSort('has_zero_price''asc');    
        
}
        
return parent::addAttributeToSort($attribute$dir);
    
}

Totul functioneaza fara nici o problema.
Dezavantajul e ca trebuie salvate (manual sau print-un script) produsele care au deja pret 0 la momentul adaugarii atributului. pentru ca acesta sa se seteze pe ‘Da’.

Marius.

 Signature 

http://marius-strajeru.blogspot.com/
Check out the Ultimate Module Creator:
on magento connect
on github

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2168
Joined:  2009-11-18
Bucharest, Romania
 

OK...uita ce am scris mai sus.
Functioneaza si codul ala, dar dupa ce am scris post-ul am incercat sa gesesc o metoda mai simpla fara alte atribute aditionale.
Iata ce mi-a iesit.
Trebue suprascrisa metods Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSort().
Pentru asta poti crea o extensie noua.
O sa o numim Easylife_Catalog. (poti schimba Easylife in ce vrei tu, doar sa a grija sa schimbi peste tot.)
Ai nevoie de urmatoarele fisiere:
app/code/local/Easylife/Catalog/etc/config.xml:

<?xml version="1.0"?>
<config>
    <
modules>
        <
Easylife_Catalog>
            <
version>0.0.1</version>
        </
Easylife_Catalog>
    </
modules>
    <global>
        <
models>
             <
catalog_resource>
                <
rewrite>
                    <
product_collection>Easylife_Catalog_Model_Resource_Product_Collection</product_collection>
                </
rewrite>
            </
catalog_resource>
        </
models>
 </global>
</
config>
app/code/local/Easylife/Catalog/Model/Resource/Product/Collection.php
<?php 
Easylife_Catalog_Model_Resource_Product_Collection 
extends Mage_Catalog_Model_Resource_Product_Collection{
    
public function addAttributeToSort($attribute$dir self::SORT_ORDER_ASC)
    
{
        
if ($attribute == 'price'){
            $this
->addExpressionAttributeToSelect('has_zero_price''CASE WHEN {{attribute}} = 0.0000 THEN 1 ELSE 0 END''price');
        
parent::addAttributeToSort('has_zero_price''asc');
        
}
        
return parent::addAttributeToSort($attribute$dir);
    
}
}
class
app/etc/modules/Easylife_Catalog.xml
<?xml version="1.0"?>
<config>
    <
modules>
        <
Easylife_Catalog>
            <
active>true</active>
            <
codePool>local</codePool>
            <
depends><Mage_Catalog /></depends>
        </
Easylife_Catalog>
    </
modules>
</
config>

Clear la cache si incearca din nou.

Inca un “tip”.
Daca vrei ca pentru produsele cu pret 0 sa se afiseze mesajul ‘Produsul este disponibil’ ar fi mai bine sa modifici direct app/design/{interface}/{theme}/catalog/product/price.phtml

<?php 
$_product 
$this->getProduct();
if (
$_product->getPrice() == 0){
 
echo \'<div class="price-box"><span>Produsul este disponibil</span></div>';
}
else{
//continutul initial al fisierului aici.
}
Asta iti asigura ca oriunde ar aparea produsul (lista, detalii produs, related products, upsells, crosssells, search) in locul pretului va aparea mesajul tau.
Bafta,
Marius.

 Signature 

http://marius-strajeru.blogspot.com/
Check out the Ultimate Module Creator:
on magento connect
on github

 
Magento Community Magento Community
Magento Community
Magento Community
 
Alecs00
Member
 
Total Posts:  40
Joined:  2011-05-03
 

Salut Marius, si mersi de raspuns!

Dar mai am o problema, versiune de magento e 1.5.1.0 si nu se potrivesc functiile.

Fisierul Collection.php se gaseste in:  /public_html/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php

Deci am schimbat in config.xml :

<product_collection>Easylife_Catalog_Model_Resource_Eav_Mysql4_Product_Collection</product_collection>

in Collection.php :

Easylife_Catalog_Model_Resource_Eav_Mysql4_Product_Collection extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection{

Sper ca pana aici am procedat corect nu ?

Dar in fisierul Collection.php din core, functia difera foarte tare :

$storeId Mage::app()->getStore()->getId();
        if (
$attribute == \'price\' && $storeId != 0{
            $this
->addPriceData();
            
$this->getSelect()->order(\"price_index.min_price {$dir}\");

            return 
$this;
        
}
Poti sa ma ajuti cu o noua functie ?  :D

Ms mult, Alex

 Signature 

MediaPixel Blog MediaPixel

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2168
Joined:  2009-11-18
Bucharest, Romania
 

Salut
Mda...se pare ca pentru Magento 1.5 e putin diferit.
Pentru mine a mers in felul urmator.
Fisierele de creat sunt aceleasi. Doar continutul a doua dintre ele difera.
app/code/local/Easylife/Catalog/etc/config.xml:

<?xml version="1.0"?>
<config>
    <
modules>
        <
Easylife_Catalog>
            <
version>0.0.1</version>
        </
Easylife_Catalog>
    </
modules>
    <global>
        <
models>
             <
catalog_resource_eav_mysql4><!-- E diferit tagul asta pentru 1.5 -->
                <
rewrite>
                    <
product_collection>Easylife_Catalog_Model_Resource_Product_Collection</product_collection>
                </
rewrite>
            </
catalog_resource_eav_mysql4>
        </
models>
 </global>
</
config>
app/code/local/Easylife/Catalog/Model/Resource/Product/Collection.php
<?php 
class Easylife_Catalog_Model_Resource_Product_Collection extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection{
    
public function addAttributeToSort($attribute$dir self::SORT_ORDER_ASC)
    
{
        $storeId 
Mage::app()->getStore()->getId();
        if (
$attribute == 'price' && $storeId != 0){
            $this
->addExpressionAttributeToSelect('has_zero_price'"(CASE WHEN {{attribute}} = 0.00 THEN 1 ELSE 0 END)"'price');
            
parent::addAttributeToSort('has_zero_price''asc');
        
}
        
return parent::addAttributeToSort($attribute$dir);
    
}
}
app/etc/modules/Easylife_Catalog.xml ramane la fel.

Pentru mine a functionat pe 1.5.0.1. Nu am o varianta de 1.5.1.0 instalata. Incearca asa. Daca nu merge imi zici si instalez si varianta respectiva.

Bafta,
Marius.

 Signature 

http://marius-strajeru.blogspot.com/
Check out the Ultimate Module Creator:
on magento connect
on github

 
Magento Community Magento Community
Magento Community
Magento Community
 
Alecs00
Member
 
Total Posts:  40
Joined:  2011-05-03
 

Salut Marius, a mers perfect smile

mersi mult! Alex

 Signature 

MediaPixel Blog MediaPixel

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top