Magento Forum

   
Neuzugänge beliebig vieler Kategorien mit new.phtml
 
cradossk
Jr. Member
 
Total Posts:  16
Joined:  2008-09-21
 

Hi,

ich habe mir beim Versuch aktuelle Produkte aus mehreren Kategorien auf der Startseite anzuzeigen, einige Tage um den Kopf geschlagen.
Ich habe auch eine Lösung parat. Mich würde aber mal interessieren, ob jemand für dieses Problem eine elegantere Möglichkeit gefunden hat.

Das Problem war, ich wollte mehrere Kategorie-IDs als Übergabeparameter aus einem Blockaufruf einer CMS-Seite holen. Das habe ich aber zum Verrecken nicht hinbekommen.
Entweder bin ich nicht mit der __construct-Methode von Mage_Catalog_Block_Product_New klargekommen, oder ich habe beim wiederholten Aufruf von addCategoryFilter() einen “Duplicate alias"-Error bekommen. Das Ganze über Mage_Catalog_Block_Product_List war auch der absolute Krampf. Da waren noch einige andere Dinge, aber die hab ich zum Glück schon wieder verdrängt.

Aus der Not heraus, bin ich einen völlig anderen Weg gegangen.

Mit einer eigenen SQL-Query hole ich mir die benötigeten Produkt-IDs der entsprechenden Kategorie und greife über $_product->load() auf die entsprechenden Daten zu. Dadurch kann ich dann auch weitestgehend die new.phtml-Vorlage benutzen. Ich habe nur die foreach- durch eine for-Schleife ersetzt, und darin das jeweile Produkt geladen.

Das Ganze sieht jetzt so aus:

<?php
$_product 
Mage::getModel('catalog/product');
$_read Mage::getSingleton('core/resource')->getConnection('core_read');

$sql = ("SELECT  `cpev`.`entity_id` AS `ID`
FROM `catalog_product_entity` AS `cpe`
LEFT JOIN `catalog_product_entity_varchar` AS `cpev` ON `cpev`.`attribute_id` = 55
AND `cpe`.`entity_id` = `cpev`.`entity_id`
LEFT JOIN `catalog_product_entity_decimal` AS `cped` ON `cped`.`attribute_id` = 59
AND `cpev`.`entity_id` = `cped`.`entity_id`
WHERE `cpe`.`category_ids` LIKE '&#x11;9%'
ORDER BY `cpe`.`entity_id` DESC LIMIT 0, 5"
);

$readresult $_read->query($sql);
while (
$row $readresult->fetch()) { $ID[]=$row['ID']}
?>

<div class="box recently">
    <
table border="0" cellspacing="0" class="recently-list" id="recently-compared-list-table">
        <
tr><th colspan="5"><?php echo $this->__('New Products'?></th></tr>
        <
tr>
            
<?php for ($i 0$i count($ID); $i++): ?>
            <?php $_product
->load($ID[$i]?>
            
<td>
            <
div style="margin:5px"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(110, 110) ?>" width="110" height="110" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a></div>
            <
p style="margin:5px"><class="product-name" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></p>
            </
td>
            
<?php endfor ?>
        
</tr>
        <
tr>
            
<?php for ($i 0$i count($ID); $i++): ?>
            
<td>
                
<?php echo $this->getReviewsSummaryHtml($_product'short'?>
                <?php 
echo $this->getPriceHtml($_product?>
                <?php 
if($_product->isSaleable()): ?>
                
<button class="form-button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><?php echo $this->__('Add to Cart'?></span></button>
                
<?php else: ?>
                
<div class="out-of-stock"><?php echo $this->__('Out of stock'?></div>
                
<?php endif; ?>
                
<div class="clear"></div>
                <
class="add-to">
                    
<?php if ($this->helper('wishlist')->isAllow()) : ?>
                    
<a href="<?php echo $this->getAddToWishlistUrl($_product) ?>" class="link-cart"><?php echo $this->__('Add to Wishlist'?></a>
                    
<?php endif; ?>
                    <?php 
if($_compareUrl=$this->getAddToCompareUrl($_product)): ?><br />
                    <
a href="<?php echo $_compareUrl ?>"><?php echo $this->__('Add to Compare'?></a>
                    
<?php endif; ?>
                
</p>
            </
td>
            
<?php endfor ?>
        
</tr>
</
table>

Ist das $_product->load() innerhalb einer Schleife anzuraten? Oder geht dadurch die Performance in den Keller?
Die Query Log-Datei platzt bei einem Seitenaufruf schon so aus allen Nähten, da will ich nicht noch zusätzlich feste druff.

 
Magento Community Magento Community
Magento Community
Magento Community
 
cradossk
Jr. Member
 
Total Posts:  16
Joined:  2008-09-21
 

Hab die ganze Sache in bisschen schicker gemacht. So funktioniert auch special_price auf der Startseite.

<?php
$_product 
Mage::getModel('catalog/product');
$collection1 $_product->getCollection();
$category1 Mage::getSingleton('catalog/category')->load(Elternkategorie_ID);
$collection1
->addAttributeToSelect('name')
->
addAttributeToSelect('price')
->
addAttributeToSelect('status')
->
addAttributeToSelect('special_price')
->
addAttributeToSelect('small_image')
->
addAttributeToSort('entity_id','desc')
->
addCategoryFilter($category1);
$collection1->getSelect()->limit(5);
$collection1->load();

$collection2 $_product->getCollection();
$category2 Mage::getSingleton('catalog/category')->load(Elternkategorie_ID);
$collection2
->addAttributeToSelect('name')
->
addAttributeToSelect('price')
->
addAttributeToSelect('status')
->
addAttributeToSelect('special_price')
->
addAttributeToSelect('small_image')
->
addAttributeToSort('entity_id','desc')
->
addCategoryFilter($category2);
$collection2->getSelect()->limit(5);
$collection2->load();
$_products $collection1->load();
?>

<div class="box recently">
    <
table border="0" cellspacing="0" class="recently-list" id="recently-compared-list-table">
        <
tr><th colspan="5"><h4><?php echo $this->__('New Products1'?></h4></th></tr>
        <
tr>
    
<?php foreach ($_products->getItems() as $_product): ?>
            
<td>
            <
div class="new_image"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(110, 110) ?>" width="110" height="110" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a></div>
            <
class="description"><class="product-name" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></p>
            
<?php echo $this->getReviewsSummaryHtml($_product'short'?>
            
</td>
    
<?php endforeach; ?>
        
</tr>
        <
tr>
    
<?php foreach ($_products->getItems() as $_product): ?>
            
<td valign="bottom">
                
<?php echo $this->getPriceHtml($_producttrue'-new'?>
            
</td>
    
<?php endforeach; ?>
        
</tr>
        <
tr>
    
<?php foreach ($_products->getItems() as $_product): ?>
                
<td class="pro">
                
<?php if($_product->isSaleable()): ?>
                
<button class="form-button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><?php echo $this->__('Add to Cart'?></span></button>
                
<?php else: ?>
                
<div><span class="out-of-stock"><?php echo $this->__('Out of stock'?></span></div>
                
<?php endif; ?>
                
<div class="clear"></div>
                <
class="add-to">
                    
<?php if ($this->helper('wishlist')->isAllow()) : ?>
                    
<a href="<?php echo $this->getAddToWishlistUrl($_product) ?>" class="link-cart"><?php echo $this->__('Add to Wishlist'?></a>
                    
<?php endif; ?>
                    <?php 
if($_compareUrl=$this->getAddToCompareUrl($_product)): ?><br />
                    <
a href="<?php echo $_compareUrl ?>"><?php echo $this->__('Add to Compare'?></a>
                    
<?php endif; ?>
                
</p>
            </
td>
    
<?php endforeach; ?>
        
</tr>
    
<?php $_products $collection2->load(); ?>
        
<tr><th colspan="5"><h4><?php echo $this->__('New Products2'?></h4></th></tr>
usw.

Übrigens mit $collection->load(true) wird die Querystring am Bildschirm ausgegeben.

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