2012-01-18 16 views
17

Voglio conoscere le differenze tra queste due funzioni. Capisco il comportamento di getChildHtml(). Restituisce l'html del blocco o tutti i blocchi se non si passa alcun parametro. E posso vederedifferenza tra getChildHtml() e getChildChildHtml() in Magento

getChildHtml($name, $useCache, $sorted) 
getChildChildHtml($name, $childName,$useCache, $sorted) 

a prima vista ho un param $ useCache che ho dovuto inviarci è quello di utilizzare la cache.

risposta

41

Diciamo che siete in file di modello phtml del blocco principale, e si dispone di una struttura a blocchi semplificato che assomiglia a questo

root 
    left 
     promo_top 
     navigation 
     promo_bottom 
    center 
    right 

Da file modello del blocco principale, per stampare il blocco di sinistra aveva utilizzare getChildHtml.

echo $this->getChildHtml('left'); 

Tuttavia, se per qualche motivo si voleva stampare il blocco promo_top nel modello di radice, che avrebbe dovuto fare qualcosa di simile

$left = $this->getChildBlock('left') 
echo $left->getChildHtml('promo_top') 

Il metodo getChildChildHtml permette di fare questo genere di cose in una semplice chiamata di metodo. Anche in questo caso, dal modello di radice

echo $this->getChildChildHtml('left','promo_top'); 

Così, la semantica sono

  1. Get My Bambino blocco con il nome X
  2. Poi, ottenere è blocco bambino con la Y
  3. Render l'HTML

Se si guarda il codice sorgente si può vedere che, u ltimately, questo metodo solo avvolge una chiamata a getChildHtml

#File: app/code/core/Mage/Core/Block/Abstract.php 
public function getChildChildHtml($name, $childName = '', $useCache = true, $sorted = false) 
{ 
    if (empty($name)) { 
     return ''; 
    } 
    $child = $this->getChild($name); 
    if (!$child) { 
     return ''; 
    } 
    return $child->getChildHtml($childName, $useCache, $sorted); 
} 
+2

molto utile per me, grazie Alan – davidselo

+1

impressionante spiegazione. Grazie Alan. – RIK