2012-02-10 17 views
10

Descripción rápida: que estoy tratando de devolver los resultados a partir de un conjunto específico de bloques estáticos a un archivo phtml (que luego se invoca desde un cms página) en Magento.Magento - ¿Cómo se devuelve resultados de un número ilimitado de CMS estáticas bloques (con cierta "Identifier") a un CMS Página

Nota: He estado buscando en todo google y algunas respuestas me acercan más que otras, pero nada de lo que he probado parece funcionar al 100%?

Detalles:

que ya tienen un conjunto de bloques estáticos específicos que todos comienzan con un identificador de testimonial-. Por ejemplo, cada bloque estático es así: testimonial-1, testimonial-2, testimonial-3 y así sucesivamente. Tengo un total de en mi sitio de desarrollo (más en el sitio en vivo, pero eso no es una consecuencia aquí).

Tengo un CMS Página con el código de tirar en el archivo name.phtml (ubicación de mi archivo phtml está aquí: app/design/frontend/[paquete]/[plantilla]/template/página/):

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

Aquí está mi código para el archivo .phtml:

<?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> 

El bucle foreach($collection as $key => $value) imprime esta:

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 

que es bueno.

Sin embargo, el único bloque que se repite es el último bloque (testimonial-5). Dado que estoy tratando de enumerar todos los bloques testimoniales, ¿cómo puedo hacer eco cada ID de bloque a la página?

Vaya tranquilo, soy un principiante en php.

Respuesta

8

No está imprimiendo el bloque dentro del bucle foreach. Solución: mover} entre paréntesis al final del código pegado

$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; 
} 

creo que en Magento Connect son algunos módulos testimonial, que están haciendo trabajo que desea. Por otro lado, si está buscando una solución 'simple' o si está tratando de jugar con Magento, ¿está bien este enfoque?

+0

¡Sabía que era un estúpido error de mi parte! ¡Gracias! – Geoff

Cuestiones relacionadas