Magento basit bir 'Hello World' modülü oluşturmak nasıl?

9 Cevap php

Nasıl şu Magento gerçekleştirmek olabilir?

  • Bir kontrolör / view / modeli yaklaşımını kullanarak bir "Merhaba Dünya" mesajı görüntüler. Yani, ben gidersem http://example.com/myController bu string 'Merhaba Dünya' gösterecektir. Web sitemin şablonu içinde bu dizeyi göstermek için güçlü olmak (örneğin, başlık, altbilgi, vb) bir bonus olacaktır.

  • Bir model ile etkileşim ve Select * FROM articles where id='10' sorgusu gerçekleştirir ve satır döndürür bu denetleyiciye (veya gerekirse yeni bir kontrol), bir yöntem eklemek için nasıl (sütunları içeren id, title, content) denetleyiciye? Ve sonra bu satır görüntüleyen bir görünüm eklemek için denetleyicisi kullanın. Yani http://example.com/myController/show_row (veya benzeri bir şey) giden bir görünüm içinde satır görüntüler. (Fantezi olmaya gerek yok, sadece bir echo $row->id; ya da benzer bir şey çalışmak.)

Magento'nın kod yapısı hakkında başka bilgiler de çok yararlı olacaktır.

9 Cevap

Birincisi ve en önemlisi, ben son derece size PDF/E-Book from PHP Architect satın öneririz. US $ 20, ama bulmak mümkün oldum sadece basit "Burada Magento nasıl çalışır" bir kaynaktır. Ben de yazmaya başladım Magento tutorials at my own website.

İkinci olarak, bir seçim var ve deneyimli bir programcı değilseniz veya (ideal olarak PHP and Java içinde) deneyimli bir programcı erişiminiz yoksa, pick another cart. Magento iyi tasarlanmış, ancak diğer programcılar üstüne modülleri kurmak bir alışveriş sepeti çözüm olarak üretilmiştir. Kolayca akıllı insanlar tarafından anlaşılması için tasarlanmış değil, ama programcılar değil edildi.

Üçüncü olarak, Magento MVC vb PHP geliştiricileri ile popüler MVC modeli Ruby on Rails, Django, CodeIgniter, CakePHP çok farklı bu gün. Ben Zend modeline dayanan düşünüyorum ve her şey çok Java cepten-gibidir. Eğer endişe gerekir two denetleyicileri var. Modül / frontName kontrol ve sonra MVC denetleyicisi.

Dördüncü, Magento uygulamanın kendisi kullanarak olacak aynı modül sistemi kullanılarak inşa edilmiş, böylece çekirdek kodu çevresinde alay yararlı bir öğrenme taktik olduğunu. Ayrıca, Magento ile ne yapıyor olacak bir sürü overriding, mevcut sınıfları. Ne burada koruyorum creating yeni işlevsellik değil, öncelikli değildir. Eğer orada kod örnekleri bakarak yaparken bunu göz önünde bulundurun.

Ben kurulum nasıl bir kontrolör / yönlendirici belirli bir URL'ye yanıt için size gösteren, ilk soru ile başlamak için gidiyorum. Bu küçük bir roman olacak. Ben model / şablon ile ilgili konular için daha zaman var olabilir, ama şimdi, bilmiyorum. Ben, ancak, kısaca SQL soruya konuşmak olacaktır.

Magento EAV veritabanı mimarisi kullanır. Mümkün modeli Sistem ihtiyacınız bilgi almak için sağlayan nesneleri kullanmayı deneyin. Ben SQL tabloları bütün olduğunu biliyorum, ama bu ham SQL sorguları kullanarak veri kapma düşünmek iyi değil, ya sen deli gidersiniz.

Nihai feragat. Ben yaklaşık iki ya da üç hafta, bu nedenle sorumluluğun alıcıya Magento kullanarak oldum. Bu kadar da yığın taşması yardımcı olduğu gibi düz kafamda bu almak için bir egzersizdir.

Bir modül oluşturun


Magento için tüm eklemeler ve özelleştirmeler modüller aracılığıyla yapılır. Yani, yapmanız gerekir ilk şey, yeni bir modül oluşturun. Bir XML dosyası oluşturun app/modules aşağıdaki gibi adlandırılır

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 sizin değişiklikler için benzersiz bir ad, bu sizin şirketinizin ismi olmak zorunda, ancak önerilen kongre benim magento anlamına gelmiyor. HelloWorld senin modülün adıdır.

Uygulama önbelleğini temizleyin


Şimdi modül dosya yerinde olduğunu, biz Magento bunu bildirmek (ve çalışmalarımızı kontrol) gerekecektir. Admin uygulama

  1. Sistem-> Önbellek Yönetimi git
  2. Tüm Önbellek menüsünden Yenile seçin
  3. Kaydet Cache ayarlarını tıklayın

Şimdi, Magento modülü biliyor emin olun

  1. Sistem-> Yapılandırma git
  2. Gelişmiş tıklayın
  3. Kutusu ayarı "Devre Dışı Bırak modülleri çıktı" in, "MyCompanyName_HelloWorld" adlı yeni modül için bakmak

Eğer performansı yavaşlatabilir ile yaşayabilir varsa, uygulama önbelleği geliştirirken / öğrenim kapatmak isteyebilirsiniz. Hiçbir şey o önbellek dışarı açık unutmadan ve değişiklikler görünmüyor merak daha sinir bozucu olduğunu.

Setup the directory structure

Sonra, kurulum modülü için bir dizin yapısı gerekir. Tüm bu dizinleri ihtiyacınız olmayacak, ama şimdi hepsini kurma hiçbir zararı yoktur.

mkdir -p app/code/local/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

Ve bir yapılandırma dosyası eklemek

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

ve yapılandırma dosyası içinde, aslında bir "boş" yapılandırma olduğu, aşağıdaki ekleyin.

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

Şeyi basitleştirerek, bu yapılandırma dosyası çalıştırmak istediğiniz kod Magento anlatsın.

Setting up the router

Sonra, kurulum için modülün yönlendiriciler gerekir. Bu sistem bizim formun herhangi URL'leri işleme konum olduğunu bildireceğiz

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

Yani, yapılandırma dosyasında, aşağıdaki bölümü ekleyin.

<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>

Burada ne söylüyorsun "helloWorld frontName ile herhangi bir URL ...

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

frontName denetleyici MyCompanyName_HelloWorld "kullanmalısınız.

Eğer yukarıdaki helloworld sayfasını yüklediğinizde Yani, bir yerde yukarıdaki yapılandırma ile, bir 404 sayfası alırsınız. Bizim denetleyicisi için bir dosya oluşturduk değil çünkü bu. Şimdi bunu yapalım.

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

Şimdi sayfa yüklenirken deneyin. İlerleme! Bunun yerine bir 404, bir PHP / Magento istisna alırsınız

Controller file was loaded but class does not exist

Yani, biz sadece oluşturduğunuz dosyayı açın ve aşağıdaki kodu yapıştırın. Sınıfın adı, yönlendirici sağlanan adına göre olması gerekir.

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";
    }
}

Biz sadece kurulum modülü / frontName denetleyicisi ettik nedir. Bu MVC denetleyicisi değil. Eğer MyCompanyName_HelloWorld_IndexController bir fooAction yöntem olsa bile, aşağıdaki URL'yi deneyin ve bir 404 alırsınız

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

Yani, kurulum MVC denetleyicisi, [) (0] yeni bir dosya oluşturun ve (Evet, bu da Evet, bu kafa karıştırıcı. Bunun bir ön Eylem olmasa bile, Mage_Core_Controller_Front_Action denetleyici uzanır aşağıdaki kodu girin, ama ben { } o) işlerin nasıl

touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.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';
    }
}

Şimdi aşağıdaki URL'leri vurmak mümkün olacak ve yankı tabloların sonuçlarını görmelisiniz

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

Yani, size Magento bir denetleyiciye gönderir nasıl temel bir fikir vermelidir. Buradan ben modelleri ve şablon / düzeni sistem nasıl kullanılması gerektiğini görmek için mevcut Magento kontrolör sınıflarında alay tavsiye ediyorum.

I've been wrestling with Magento for the last month or so and I'm still trying to figure it out. So this is a case of the blind leading the blind. There's little in the way of documentation and the forum/wiki is chaotic at best. Not only that, but there are several solutions that are either outdated or far from optimal. I'm not sure if you have a project or just trying to figure it out, but it's probably easier if you started with modifying existing functionality as opposed to creating something completely new. For that I'd definately go with the "Recommended articles for developers" in the wiki. The new payment method one was a real eye-opener.

Hata ayıklama için ben kesinlikle using FirePHP ve bir şeyler yanlış gittiğinde HTML kaynağı bakarak tavsiye ederim. Ole yankı hata ayıklama yöntemi gerçekten bütün bu iyi çalışmaz.

Genel mimarisi tamamen anladım bile, ben onu karşılamak için bir kitap yazmak gerekir ediyorum ki, böylece zihin uyuşturan karmaşıktır. Yapabileceğim en iyi ben ilk başladığımda kimse bana verdiği olsaydı size tavsiye vermek olduğunu ...

Uzak çekirdek dosyaların durun. Yerine kendi modülü yazmak ve ne gerek geçersiz, onları değiştirmek gerekmez.

Magento yapması gereken ne karar XML oluşan yapılandırma dosyaları kullanır. Çekirdek işlevsellik aksine kendi eşyalarını çalıştırmak için almak için size doğru xml gerekir. Ne yazık ki size XML oluşturmak için nasıl bir rehber de yoktur; Eğer örnekler bakmak ve bazı ciddi test yapmak gerekir. Şeyleri bu dosyaların içeriğini zorlaştırılması ölçüde harf duyarlıdır. Ancak bu ana eğer çok güçlü bir sistem için kılan temel işlevi herhangi bir bölümünü geçersiz kılabilirsiniz.

Magento belirli sınıfların nesneleri geri dönmek için Mage :: getModel ('MyModel'), Mage :: getSingleton ('mysingleton'), Mage :: yardımcısı ('myhelper') gibi yöntemler kullanır. Bu çekirdek ad varsayılan bu bulur. Eğer kendi kullanmak istiyorsanız, size config.xml dosyasında bu geçersiz kılmak gerekir.

Kendi sınıflarının adını onlar içeri konum klasörüne uygun olmalıdır

Magento nesnelerin bir çok sonuçta Varien_Object denilen bir şey uzatmak. Bu (tür bir İsviçre çakısı gibi) genel amaçlı bir sınıf olduğunu ve hayattaki amacı anında kendi yöntemleri / değişkenleri tanımlamak için izin vermektir. Örneğin başka bir yöntemle veri geçmek için bir dizi yüceltilmiş olarak kullanılan görürsünüz.

Gelişimi sırasında emin devre dışı önbelleğe olun. Bu magento excruciatingly yavaş yapacağız, ancak (masanızın üzerinde beceriyor) size kafa travması bir çok tasarruf edersiniz.

Göreceksiniz $ bu çok kullanılıyor. Bu ne görüyorsanız onu dosya bağlı olarak farklı bir sınıf demektir. get_class ($ this) özellikle FirePHP ile birlikte, senin arkadaşın.

Kağıda şeyler zerre. Bir sürü. Eğer onları karşılaşabileceğiniz 1-2 gün sonra ihtiyacın olacak sayısız küçük factoids vardır.

Magento Ö.Ö. seviyor. Bir yöntem izleme 5-10 farklı sınıflardan size alırsa şaşırmayın.

Tasarımcının kılavuzunu okuyun here. Bu grafik tasarımcıları için çok pinti, ama nerede ve neden modülden çıktı sona erecek need bunu anlamak için. Bu admin panelinde geliştirici bölümünde "Şablon yol tavsiyeleri" açmak unutmayın için.

Dahası var, ama bu bir tez dönüşür önce ben burada duracağım.

Matus noktası üzerinde biraz daha Açılımlarının:

example.com / magento / index.php / helloworld

şeffaf işaret ediyor

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

böylece temelde modülleri için aşağıdaki URI yapıya sahip

example.com / magento / index.php /: modül /: kontrolörü /: aksiyon /: param1 [/: paramN ...]

Bu birilerine yardımcı olabilir. Ben nasıl Magento kurulum helloworld için bir screencast yaptı. Bazı insanlar sadece görsel olarak daha iyi çalışır.

http://vimeo.com/37074797

Bu Alan'ın yazılan bu yana bir süre var, ama bunu da yanıtladı. Ben denetleyicilerini kendimi dışarı çalışan bir süre geçirdi. Magento kaynak kodu app / kod / çekirdek / Büyücü / Çekirdek / Controller / Varien / action.php varolan denetleyicileri geçersiz kılma ile ilgili bazı yorumlar vardır

Magento kaynak kodu çok temiz ve iyi yazılmış, ama çok iyi yorumladı değildir. Bu kod ne yaptığını öğrenmek için, kod aracılığıyla iz breakpointler ve nesneler, değişkenler, diziler, vb incelemek mümkün olduğu gibi son derece NuSphere PHPEd kullanmanızı öneririz. Ben inanılmaz faydalı ve FirePHP daha signficantly iyi PhpED var, ama bir kaç $ $ $ 'ın maliyeti nedir. Bunu söyledikten sonra, ben onsuz olmaz.

Orijinal 5.6 hata ayıklama ile bazı çıldırtan sorunlara neden bazı hatalar vardı, sen PhpED 5.6 build 5641 (bugün itibariyle son) veya daha yeni kullandığınızdan emin olun.

Magento herhangi bir acemi için, ben sadece belirtmek birkaç isteğe bağlı parametreleri ile ŞirketAdı ve modulename vererek otomatik modülünü kuracağız ModuleCreator önerecektir.

It's Free and you can download it from Magento Connect: http://www.magentocommerce.com/magento-connect/modulecreator.html

Bu yazı Giriş How to create module in magento.

Burada yanı modülü yaratıcısı indirebilirsiniz.

ya da online modülü yaratıcısı kullanabilirsiniz

http://www.silksoftware.com/magento-module-creator/

AFAIK Magento Zend Framework ile yazılmış, bu yüzden bu konularda ZF kılavuzunu okuyun giderdim.

ZF tam bir çerçeve olmadığı gibi, magentoo kod kılavuzu aramayı deneyin - - değilse - bu yeterli olmalı Eğer ZF birini oluşturmak zorunda.