복붙노트

Magento에서 간단한 'Hello World'모듈을 만드는 방법은 무엇입니까?

PHP

Magento에서 간단한 'Hello World'모듈을 만드는 방법은 무엇입니까?

다음을 Magento에서 어떻게 수행 할 수 있습니까?

Magento의 코드 구조에 대한 다른 정보도 매우 유용합니다.

해결법

  1. ==============================

    1.우선, PHP Architect에서 PDF / E-Book을 구입하는 것이 좋습니다. 그것은 20 달러이지만, 내가 찾을 수 있었던 유일한 방법은 "Magento가 작동하는 방식"입니다. 나는 또한 Magento 자습서를 내 웹 사이트에서 작성하기 시작했습니다.

    우선, PHP Architect에서 PDF / E-Book을 구입하는 것이 좋습니다. 그것은 20 달러이지만, 내가 찾을 수 있었던 유일한 방법은 "Magento가 작동하는 방식"입니다. 나는 또한 Magento 자습서를 내 웹 사이트에서 작성하기 시작했습니다.

    둘째, 선택의 여지가 있고 숙련 된 프로그래머가 아니거나 숙련 된 프로그래머 (PHP 및 Java 이상적)에게 액세스 권한이없는 경우 다른 카트를 선택하십시오. Magento는 잘 설계되었지만 다른 프로그래머가 모듈을 만들 수있는 장바구니 솔루션으로 설계되었습니다. 똑똑한 사람이 쉽게 이해할 수 있도록 설계되지는 않았지만 프로그래머는 아닙니다.

    셋째, Magento MVC는 요즘 PHP 개발자들에게 인기있는 Ruby on Rails, Django, CodeIgniter, CakePHP 등 MVC 모델과 매우 다릅니다. Zend 모델을 기반으로한다고 생각합니다. 전체적으로 Java OOP와 유사합니다. 걱정할 필요가있는 컨트롤러가 두 가지 있습니다. 모듈 / frontName 컨트롤러와 MVC 컨트롤러

    넷째, Magento 응용 프로그램 자체는 사용할 모듈 시스템을 사용하여 빌드되므로 핵심 코드를 파고내는 것이 유용한 학습 방법입니다. 또한 Magento로 할 일 중 많은 부분이 기존 수업을 무시합니다. 여기서 다루는 것은 무시하지 않고 새로운 기능을 만드는 것입니다. 코드 샘플을 살펴볼 때이 점을 명심하십시오.

    첫 번째 질문부터 시작하여 특정 URL에 응답하도록 컨트롤러 / 라우터를 설정하는 방법을 보여줄 것입니다. 이것은 작은 소설이 될 것입니다. 나중에 모델 / 템플리트 관련 주제에 대해 시간이있을 수도 있지만 현재로서는 그렇지 않습니다. 그러나 SQL 질문에 대해 간략하게 말하겠습니다.

    Magento는 EAV 데이터베이스 아키텍처를 사용합니다. 가능하면 시스템에서 제공하는 모델 객체를 사용하여 필요한 정보를 얻으십시오. SQL 테이블에는이 모든 것이 포함되어 있지만 원시 SQL 쿼리를 사용하여 데이터를 가져 오는 것을 생각하지 않는 것이 가장 좋습니다. 그렇지 않으면 미칠 것입니다.

    최종 면책 조항. 저는 Magento를 약 2-3 주 동안 사용 했으므로주의해야합니다. Stack Overflow를 돕는 것만큼이나 내 머리 속에서 이것을 바로 잡는 연습입니다.

    Magento에 대한 모든 추가 및 사용자 정의는 모듈을 통해 수행됩니다. 따라서 가장 먼저해야 할 일은 새로운 모듈을 만드는 것입니다. 다음과 같이 명명 된 app / modules에 XML 파일을 만듭니다.

    cd /path/to/store/app
    touch etc/modules/MyCompanyName_HelloWorld.xml
    
    <?xml version="1.0"?>
    <config>
         <modules>
            <MyCompanyName_HelloWorld>
                <active>true</active>
                <codePool>local</codePool>
            </MyCompanyName_HelloWorld>
         </modules>
    </config>
    

    MyCompanyName은 수정을위한 고유 한 네임 스페이스이므로 회사 이름 일 필요는 없지만 추천 된 규칙 인 my magento. HelloWorld는 모듈의 이름입니다.

    이제 모듈 파일이 준비되었으므로 Magento에 모듈 파일을 알리고 작업을 확인해야합니다. 관리 응용 프로그램

    자, Magento가 모듈에 대해 알고 있는지 확인합니다.

    성능 저하로 인해 업무를 수행 할 수있는 경우 개발 / 학습 중에 응용 프로그램 캐시를 꺼야 할 수 있습니다. 캐시를 삭제하는 것을 잊어 버리고 변경 사항이 표시되지 않는 이유를 궁금해하는 것은 없습니다.

    다음으로 모듈의 디렉토리 구조를 설정해야합니다. 이 디렉토리들 모두를 필요로하지는 않지만 지금은 모두 설정해도 전혀 문제가되지 않습니다.

    mkdir -p app/code/local/MyCompanyName/HelloWorld/Block
    mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers
    mkdir -p app/code/local/MyCompanyName/HelloWorld/Model
    mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper
    mkdir -p app/code/local/MyCompanyName/HelloWorld/etc
    mkdir -p app/code/local/MyCompanyName/HelloWorld/sql
    

    그리고 구성 파일을 추가하십시오.

    touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
    

    그리고 구성 파일 내부에 다음을 추가하십시오. 기본적으로 "공백"구성입니다.

    <?xml version="1.0"?>
    <config>
        <modules>
            <MyCompanyName_HelloWorld>
                <version>0.1.0</version>
            </MyCompanyName_HelloWorld>
        </modules>
    </config>
    

    지나치게 단순화하는 것,이 구성 파일은 Magento에게 당신이 원하는 코드를 알려주도록합니다.

    다음으로 모듈의 라우터를 설정해야합니다. 이렇게하면 시스템에서 URL을

    http://example.com/magento/index.php/helloworld
    

    따라서 구성 파일에 다음 섹션을 추가하십시오.

    <config>
    <!-- ... -->
        <frontend>
            <routers>
                <!-- the <helloworld> tagname appears to be arbitrary, but by
                convention is should match the frontName tag below-->
                <helloworld>
                    <use>standard</use>
                    <args>
                        <module>MyCompanyName_HelloWorld</module>
                        <frontName>helloworld</frontName>
                    </args>
                </helloworld>
            </routers>
        </frontend>
    <!-- ... -->
    </config>
    

    여기서 말하는 것은 "helloworld의 frontName이있는 URL입니다 ...

    http://example.com/magento/index.php/helloworld
    

    frontName 컨트롤러 MyCompanyName_HelloWorld "를 사용해야합니다.

    위의 helloworld 페이지를로드 할 때 위의 구성을 사용하면 404 페이지가 생성됩니다. 그것은 우리 컨트롤러 용 파일을 만들지 않았기 때문입니다. 이제하자.

    touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
    

    이제 페이지를로드 해보십시오. 진행! 404 대신 PHP / Magento 예외가 발생합니다.

    Controller file was loaded but class does not exist
    

    그래서 방금 작성한 파일을 열고 다음 코드를 붙여 넣으십시오. 클래스 이름은 라우터에서 제공 한 이름을 기반으로해야합니다.

    <?php
    class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{
        public function indexAction(){
            echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here";
        }
    }
    

    방금 설정 한 것은 module / frontName 컨트롤러입니다. 이것은 기본 제어기 및 모듈의 기본 동작입니다. 컨트롤러 또는 액션을 추가하려면 Magento URL의 트리 첫 부분이 항상 http://example.com/magento/index.php/frontName/controllerName/actionName처럼이 방식으로 변경되지 않는다는 사실을 기억해야합니다.

    따라서이 URL과 일치 시키려면

    http://example.com/magento/index.php/helloworld/foo
    

    다음과 같이 할 수있는 FooController가 있어야합니다.

    touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php
    
    <?php
    class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{
        public function indexAction(){
            echo 'Foo Index Action';
        }
    
        public function addAction(){
            echo 'Foo add Action';
        }
    
        public function deleteAction(){
            echo 'Foo delete Action';
        }
    }
    

    기본 컨트롤러 IndexController와 기본 액션 인 indexAction은 암시 적으로 처리 할 수 ​​있지만 그 뒤에 오는 것이 있으면 명시 적이어야합니다. 그래서 http://example.com/magento/index.php/helloworld/foo는 컨트롤러 FooController와 액션 indexAction과 일치 할 것이고 IndexController의 액션 fooAction이 아닙니다. fooAction을 원한다면 컨트롤러 IndexController에서 다음과 같이이 컨트롤러를 명시 적으로 호출해야합니다. http://example.com/magento/index.php/helloworld/index/foo. url의 두 번째 부분은 항상 controllerName이므로 항상 사용됩니다. 이 동작은 Magento에 번들 된 Zend Framework의 상속입니다.

    이제 다음 URL을 클릭하고 echo 문 결과를 볼 수 있습니다.

    http://example.com/magento/index.php/helloworld/foo
    http://example.com/magento/index.php/helloworld/foo/add
    http://example.com/magento/index.php/helloworld/foo/delete
    

    그래서 Magento가 컨트롤러에 어떻게 파견하는지에 대한 기본 아이디어를 얻을 수 있습니다. 여기에서 모델과 템플릿 / 레이아웃 시스템을 사용하는 방법을 확인하기 위해 기존 Magento 컨트롤러 클래스를 파킹하는 것이 좋습니다.

  2. ==============================

    2.나는 Magento와 지난 달 정도 씨름을 해왔고, 나는 아직도 그것을 알아 내려고 노력하고있다. 그래서 이것은 장님을 인도하는 경우입니다. 문서화 방법이 거의 없으며 포럼 / 위키는 혼란 스럽습니다. 뿐만 아니라 구식이거나 최적이 아닌 몇 가지 솔루션이 있습니다. 프로젝트가 있거나 알아 내려고 노력하고 있는지 확실하지 않지만 완전히 새로운 것을 만드는 것과는 달리 기존 기능을 수정하는 것이 더 쉽습니다. 이를 위해서는 위키의 "개발자를위한 추천 기사"를 꼭 읽으십시오. 새로운 지불 방법은 진짜 눈을 뜨게했습니다.

    나는 Magento와 지난 달 정도 씨름을 해왔고, 나는 아직도 그것을 알아 내려고 노력하고있다. 그래서 이것은 장님을 인도하는 경우입니다. 문서화 방법이 거의 없으며 포럼 / 위키는 혼란 스럽습니다. 뿐만 아니라 구식이거나 최적이 아닌 몇 가지 솔루션이 있습니다. 프로젝트가 있거나 알아 내려고 노력하고 있는지 확실하지 않지만 완전히 새로운 것을 만드는 것과는 달리 기존 기능을 수정하는 것이 더 쉽습니다. 이를 위해서는 위키의 "개발자를위한 추천 기사"를 꼭 읽으십시오. 새로운 지불 방법은 진짜 눈을 뜨게했습니다.

    디버깅을 위해 FirePHP를 사용하고 뭔가 잘못되었을 때 HTML 소스를 살펴 보는 것이 좋습니다. ole echo 디버그 방법은 실제로 잘 작동하지 않습니다.

    일반 아키텍처는 너무 복잡하여, 완전히 이해했다고해도 그것을 덮을 책을 써야합니다. 내가 할 수있는 최선의 방법은 내가 처음 시작했을 때 누군가가 내게 주었으면하는 조언을하는 것입니다 ...

    코어 파일에서 벗어나십시오. 모듈을 수정하지 말고 직접 모듈을 작성하고 필요한 것을 무시하십시오.

    Magento는 XML로 구성된 구성 파일을 사용하여 필요한 작업을 결정합니다. 핵심 기능과 달리 자신의 물건을 실행하려면 올바른 XML이 필요합니다. 불행히도 XML을 만드는 방법에 대한 지침은 없습니다. 당신은 예제를보고 심각한 테스트를해야합니다. 사물을 복잡하게 만들려면이 파일의 내용이 대소 문자를 구분해야합니다. 그러나 이것을 마스터하면 매우 강력한 시스템을 만드는 기본 기능의 일부를 무효화 할 수 있습니다.

    Magento는 Mage :: getModel ( 'mymodel'), Mage :: getSingleton ( 'mysingleton'), Mage :: helper ( 'myhelper')와 같은 메소드를 사용하여 특정 클래스의 객체를 반환합니다. 기본적으로 핵심 네임 스페이스에서 이러한 항목을 찾습니다. 자체적으로 사용하고 싶다면 config.xml 파일에서이를 오버라이드해야합니다.

    클래스 이름은 해당 폴더와 일치해야합니다.

    Magento의 많은 객체는 궁극적으로 Varien_Object라는 객체를 확장합니다. 이것은 일반적인 목적의 클래스 (스위스 군용 칼과 같은 종류)이며, 인생에서의 목적은 여러분이 직접 자신의 방법 / 변수를 정의 할 수있게하는 것입니다. 예를 들어, 한 메서드에서 다른 메서드로 데이터를 전달하는 영광스러운 배열로 사용 된 것을 볼 수 있습니다.

    개발 중에 캐싱이 비활성화되어 있는지 확인하십시오. 그것은 마젠 토를 격렬하게 느리게 만들지 만, 그것은 당신에게 머리 외상을 (책상에 두드리는 것에서) 많이 줄 것입니다.

    $ this가 많이 사용되는 것을 볼 수 있습니다. 어떤 파일을 보느냐에 따라 다른 클래스를 의미합니다. get_class ($ this)는 특히 FirePHP와 함께 당신의 친구입니다.

    종이에 물건을 담으십시오. 많이. 당신이 그들을 만난 후 1-2 일이 필요할 것입니다.

    Magento는 OO를 좋아합니다. 방법을 추적하면 5-10 개의 다른 클래스를 통해 이동하면 놀라지 마십시오.

    여기에서 디자이너 가이드를 읽으십시오. 주로 그래픽 디자이너를위한 것이지만, 모듈의 출력이 어디에서 왜 출력되는지 이해하는 것이 필요합니다. 이를 위해서는 관리자 패널의 개발자 섹션에서 "템플릿 경로 힌트"를 켜는 것을 잊지 마십시오.

    더 많은 것이 있습니다, 그러나 이것이 논문으로 변하기 전에 여기서 멈출 것입니다.

  3. ==============================

    3.오히려 Mage2Gen을 권장 할 것입니다. 이것은 상용구 생성에 도움이되며 핵심 비즈니스 로직에만 집중할 수 있습니다. 그냥 속도를 높이는 데 도움이됩니다.

    오히려 Mage2Gen을 권장 할 것입니다. 이것은 상용구 생성에 도움이되며 핵심 비즈니스 로직에만 집중할 수 있습니다. 그냥 속도를 높이는 데 도움이됩니다.

  4. from https://stackoverflow.com/questions/576908/how-do-i-create-a-simple-hello-world-module-in-magento by cc-by-sa and MIT license