用户登录
还没有账号?立即注册
用户注册
点击换图
投稿取消
文章分类:
还能输入300字

上传中....

Magento - 您如何将无限 CMS 静态块(具有特定“标识符")的结果返回到 CMS 页面

<div class="block-content"><?php echo $_block->toHtml();?>

循环 foreach($collection as $key => $value) 打印出这个:

Key: 27 - 区块 ID: testimonial-1键:28 - 区块 ID: testimonial-2键:29 - 区块 ID:testimonial-3键:30 - 区块 ID: testimonial-4键:31 - 区块 ID:testimonial-5

哪个好.

然而,唯一回显的块是最后一个块 (testimonial-5).由于我试图列出所有推荐块,我如何将每个块ID回显到页面?

放轻松,我是 php 的初学者.

解决方案

您没有在 foreach 循环内打印块.解决方法:将}括号移到粘贴代码的末尾

$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);如果 ($_block) : ?><div class="block block-testimonial"><div class="block-title"><strong><?php echo $this->getTitle();?></strong>

<div class="block-content"><?php echo $_block->toHtml();?>

<?php万一;}

我认为在 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.