Magento - 如何将不受限制的CMS静态块(带有某些“标识符”)的结果返回给CMS页面 [英] Magento - How do you return results of unlimited CMS Static blocks (with certain "Identifier") to a CMS Page

查看:123
本文介绍了Magento - 如何将不受限制的CMS静态块(带有某些“标识符”)的结果返回给CMS页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

快速浏览:我试图从一组静态块返回结果到一个phtml文件(然后从 cms页面 Magento



注意:让我比别人更亲密,但我没有试过似乎工作100%?



详细信息:

我已经有了一组特定的静态块,它们都以 testimonial - 标识符开头。例如,每个静态块如下所示: testimonial-1 testimonial-2 testimonial-3 等等。我在我的开发网站上共有 5 (在现场更多,但这不是什么结果)。



我有一个 CMS页面,在 name.phtml 文件中添加代码(我的phtml文件的位置在这里: app / design / frontend / [package] / [模板] /模板/页面/ ):

  {{block type =core / templatetemplate =page / name.phtmltitle =其他说法:identifier =testimonial-}} 



<

 <?php 
//将集合添加到.phtml文件中过滤
$ collection = Mage :: getModel('cms / block') - > getCollection()
- > addFieldToFilter('identifier',array('like'=>'testimonial'。 '%'))
- > addFieldToFilter('is_active',1);

//获得计数
$ blockCount = $ collection-> count();
echo'Block Count:'。 $ blockCount。 '< br />'; //仅用于测试

$ blockNum = 1;
foreach($ collection as $ key => $ value){
$ _blockId = $ this-> getIdentifier();
$ block_ID = $ _blockId。 $的blocknum;
回显Key:。 $键。 - 。 区块ID:。 $ block_ID。 < br />;
$ blockNum ++;


block = $ this-> getLayout() - > createBlock('cms / block') - > setBlockId($ block_ID);

if($ _block):
?>
< div class =block block-testimonial>
< div class =block-title>
< strong><?php echo $ this-> getTitle(); ?>< /强>
< / div>
< div class =block-content>
<?php echo $ _block-> toHtml(); ?>
< / div>





< foreach($ collection as $ key => $ value)打印出来:

<$ p








Key:30 - Block ID:testimonial-4
Key:31 - Block ID:testimonial-5





然而,唯一被回显的块是最后一块( testimonial-5 )。因为我试图列出所有的评价块,我怎样才能将每个块ID回显到页面?


$ b $对于我来说,简单易行,我是一个在PHP初学者。

解决方案


解决方案:将括号移动到粘贴代码的末尾
$ b $ pre $ $ $ $
foreach($ collection as $ key => $ value){
$ _blockId = $ this-> getIdentifier();
$ block_ID = $ _blockId。 $的blocknum;
回显Key:。 $键。 - 。 区块ID:。 $ block_ID。 < br />;
$ blockNum ++;
$ b $ _block = $ this-> getLayout() - > createBlock('cms / block') - > setBlockId($ block_ID);

if($ _block):?>
< div class =block block-testimonial>
< div class =block-title>
< strong><?php echo $ this-> getTitle(); ?>< /强>
< / div>
< div class =block-content>
<?php echo $ _block-> toHtml(); ?>
< / div>
<?php
endif;
}

我认为在Magento Connect上是一些见证模块,想。
另一方面,如果你正在寻找'简单'的解决方案,或者如果你正在尝试使用Magento,这种方法是好的。


Quick Overview: I am trying to return results from a specific set of static blocks to a phtml file (which is then called on from a cms page) in Magento.

Note: I've been searching all over google and some answers get me closer than others but nothing I've tried seems to work 100%?

Details:

I already have a set of specific static blocks that all start with an identifier of testimonial-. For example, each static block is like this: testimonial-1, testimonial-2, testimonial-3 and so on. I have a total of 5 on my dev site (more on live site but that is no consequence here).

I have a CMS Page with code pulling in the name.phtml file (location of my phtml file is here: app/design/frontend/[package]/[template]/template/page/):

{{block type="core/template" template="page/name.phtml" title="Others Say:" identifier="testimonial-"}}

Here is my code for the .phtml file:

<?php
    // add the collection with filters
$collection = Mage::getModel('cms/block')->getCollection()
    ->addFieldToFilter('identifier', array('like'=>'testimonial'.'%'))
    ->addFieldToFilter('is_active', 1);

// get the count
$blockCount = $collection->count();
    echo 'Block Count: ' . $blockCount . '<br />'; // just for testing

$blockNum = 1;
foreach($collection as $key => $value){
    $_blockId = $this->getIdentifier();
    $block_ID = $_blockId . $blockNum;
    echo "Key: " . $key . " - " . "Block ID: " . $block_ID . "<br />";
    $blockNum++;
}

$_block = $this->getLayout()->createBlock('cms/block')->setBlockId($block_ID);

if ($_block) :
?>
<div class="block block-testimonial">
<div class="block-title">
    <strong><?php echo $this->getTitle(); ?></strong>
</div>
<div class="block-content">
<?php echo $_block->toHtml(); ?>
</div>

The loop foreach($collection as $key => $value) prints out this:

Key: 27 - Block ID: testimonial-1
Key: 28 - Block ID: testimonial-2
Key: 29 - Block ID: testimonial-3
Key: 30 - Block ID: testimonial-4
Key: 31 - Block ID: testimonial-5

Which is good.

However, the only block that is echoed is the last block (testimonial-5). Since I'm trying to list out all the testimonial blocks, how can I echo out each block id to the page?

Go easy on me, I'm a beginner at php.

解决方案

You are not printing block inside foreach loop. Solution: move } parenthesis to the end of pasted code

$blockNum = 1;
foreach($collection as $key => $value){
    $_blockId = $this->getIdentifier();
    $block_ID = $_blockId . $blockNum;
    echo "Key: " . $key . " - " . "Block ID: " . $block_ID . "<br />";
    $blockNum++;    

    $_block = $this->getLayout()->createBlock('cms/block')->setBlockId($block_ID);

    if ($_block) : ?>
        <div class="block block-testimonial">
            <div class="block-title">
                <strong><?php echo $this->getTitle(); ?></strong>
            </div>
        <div class="block-content">
        <?php echo $_block->toHtml(); ?>
        </div>
    <?php 
    endif;
}

I think that on Magento Connect are some Testimonial Modules, that are doing job you want. On the other hand, if you are looking for 'simple' solution or if you are trying to play with Magento, is this approach ok.

这篇关于Magento - 如何将不受限制的CMS静态块(带有某些“标识符”)的结果返回给CMS页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆