2010-11-25 3 views
0

관리 섹션에 모듈을 만드는 방법에 대한 자습서를 진행했습니다. 나는 magento 모듈과 twitter API를 사용하여 실험하고 있습니다. 여기에 내가 가진 튜토리얼 http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-magento/Magento : 관리 모듈에서 템플릿 파일로드

는 지금까지 그렇게처럼 내 AdminController의 indexAction에 호출 내가 관리 모듈 메뉴가 두 페이지로 :

<?php 
class Optimise_Twits_AdminController extends Mage_Adminhtml_Controller_Action 
{ 
    public function indexAction() 
    { 
    $this->loadLayout(); 
    $this->getLayout()->getBlock('content')->append($this->getLayout()-> 
     createBlock('twits/helloWorld')); 
    $this->renderLayout(); 
    } 
} 

그래서이 블록/HelloWorld.php 블록을 표시합니다 : '을 HelloWorld'

<?php 
class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template 
{ 
    protected function _toHtml() 
    { 
    return 'Hello world'; 
    } 
} 
?> 

은 모두 잘 작동이 나는 메뉴 항목 내 관리 메뉴 클릭으로 이동할 수 있습니다 난을 참조하십시오. 내가 원하는 것은 클래스를 통해 텍스트를 표시하는 대신 여기에 템플릿 파일을로드하는 것입니다.

나는 모든 제품을 조회하고 표시하는 양식을 표시하고 있습니다. 그런 다음 제품을 선택하고 태그를 쓸 수 있습니다. 양식의 제출 버튼을 클릭하면 데이터가 형식화되고 상태 업데이트로 지저귀 고 소리가납니다.

내가 잘못 생각하고 있습니까? (필자는 여기에 템플릿을 사용하지 않아야합니까?) 그렇지 않으면 누군가 내 템플릿을 넣을 위치와 호출 방법을 도와 줄 수 있습니다.

<div class="simple_contact"> 
    <h1 class="cms">'Tweet up' Your Products</h1> 
    <form id="twitter-feed" name="twitter-feed" action="[action_here]" 
    method="post"> 
    <table><tr> 
    <?php 
    $model = Mage::getModel("optimise_twits/products"); 
    $products = $model->getProducts(); 
    $i = 0; 
    foreach ($products as $product) 
    { 
    // var_dump($product); 
    echo '<tr>'; 
    echo '<td>'; 
    echo '<label for="'. $product .'">' . $product . '</label>'; 
    echo '<input type="hidden" name="tweet['.$i.'][product]" value="'. 
     $product .'">'; 
    echo '<br />'; 
    echo '<input type="text" class="hashtag" name="'. 
     'tweet['.$i.'][tags]" id="tags" value="#enter, #product, #hastag"'; 
    echo '</td>'; 
    echo '<td>'; 
    echo '<input type="checkbox" name="tweet['.$i.'][chk]" id="'. 
     $product .'"></td>'; 
    echo '</tr>'; 
    $i++; 
    } 
?> 
<tr> 
    <td colspan="2"><input type="submit" name="submit" value="tweet"></td> 
</tr> 
</table> 
</form> 
</div> 

고마워 :

이 내 PHTML 파일이 희망 어떻게 보일까입니다!

존시는

답변

2

당신은 setTemplate() 메소드의 호출하여 블록 템플릿을 설정할 수 있습니다. 그러나하지 마라.

내림차순 Mage_Adminhtml_Block_Widget_Grid을 사용하면 테이블이 만들어 지므로 컬렉션 클래스를 제공하고 일부 열을 설명하면됩니다. 하지만 그렇게하지 마십시오.

대신 module creator을 사용하십시오. 그것은 당신을 위해 필요한 그리드 위젯 (및 컨테이너)을 만들고 작업 시간/일을 절약 할 것입니다. 최소한 당신이 충분히 자신을 제대로 수행 할 수있을 때까지.

+0

이렇게하면 템플릿 파일과 필요한 모든 파일을 만들 수 있습니다. 머리를 숙이고 그들을 수정하는 것입니다? magento에 글을 쓰지 않을 것이므로 새 항목을 만드는 등의 그리드가 필요 없습니다. – iamjonesy

+0

특히 Magento에서 그리드 위젯을 상속 받고 "Add New"와 같은 표준 버튼이이 부분에 포함됩니다. 너는 그것을 시도함으로써 아무것도 잃지 않는다. – clockworkgeek

2

예,이 작업을 올바르게 수행하고 있습니다. Magento는 폼 위젯을 자동으로 생성하기위한 클래스 계층 구조를 가지고 있지만, OO UI 구성 요소가 모든 바운드 바인딩과 동일한 "문제"를 겪고 있습니다. 응용 프로그램의 다른 곳에서 수행 된 작업을 정확하게 수행하려는 경우 좋을 것입니다. 기능을 많이 사용자 정의하고 싶거나 필요로하는 경우 시간이 많이 걸립니다. 작동 원리를 배우는 것은 가치가 있지만 더 간단한 PHP MVC 시스템처럼 Magento를 사용할 수있는 이유는 없습니다.

Magento의 모든 시스템이 어떻게 작동하는지 배우는 것은 가치가 있지만 처음부터 시작했을 때보 다 혼란 스러울 수 있습니다.

특정 질문으로 이동하면 Mage_Core_Block_Template에서 상속받은 모든 블록에 "setTemplate"메서드가 있습니다. 이 방법을 사용하면 Magento에게 블록에서 사용할 phtml 템플리트를 알리는 데 사용됩니다. 그래서, 당신은 또한 알 수 있습니다

class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template 
{ 
    protected function __construct() 
    { 
     $this->setTemplate('path/to/my/template.phtml'); 
    } 
} 

처럼 블록의 생성자에서, 뭔가 우리는 _toHtml 방법을 제거했습니다. 기본 클래스의 _toHtml (Mage_Core_Block_Template)은 템플릿을로드합니다. 따라서 블록을 덮어 쓰면 블록이 더 이상 템플릿을로드하고 렌더링하지 않습니다.

테마의 기본 템플릿 폴더를 포함하여 템플릿 경로가 시작됩니다. 당신은 현대적인 테마

/app/design/frontend/default/modern/template 

을 사용하고 경우에 따라서, 당신이 약간 단순화된다, 그러나 다시, 너무 테마 경로가 힘의 작동 방식에 휩쓸 리게지고 (

/app/design/frontend/default/modern/template/path/to/my/template.phtml 

에서 템플릿을 넣어 것 "진실"에 대해서는 Mage_Core_Block_Abstract::renderView에서 추적 시작)

시작하기에 충분해야합니다. 다른 문제에 직면하면 여기에 다른 구체적인 질문을하고 누군가가 도움을 줄 수 있어야합니다. Knowledge Base을 통해 자신의 방식대로 작업하면 더 많은 것을 배울 수있는 훌륭한 방법입니다. go beyond the knowledge base (면책 조항 : 나는 둘 다의 저자입니다.)