【问题标题】:how do I show more than 5 featured products on homepage in magento 1.7?如何在 magento 1.7 的主页上显示超过 5 个特色产品?
【发布时间】:2015-07-30 22:09:36
【问题描述】:

我进行了大量研究,但没有找到适合我的解决方案。

我试图在主页的“特色产品”部分中显示超过 5 件的默认产品数量。

我有 10 项当前设置为“新”,但只有 5 项会显示。

关于如何在不更改核心代码的情况下执行此操作的任何提示?

http://saks-jewelers.com

(忽略我正在处理的底部滑块)

已编辑以详细说明我当前如何显示它们

我已经使用我创建的模板 phtml 文件列出了它们,然后添加了一个静态块来在我的 hp 上调用它:

<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?>
<?php $_columnCount = $this->getColumnCount(); ?>
    <?php $i=0; foreach ($_products->getItems() as $_product): ?>
        <?php if ($i++%$_columnCount==0): ?>
        <ul class="featured-products-grid">
        <?php endif ?>
            <a href="<?php echo $_product->getProductUrl() ?>">
            <li >
            <div class="drop-shadow curved curved-hz-2">
                <img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135) ?>" width="135" height="135" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
                <h3 class="product-name"><?php echo $this->htmlEscape($_product->getName()) ?></h3>
                <?php echo $this->getPriceHtml($_product, true, '-new') ?>
        <button type="button" title="View Product" class="button" onclick="setLocation('<?php echo $_product->getProductUrl() ?>')"><span><span>View Product</span></span></button>
        </div>
            </li></a>
        <?php if ($i%$_columnCount==0 || $i==count($_products)): ?>
        </ul>
        <?php endif ?>
    <?php endforeach; ?>
<?php endif; ?>

和静态块代码:

<div id="featured-products-container">
  <div class="featured-products-heading"><strong>Featured Products</strong></div>
  <div class="featured-products-heading-line"></div>
    <div id="featured-products-grid">
        {{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/featured-products.phtml"}}
    </div>
<div style="clear:both;"></div>
</div>

【问题讨论】:

  • 我应该指出,我不想创建一个单独的类别来调用这些产品。我想依赖项目的“设置 NewFrom”和“NewTo”日期,以便可以提前安排它们等。
  • 您实际使用什么来展示这些特色产品?似乎是一个自定义扩展,而您没有提供任何相关信息。
  • 不,没有自定义扩展,只是创建了一个新的 .phtml 文件“featured-products.phtml”来调用这些项目(从我不久前找到的某人的示例中获取)。然后我刚刚创建了一个新的静态块来调用这个模板文件,然后将这个静态块添加到我的主页。
  • 太棒了,你在 featured-products.phtml 中实际放了什么?
  • 好的,编辑我的问题以包含 phtml 代码。让我知道您是否需要查看我的静态块代码

标签: magento


【解决方案1】:

如果它用于新产品而不是特色产品(因为您将不得不为特色产品使用一些扩展名并且您没有说明任何内容) 需要改行\app\code\core\Mage\Catalog\Block\Product\New.php

$products->setOrder(’news_from_date’)->setPageSize(5)->setCurPage(1);

改成

$products->setOrder(’news_from_date’)->setPageSize(10)->setCurPage(1);

这只是一个参考代码。您不应更改任何核心文件,因此您需要创建模块并覆盖块类Mage_Catalog_Block_Product_New

在您的 .phtml 中使用它作为第一行代码

$this-&gt;setProductsCount(10);

【讨论】:

  • 我的 new.php 文件在任何地方都不包含这一行(版本 1.7 ?)但是谢谢
  • const DEFAULT_PRODUCTS_COUNT = 5;将此更改为 const DEFAULT_PRODUCTS_COUNT = 10;这是在 \app\code\core\Mage\Catalog\Block\Product\New.php 中定义的 这不是公认的方式,但将是快速修复的出路
  • 还有公共函数 setProductsCount($count)。所以在你的 .phtml 中尝试 this($this->setProductsCount(10)) 在这行代码之前 getProductCollection()) && $_products->getSize()): ? >
  • 嘿,成功了!谢谢! - 所以,我遵循了你最近的建议,将它放在我的 phtml 文件中,然后在我调用 phtml 文件的静态块中的 {{block ...}} 中使用 products_count="10" 行,然后效果很好 - 无需破解 new.php。谢谢!
【解决方案2】:

如果您使用echo count($_products),您可能会发现它始终为 5。这是因为该块正在确定加载的集合。打开包含$this-&gt;getProductCollection() 函数的块并按照代码进行操作。该集合可能会通过 Mage::getStoreConfig 调用后端设置来限制在某个地方。 我希望这有帮助!

【讨论】:

  • (php 新手),那么这与我在 "Mage_Catalog_Block_Product_New" 之前识别的块相同吗?我可以在不破坏核心块的情况下更改计数吗?我真的希望这是一个简单的更改,以便以后轻松更新核心......
  • 我发现一个线程有人试图通过 XML 布局更新来更改此计数,但我无法让它工作......也许我做错了?
【解决方案3】:

您正在使用块类Mage_Catalog_Block_Product_New 来展示您的新产品......一切都很好。我们来看看块类定义:

class Mage_Catalog_Block_Product_New extends Mage_Catalog_Block_Product_Abstract
{
    protected $_productsCount = null;

    const DEFAULT_PRODUCTS_COUNT = 5;

const 的定义应该引起您的注意,因为这就是只显示 5 个产品的原因。 在Mage_Catalog_Block_Product_New::_beforeToHtml() 函数中,集合被限制为一定数量:

[...]-&gt;setPageSize($this-&gt;getProductsCount())[...]

public function getProductsCount()
{
    if (null === $this->_productsCount) {
        $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT;
    }
    return $this->_productsCount;
}

“神奇”的事情(功课:深入 Magento 并找出原因)是 _productCount 也可以从模板中传递:

{{block products_count="2" type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/featured-products.phtml"}}

这将只显示 2 个产品。

【讨论】:

  • 这可以将我的显示限制为 2,但如果我使用“products_count="10”,它仍然只显示 5...?
  • 如果我在 new.php 中将 const 更改为定义为“10”,那么它当然可以工作,但我不应该弄乱这个文件,因为它只会在我更新时被覆盖magento 在路上,不是吗? (请原谅我,对于 php 和 magento 核心文件,我还是个新手)。
猜你喜欢
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多