2013-09-22 2 views
3

Я пробовал различные учебные пособия, но я не могу заставить это работать.Magento: Использование различных нижних колонтитулов для разных макетов страниц

В принципе, я хочу иметь другой нижний колонтитул на моей домашней странице. Я настроил два макета страницы и отлично применил их к страницам cms.

Так в макете Стартовой я имею в ...

<?php echo $this->getChildHtml('footer_home') ?> 

А на всех остальных страницах этого ...

<?php echo $this->getChildHtml('footer_alt') ?> 

Довольно просто! Тогда в странице XML я внесены изменения в части, которая относится к сноске следующим образом ...

  <block type="page/html_footer" name="footer_alt" as="footer_alt" template="page/html/footer_alt.phtml"> 
      <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label"> 
       <label>Page Footer</label> 
       <action method="setElementClass"><value>bottom-container</value></action> 
      </block> 
      <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/> 
      <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/> 
     </block> 


      <block type="page/html_footer" name="footer_home" as="footer_home" template="page/html/footer_home.phtml"> 
      <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label"> 
       <label>Page Footer2</label> 
       <action method="setElementClass"><value>bottom-container</value></action> 
      </block> 
      <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/> 
      <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/> 
     </block> 

Я думаю, что это где проблема. С вышеприведенными страницами показан нижний колонтитул footer_alt, и я не уверен, почему.

Я могу подтвердить, что «страница/html/footer_alt.phtml» и «page/html/footer_home.phtml» настроены нормально.

Надеюсь, это имеет смысл. Благодарю.

+0

Вы пробовали обернуть вызов рендеринга getChildHtml в каком-то особом уникальном символе? Как '### getChildHtml ('footer_home')?> ###'? Основываясь на приведенной выше информации, кажется маловероятным, что вызов render 'footer_html' будет отображать' footer_alt' - вы можете редактировать неправильные файлы. –

+0

Файлы, которые я редактирую, это основной файл шаблона макета, файл page.xml и последующие footer_alt.phtml и footer_home.phtml. – user2689138

ответ

3

Причина, по которой вы должны решить проблему, - это кэш-память пурпурного цвета. Как заголовок колонтитул кэшируется использованием по умолчанию и ключа кэша не включает tempalte

проверить его проблема кэша попробовать это первым:

Проверьте, если кэш блока включен. Затем перейдите на свою страницу. Нижний колонтитул на первой странице должен быть представлен ниже. Итак, если ваш первый просмотр страницы - это ваш нижний колонтитул, это будет на любой другой странице и наоборот.

, если проблема заключается в кэш, вы должны быть в состоянии решить эту путем перезаписи «Mage_Page_Block_Html_Footer» и изменить getCacheKeyInfo(), чтобы включить шаблон как этот

public function getCacheKeyInfo() 
{ 
    return array(
     'PAGE_FOOTER', 
     Mage::app()->getStore()->getId(), 
     (int)Mage::app()->getStore()->isCurrentlySecure(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template'), 
     Mage::getSingleton('customer/session')->isLoggedIn(), 
     $this->getTemplate() 
    ); 
} 

это должно решить вашу проблему

+0

Как узнать, включено ли кэширование блоков? Где я могу найти файл Mage_Page_Block_Html_Footer? Благодарю. – user2689138

+0

вы можете проверить, включен ли кеш-блок, перейдя к вашему файловому серверу magento и проверьте его unter System-> Cache Management, вы должны найти строку с именем «Блокировать вывод HTML», если активна кеш-память блока. Класс «Mage_Page_Block_Html_Footer» можно найти по адресу: «app/code/core/Mage \ Page/Block/Html/Footer.php» –

0
  1. Создайте 2 статических блока с именем «home_page_footer» и «inner_page_footer».
  2. Откройте footer.phtml и поместите следующий код.

    <?php $home = Mage::getSingleton('cms/page')->getIdentifier(); ?> 
    <?php if ($home):?>  
    <div style="clear:both;"> 
        <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('home_page_footer')->toHtml(); ?> 
    </div> 
    <?php else: ?>  
    <div style="clear:both;"> 
        <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('inner_page_footer')->toHtml(); ?> 
    </div> 
    <?php endif; ?>  
    

Надеется, что это поможет.

+0

Хотя это похоже на простейшее решение, я не могу заставить его работать. На всех страницах отображается home_page_footer. Я очистил кеш и индекс. – user2689138

+0

Пожалуйста, повторите проверку, Magento Версия: 1.7.0.2. Он работает идеально для меня. – Noor

+0

DO Мне нужно изменить это? Что должно быть cms/page для моей домашней страницы? Ключ URL? getIdentifier(); ?> – user2689138

5

Все эти ответы способ слишком сложный для решения. Переписывание является излишним. Перезапись ядра Magento, даже если все сделано правильно, должно всегда отключить сигналы тревоги и немедленно заставить этого разработчика тщательно прочитать источник Magento. По моему опыту, каждая сердечная боль Magento сопровождается загадочным, но полностью удовлетворительным решением. Это одна из тех страданий с удовлетворительным решением.

Неудивительно, что Magento произвольно решил обеспечить, чтобы нижние колонтитулы не генерировали уникальный ключ кеша. Это означает, что нижний колонтитул не может быть разным в зависимости от раздела загруженного сайта; чтобы быть ясным, на самом деле это возможно, но только, если кеш блока отключен. Кэш блока никогда не должен быть отключен, хотя, в конечном счете, это равносильно ограничению одного нижнего колонтитула по всему сайту.

Существуют законные варианты использования для разного нижнего колонтитула в разных частях сайта. Например, в кассе: проверка должна быть захватывающей и свободной от отвлечения. Однако, как только пострадает любая страница на сайте, нижний колонтитул с этих страниц будет кэшироваться, а затем в кассе будет отображаться тот же нижний колонтитул.

Решения, описанные здесь, требуют либо перезаписи ядра, что это нехорошо, либо какой-либо другой условной проверки, которая не будет разумно масштабироваться за пределы нескольких условий.

Мое решение просто: добавьте кэшKey к новому шаблону. Задайте дескриптор компоновки для данной страницы, укажите нижний колонтитул, задайте шаблон и затем добавьте cacheKey. Это стандартная версия Magento layout XML. Этот макет XML меняет нижний колонтитул на одной странице проверки - и только на одной странице проверки. Кроме того, кеширование будет продолжать работать для каждого уникального нижнего колонтитула, определенного таким образом.

<checkout_onepage_index> 
     <reference name="footer"> 
      <action method="setTemplate"> 
       <template>linusmoneymaker/page/html/checkout-footer.phtml</template> 
      </action> 
      <action method="setCacheKey"> 
       <key>your-own-unique-cache-key-for-linus-moneymaker</key> 
      </action> 
     </reference> 
    </checkout_onepage_index> 

Это работает по следующей причине. Вот источник app/code/core/Mage/Core/Block/Abstract.php, который обрабатывает все кэширование блоков:

/** 
* Get Key for caching block content 
* 
* @return string 
*/ 
public function getCacheKey() 
{ 
    if ($this->hasData('cache_key')) { 
     return $this->getData('cache_key'); 
    } 
    /** 
    * don't prevent recalculation by saving generated cache key 
    * because of ability to render single block instance with different data 
    */ 
    $key = $this->getCacheKeyInfo(); 
    //ksort($key); // ignore order 
    $key = array_values($key); // ignore array keys 
    $key = implode('|', $key); 
    $key = sha1($key); 
    return $key; 
} 

Обратите внимание, что если cacheKey определено, что один будет иметь приоритет над той, которая будет генерироваться из метода getCacheKeyInfo в app/code/core/Mage/Page/Block/Html/Footer.php, который делает не создает уникальный шаблон для каждого шаблона cacheKey. Предоставляя cacheKey из XML-макета, Magento эффективно отказывается от невыполненного невыполненного нижнего колонтитула cacheKey в пользу того, который предоставляется вручную через XML-формат для данной части сайта.

Не только это правильно, но и бесконечно. Каждая страница сайта могла бы реально определить свой нижний колонтитул.

Смежные вопросы