2012-02-10 9 views
10

Descrizione rapida: sto cercando di restituire i risultati da uno specifico insieme di blocchi statici in un file phtml (che viene quindi richiamato da una pagina cms) in Magento.Magento - Come si fa a restituire risultati di un numero illimitato di blocchi CMS statici (con alcune "Identifier") ad un CMS pagina

Nota: Ho cercato su google e alcune risposte mi hanno avvicinato agli altri ma nulla di quello che ho provato sembra funzionare al 100%?

Dettagli:

ho già una serie di blocchi statici specifici che tutti iniziano con un identificatore di testimonial-. Ad esempio, ogni blocco statico è simile al seguente: testimonial-1, testimonial-2, testimonial-3 e così via. Ho un totale di sul mio sito di sviluppo (più sul sito dal vivo, ma qui non c'è alcuna conseguenza).

Ho un CMS pagina con il codice di tirare nel file name.phtml (posizione del mio file phtml è qui: app/design/frontend/[pacchetto]/[modello]/template/page/):

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

Ecco il mio codice per il file .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> 

Il ciclo foreach($collection as $key => $value) stampe fuori questo:

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 

che è buono.

Tuttavia, l'unico blocco che viene emesso è l'ultimo blocco (testimonial-5). Dato che sto cercando di elencare tutti i blocchi di testimonianze,, come posso echeggiare ogni id di blocco nella pagina?

Vacci piano, sono un principiante di php.

risposta

8

Non si stampa il blocco all'interno del ciclo foreach. Soluzione: spostare} parentesi alla fine del codice incollato

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

penso che su Magento Connect sono alcuni Testimonianza moduli, che stanno facendo lavoro che si desidera. D'altra parte, se stai cercando una soluzione 'semplice' o se stai provando a giocare con Magento, questo approccio è ok.

+0

Sapevo che era uno stupido errore da parte mia! Grazie! – Geoff

Problemi correlati