2016-02-02 4 views
1

Я создаю пользовательский блок внутри страницы продукта view.phtml. Блок успешно создан, потому что я вижу блок, когда включаю подсказку пути. Сначала я был просто используя некоторые простой контент HTML для шаблона то, как показано ниже:magento phtml content не отображается на странице продукта view.phtml

<div> 
this is the new block 
</div> 

Но если изменить шаблон PHTML контента, он возвращает сообщение, которое я называю функцию не-объект. как показано ниже:

ОБРАЗЕЦ

<?php $_helper = $this->helper('catalog/output'); ?> 
<?php $_product = $this->getProduct(); ?> 
<?php $productName = $_helper->productAttribute($_product, $_product->getName(), 'name'); ?> 
<?php $productUrl = $_helper->productAttribute($_product, $_product->getProductUrl(), 'product_url'); ?> 
<?php $productImage = $_product->getImageUrl() ?> 

<div class="socialShare clearfix"> 
    <ul> 
     <li><a class="fa fa-facebook" href="javascript:popWin('https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode($productUrl); ?>&t=<?php echo urlencode($productName); ?>', 'facebook', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="<?php echo $this->__('Share it') ?>"></a></li> 
    </ul> 
</div> 

ОШИБКА СООБЩЕНИЕ

Fatal error: Call to a member function getName() on a non-object in /home/onebig/public_html/app/design/frontend/ma_hitstore/default/template/catalog/product/view/socialShare.phtml on line 3

catalog.xml У меня есть следующие коды

<catalog_product_view translate="label"> 
    <reference name="content"> 
     <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml"> 
      <block type="core/template" name="product.info.socialShare" template="catalog/product/view/socialShare.phtml"/> 
    </reference> 
</catalog_product_view> 

view.phtml вызова блок

<?php echo $this->getChildHtml('product.info.socialShare'); ?> 

Я тестировал Если я вставить содержимое шаблона непосредственно в view.phtml, и она работает. Я предполагаю, что если я создаю настраиваемый блок, мне нужно переопределить все тезисы переменной php $productName, $productUrl, $productImage где-нибудь? Извините, я новичок в этом. Ваши знания очень ценятся.

ответ

1

Эта проблема заключается в том, что ваш дочерний блок имеет тип core/template. Когда вы вызываете getProduct на основной шаблон, он просто возвращает null.

Если вы обновите его до catalog/product_view, тогда $this->getProduct() вернет товар.


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

$_product = Mage::registry('current_product'); 
+0

@DylanDaicySiao Я сожалею, я не понимаю вопрос. '$ this-> getProduct()' не должен возвращать блок. Он должен вернуть модель продукта. –

+0

спасибо. Я смог сделать это с помощью type = "catalog/product_view" –

+0

жаль, что я действительно новичок в этом, но я узнал от вас! Я также попробовал выборку из реестра, он тоже работает. –

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