문제

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

  • 컨트롤러/보기/모델 접근법을 사용하여 "hello world"메시지를 표시합니다. 그래서 내가 갔다면 http://example.com/myController 문자열 'Hello World'를 보여줄 것입니다. 내 웹 사이트의 템플릿 내에이 문자열을 보여줄 수 있으면 (예 : 헤더, 바닥 글 등) 보너스가됩니다.

  • 모델과 상호 작용하고 쿼리를 수행하는이 컨트롤러 (또는 필요한 경우 새 컨트롤러)에 메소드를 추가하는 방법 Select * FROM articles where id='10' 행을 반환합니다 (열이 포함되어 있습니다 id, title, content) 컨트롤러에? 그런 다음 컨트롤러를 사용 하여이 행이 표시되는 뷰를 포함하십시오. 그래서 간다 http://example.com/myController/show_row (또는 비슷한 것)는보기 내에서 행을 표시합니다. (화려할 필요가 없습니다 echo $row->id; 또는 비슷한 것이 효과가있을 것입니다.)

Magento의 코드 구조에 대한 다른 정보도 매우 도움이 될 것입니다.

도움이 되었습니까?

해결책

무엇보다도, 나는 당신이 PHP Architect의 PDF/e- 책. US $ 20이지만 내가 찾을 수있는 "Magento가 어떻게 작동하는지 여기 있습니다"자원입니다. 나도 글을 쓰기 시작했습니다 내 웹 사이트의 Magento 튜토리얼.

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

셋째, Magento MVC는 매우 다릅니다 루비 on 레일, 장고, Codeigniter, 케이크, 요즘 PHP 개발자에게 인기있는 MVC 모델. 나는 그것이 기반이라고 생각합니다 젠드 모델, 그리고 모든 것은 매우 자바 OOP와 비슷합니다. 거기 있습니다 걱정해야 할 컨트롤러. 모듈/프론트 이름 컨트롤러 및 MVC 컨트롤러.

넷째, Magento 응용 프로그램 자체는 사용하는 것과 동일한 모듈 시스템을 사용하여 구축되므로 핵심 코드를 중심으로하는 것은 유용한 학습 전술입니다. 또한 Magento와 함께 할 많은 일은 우선 기존 수업. 내가 여기서 다루는 것은 창조 새로운 기능, 재정의하지 않습니다. 코드 샘플을 볼 때 이것을 명심하십시오.

첫 번째 질문부터 시작하여 특정 URL에 응답하기 위해 컨트롤러/라우터를 설정하는 방법을 보여 드리겠습니다. 이것은 작은 소설이 될 것입니다. 나중에 모델/템플릿 관련 주제에 대한 시간이 있을지 모르지만 지금은 그렇지 않습니다. 그러나 나는 당신의 SQL 질문에 대해 간단히 이야기 할 것입니다.

마젠토는 an을 사용합니다 EAV 데이터베이스 아키텍처. 가능할 때마다 시스템이 제공하는 모델 객체를 사용하여 필요한 정보를 얻으십시오. 나는 그것이 SQL 테이블에 모두 있다는 것을 알고 있지만, 원시 SQL 쿼리를 사용하여 데이터를 잡는 것을 생각하지 않는 것이 가장 좋습니다. 그렇지 않으면 화를 낼 것입니다.

최종 면책 조항. 나는 약 2-3 주 동안 Magento를 사용해 왔습니다. 이것은 오버플로를 쌓는 데 도움이되는 것만 큼 내 머리에 이것을 똑바로 옮기는 운동입니다.

모듈을 만듭니다

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

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은 수정을위한 고유 한 네임 스페이스이며 회사의 이름 일 필요는 없지만 권장 컨벤션 내 Magento입니다. HelloWorld 모듈의 이름입니다.

응용 프로그램 캐시를 지우십시오

이제 모듈 파일이 제자리에 있으므로 Magento에게 이에 대해 알리고 작업을 확인해야합니다. 관리자 응용 프로그램에서

  1. 시스템-> 캐시 관리로 이동하십시오
  2. 모든 캐시 메뉴에서 새로 고침을 선택하십시오
  3. 캐시 설정 저장을 클릭합니다

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

  1. 시스템-> 구성으로 이동하십시오
  2. 고급 클릭
  3. "모듈 출력 비활성화"설정 상자에서 "mycompanyname_helloworld"라는 새 모듈을 찾으십시오.

성능 속도 저하로 살 수 있다면 개발/학습 중에 응용 프로그램 캐시를 끄는 것이 좋습니다. 캐시를 지우는 것을 잊어 버리고 변경이 왜 나타나지 않는지 궁금해하는 것은 더 실망스러운 것은 없습니다.

디렉토리 구조를 설정하십시오

다음으로 모듈의 디렉토리 구조를 설정해야합니다. 이 모든 디렉토리가 필요하지는 않지만 지금이 디렉토리를 모두 설정하는 데 해를 끼치 지 않습니다.

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를 실행하려는 코드를 알려줍니다.

라우터 설정

다음으로 모듈의 라우터를 설정해야합니다. 이것은 시스템에 우리가

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의 프론트 이름을 가진 모든 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";
    }
}

방금 설정 한 것은 모듈/프론트 이름 컨트롤러입니다. 이것은 기본 컨트롤러 및 모듈의 기본 동작입니다. 컨트롤러 나 동작을 추가하려면 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 및 기본 조치 색인 ActionAction은 암시 적으로 할 수 있지만 무언가를 따르는 경우 명시 적이어야합니다. 그래서 http://example.com/magento/index.php/helloworld/foo 컨트롤러 FOOCONTROLLER 및 ACTION INDEXACTION과 INDEXCONTROLLER의 조치 요소가 아닌 작업 색인 Action과 일치합니다. 컨트롤러 indexcontroller에서 fooction을 원한다면이 컨트롤러를 이러한 방식으로 명시 적으로 호출해야합니다.http://example.com/magento/index.php/helloworld/index/foo URL의 두 번째 부분은 항상 컨트롤 이름이기 때문입니다. 이 동작은 Magento에서 번들 된 Zend 프레임 워크의 상속입니다.

이제 다음 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 컨트롤러 클래스에서 Poking을 추천하여 모델과 템플릿/레이아웃 시스템을 사용하는 방법을 확인했습니다.

다른 팁

나는 지난 달 정도 마젠토와 씨름 해 왔으며 여전히 그것을 알아 내려고 노력하고 있습니다. 그래서 이것은 맹인을 이끌고있는 맹인의 경우입니다. 문서화 방법은 거의 없으며 포럼/위키는 최대한 혼란 스럽습니다. 뿐만 아니라 구식이거나 최적이 아닌 몇 가지 솔루션이 있습니다. 프로젝트가 있는지 또는 파악하려고하는지 확신 할 수 없지만 완전히 새로운 것을 만드는 것이 아니라 기존 기능을 수정하기 시작하면 더 쉽습니다. 이를 위해 나는 위키의 "개발자를위한 권장 기사"와 확실히 갈 것입니다. 새로운 지불 방법은 진정한 눈을 뜨게했습니다.

디버깅을 위해 확실히 추천합니다 Firephp 사용 문제가 발생하면 HTML 소스를보고 있습니다. Ole Echo 디버그 방법이 실제로 잘 작동하지 않습니다.

일반적인 건축은 너무나도 복잡하여 그것을 완전히 이해하더라도 책을 써야합니다. 내가 할 수있는 최선은 내가 처음 시작했을 때 누군가 나에게 준 조언을주는 것입니다 ...

핵심 파일에서 멀리 떨어져 있습니다. 그들을 수정하지 말고 대신 자신의 모듈을 작성하고 필요한 것을 무시하십시오.

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

Magento는 다음과 같은 방법을 사용합니다 Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') 특정 클래스의 개체를 반환합니다. 핵심 네임 스페이스에서 기본적으로이를 찾습니다. 직접 사용하려면 config.xml 파일.

클래스 이름은 그들이있는 폴더에 해당해야합니다.

Magento의 많은 물체는 궁극적으로 A라는 것을 확장합니다. Varien_Object. 이것은 범용 클래스 (스위스 군대 나이프와 같은 종류)이며 인생의 목적은 자신의 방법/변수를 즉시 정의 할 수 있도록하는 것입니다. 예를 들어, 데이터를 한 메서드에서 다른 방법으로 전달하기 위해 영광스러운 배열로 사용되는 것을 볼 수 있습니다.

개발 중에 캐싱이 비활성화되어 있는지 확인하십시오. 그것은 마젠토가 극도로 느리게 만들 것이지만, 책상에서 두드리는 것부터 많은 머리 외상을 절약 할 수 있습니다.

당신은 볼 수 $this 많이 사용됩니다. 그것은 당신이 보는 파일에 따라 다른 클래스를 의미합니다. get_class($this) 당신의 친구, 특히 Firephp과 함께합니다.

종이에 물건을 내려 놓으십시오. 많이. 만난 후 1-2 일이 필요한 수많은 사실이 있습니다.

마젠토는 OO를 사랑합니다. 방법을 추적하면 5-10 개의 다른 클래스를 통해 당신을 차지한다고해도 놀라지 마십시오.

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

더 많은 것이 있지만, 이것이 논문으로 바뀌기 전에 여기서 멈출 것입니다.

차라리 추천하겠습니다 MAGE2GEN, 이것은 보일러 플레이트를 생성하는 데 도움이되며 핵심 비즈니스 로직에 집중할 수 있습니다. 그것은 단지 속도를 높이는 데 도움이됩니다.

Magento 모듈은 특정 저장 기능을 작성하는 데 필요한 블록, 컨트롤러, 도우미 및 모델이 포함 된 디렉토리 그룹입니다. 마젠토 플랫폼의 사용자 정의 단위입니다. Magento 모듈은 사용자 경험과 저장고 모양에 영향을 미치는 지원 논리를 통해 여러 기능을 수행하도록 만들 수 있습니다. 수명주기가있어 설치, 삭제 또는 비활성화 할 수 있습니다. 상인과 확장 개발자의 관점에서 모듈은 Magento 플랫폼의 중심 단위입니다.

모듈 선언

구성 파일을 사용하여 모듈을 선언해야합니다. Magento 2는 모듈의 ETC 디렉토리에서 구성 모듈을 검색합니다. 이제 구성 파일 Module.xml을 생성합니다.

코드는 다음과 같습니다.

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Cloudways_Mymodule" setup_version="1.0.0"></module> </config>

모듈 등록Magento 구성 요소 레지스트라 클래스를 사용하여 모듈은 Magento 2 시스템에 등록해야합니다. 이제 모듈 루트 디렉토리에서 파일 registration.php를 만들 것입니다.

app/code/Cloudways/Mymodule/registration.php

코드는 다음과 같습니다.

?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);

모듈 상태를 확인하십시오위의 단계를 따른 후 간단한 모듈을 만들었을 것입니다. 이제 다음 명령 줄을 사용하여 모듈의 상태와 활성화 또는 비활성화 여부를 확인합니다.

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

완전한 프로세스를 거친 후에는 피드백 공유

나는 Magaplaza Hello World 튜토리얼에서 내 모듈을 만들려고했지만 무언가 잘못되었습니다. 이 모듈의 코드를 가져 왔습니다 https://github.com/astorm/magento2-hello-world Github에서 그리고 그것은 작동했습니다. 이 모듈에서 카테고리 하위 범주 AJAX Select Drop Downs 모듈을 만들었습니다. Magento2 설치의 AAP/Code 디렉토리에 설치 한 후이 URL을 따르십시오 .. http://www.example.com/hello_mvvm/hello/world여기에서 코드를 다운로드 할 수 있습니다 https://github.com/sanaullahahmad/magento2_cat_subcat_ajax_select_dropdowns AAP/코드 폴더에 배치하십시오. 이 명령을 실행하는 것보다 ...

php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c

이제 url http : // {{www.example.com}}}/hello_mvvm/hello/world로 모듈 기능을 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top