1

텍스트 필드에 비디오 ID를 추가하여 YouTube 비디오를 표시하려면 Magento 저장소에 사용자 지정 특성을 만들었습니다.제품 및 CMS 페이지에 YouTube 비디오 추가 Magento

내가 catalog/product/view 폴더에 video.phtml에이 코드를 배치 한

<p> 
<?php $attStuff= $_product->getData(); ?> 
<?php if(!empty($attStuff['videoid'])): ?> 
<iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $attStuff['videoid']; ?>" frameborder="0" allowfullscreen></iframe> 
<?php endif; ?> 
</p> 

내가 지금 CMS 페이지의 오른쪽 사이드에 동영상이 표시를 원하는 및 video.phtml을 참조하는 레이아웃 업데이트를 추가했습니다 :

<reference name="right"> 
<block type="core/template" name="catalog.product.video" template="catalog/product/view/video.phtml" /> 
    </reference> 

이제 다음과 같은 오류 얻을 :

Fatal error: Call to a member function getData() on a non-object in /Applications/MAMP/htdocs/mysite/app/design/frontend/bootstrapped/default/template/catalog/product/view/video.phtml on line 13

그리고 문제를 진단 할 수 없습니다!

여기에 어떤 문제가 있을지 알고 싶습니까?

답변

1

아주 가까이 있습니다. 블록 유형을 core/template으로 설정하는 대신 현재 제품을 검사 할 수있는 클래스를 사용해야합니다. catalog/product_abstract 블록에는 이러한 기능이 있습니다. 레이아웃 파일에 대해이 작업을 수행 :

<reference name="right"> 
    <block type="catalog/product_view" name="catalog.product.video" template="catalog/product/view/video.phtml" /> 
</reference> 

를 그런 다음, 비디오 파일 :

<p> 
    <?php $_product = $this->getProduct(); ?> 
    <?php if($_product->getVideoid()): ?> 
    <iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $_product->getVideoid(); ?>" frameborder="0" allowfullscreen></iframe> 
    <?php endif; ?> 
</p> 

편집 :

당신이 CMS 페이지에 그것을 사용하는 경우, 즉이된다 조금 더 도전적이다. 비디오를 가져올 제품을 결정해야합니다. 이 작업에는 여러 가지 방법이 있습니다. 당신은 CMS 페이지 레이아웃 업데이트를 사용하는 경우, 당신이 뭔가를 할 수 있습니다 :

<reference name="right"> 
    <block type="catalog/product_view" name="catalog.product.video" template="catalog/product/view/video.phtml"> 
     <action method="setProductSku"><sku>sku-here</sku></action> 
    </block> 
</reference> 

와 다음, 비디오 파일 : 나는이 방법을 제안하고

<?php $_product = Mage::getModel('catalog/product')->load($this->getProductSku(), 'sku'); ?> 
<?php if ($_product->getId() && $_product->getVideoid()): ?> 
<p> 
    <iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $_product->getVideoid(); ?>" frameborder="0" allowfullscreen></iframe> 
</p> 
<?php endif;?> 

를, 그것은 아무튼 때문에 마치 자신 만의 모듈을 만드는 것에 익숙한 것처럼 들립니다. 나는 당신이 여기서 보여주고있는 것이 베스트 프랙티스가 아니라, 블록 템플릿 파일에서 모델 로딩을로드하는 것을 권장하기 때문에, 그것을보기를 강력히 추천한다. 자체 블록 클래스로 이동해야합니다 (Mage_Catalog_Block_Product_Abstract을 확장하고 getProduct() 메서드를 재정의 할 수 있음).


편집 # 2 : 제품 ID를 사용할 수 있습니다

.

<?php $_product = Mage::getModel('catalog/product')->load($this->getProductId()); ?> 
+0

감사합니다! 변경 사항을 적용했지만 Magento가 마음에 들지 않았습니다. '치명적 오류 : /Applications/MAMP/htdocs/mysite/app/code/local/Mage/Core/Model/Layout.php 491 행의 Mage_Catalog_Block_Product_Abstract 클래스를 인스턴스화 할 수 없습니다.' – user1704524

+0

죄송합니다. . 나의 나쁜 - 나는 사과한다. 블록 참조를'catalog/product_view'로 변경했습니다. 문제가 해결되면 답변을 수락하는 것을 잊지 마십시오. –

+0

이것은 실제로 오류없이 제품보기 페이지에서 작동하지만 CMS 페이지에 문제가 있습니다. 변경된 후에도 여전히 오류가 발생합니다 : '치명적인 오류 :/Applications/MAMP/htdocs/mysite/app/code/local/Mage/Catalog/Block/Product의 비 객체에서 getMetaTitle() 멤버 함수를 호출하십시오. /View.php on line 56' – user1704524

0

당신은 비디오 템플릿을 생성하고 제품 "XML 레이아웃 업데이트"를 사용해야합니다 : 레이아웃 XML에서이 줄을 사용하여 템플릿 코드에서

<block type="core/template" name="catalog.product.video" template="catalog/product/view/video.phtml"> 
    <action method="setProductId"><id>id-here</id></action> 
</block> 

을 변경합니다.

만들기 : app/design/frontend/yourpackage/yourtheme/template/catalog/product/video.phtml

<div class="block block-video"> 
    <div class="block-title"> 
     <strong><span><?php echo $this->__('Product Video') ?></span></strong><br> </div><br> <div class="block-content"> 
     <object width="193" height="130"><param name="movie" value="http://www.youtube.com/v/<?php echo $this->__($this->getLinkUrl()) ?>?hl=en_US&amp;version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/<?php echo $this->__($this->getLinkUrl()) ?>?hl=en_US&amp;version=3" type="application/x-shockwave-flash" width="193" height="130" allowscriptaccess="always" allowfullscreen="true"></embed></object> 
    </div> 
</div> 

지금 편집 제품 페이지 디자인 탭에서 제품 XML 레이아웃 업데이트에 다음 코드를 삽입합니다 응답에 대한

<reference name="right"> 
    <block type="core/template" name="video" before="-" template="catalog/product/video.phtml"> 
     <action method="setLinkUrl"><url>U0CGsw6h60k</url></action> 
    </block> 
</reference> 
관련 문제