Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Sortare dupa Pret - crescator - fara valoare 0
 
Alecs00
Member
 
Total Posts:  73
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.

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2205
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.

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2205
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.
 
Magento Community Magento Community
Magento Community
Magento Community
 
Alecs00
Member
 
Total Posts:  73
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

 
Magento Community Magento Community
Magento Community
Magento Community
 
tzyganu
Mentor
 
Avatar
Total Posts:  2205
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.

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

Salut Marius, a mers perfect smile

mersi mult! Alex

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