Her şeyden önce, PDF / E-Kitabı PHP Architect'ten satın almanızı şiddetle tavsiye ederim . Bu 20 ABD doları, ancak bulabildiğim tek basit "Magento böyle çalışır" kaynağıdır. Ayrıca kendi web sitemde Magento öğreticileri yazmaya başladım .
İkincisi, bir seçeneğiniz varsa ve deneyimli bir programcı değilseniz veya deneyimli bir programlayıcıya (ideal olarak PHP ve Java'da) erişiminiz yoksa , başka bir sepet seçin . Magento iyi tasarlanmış, ancak diğer programcıların üzerine modüller inşa edebileceği bir alışveriş sepeti çözümü olarak tasarlanmıştır. Akıllı, ancak programcı olmayan insanlar tarafından kolayca anlaşılmak üzere tasarlanmamıştır.
Üçüncüsü, Magento MVC, Ruby on Rails , Django , CodeIgniter , CakePHP , vs.'den çok farklı . Bu gün PHP geliştiricileri arasında popüler olan MVC modeli. Bence Zend modeline dayanıyor ve her şey Java OOP benzeri. Endişelenmeniz gereken iki kontrolör var. Modül / frontName denetleyicisi ve ardından MVC denetleyicisi.
Dördüncüsü, Magento uygulamasının kendisi, kullanacağınız aynı modül sistemi kullanılarak üretilmiştir, bu nedenle çekirdek kodun etrafında gezinmek yararlı bir öğrenme taktiği. Ayrıca, Magento ile yapacağınız şeylerin çoğu mevcut sınıfları geçersiz kılıyor . Burada ele aldığım , geçersiz kılmak değil, yeni işlevsellik yaratmak . Kod örneklerine bakarken bunu aklınızda bulundurun.
İlk sorunuzla başlayacağım, size belirli bir URL'ye yanıt vermek için bir denetleyici / yönlendirici nasıl ayarlayacağınızı göstereceğim. Bu küçük bir roman olacak. Model / şablonla ilgili konular için daha sonra zamanım olabilir ama şimdilik yapmıyorum. Ancak, kısaca SQL sorunuzla konuşacağım.
Magento bir EAV veritabanı mimarisi kullanır . Mümkün olduğunda, ihtiyacınız olan bilgileri almak için sistemin sağladığı model nesnelerini kullanmayı deneyin. Hepsini SQL tablolarında biliyorum, ama en iyisi ham SQL sorguları kullanarak veri yakalamayı düşünmemek, yoksa delirirsiniz.
Son feragatname. Magento'yu yaklaşık iki ya da üç haftadır kullanıyorum, bu yüzden uyarı emptoru. Bu, Stack Overflow'a yardımcı olduğu kadar bunu kafamda düz tutmak için bir egzersiz.
Bir modül oluşturun
Magento'ya yapılan tüm eklemeler ve özelleştirmeler modüller aracılığıyla yapılır. Yani, yapmanız gereken ilk şey yeni bir modül oluşturmak. app/modules
Aşağıdaki şekilde adlandırılmış bir XML dosyası oluşturun
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>
ŞirketimAdı, değişiklikleriniz için benzersiz bir ad alanıdır, şirketinizin adı olmak zorunda değildir, ancak önerilen kural benim eflatunumdur. HelloWorld
modülünüzün adıdır.
Uygulama önbelleğini temizleme
Şimdi modül dosyası yerinde olduğuna göre, Magento'ya bunu bildirmemiz (ve çalışmalarımızı kontrol etmemiz) gerekecek. Yönetici uygulamasında
- Sistem-> Önbellek Yönetimi'ne gidin
- Tüm Önbellek menüsünden Yenile'yi seçin
- Önbellek ayarlarını kaydet'i tıklayın
Şimdi, Magento'nun modülü bildiğinden emin oluyoruz
- Sistem-> Yapılandırma'ya gidin
- Gelişmiş'i tıklayın
- "Modül çıkışını devre dışı bırak" ayar kutusunda, "ŞirketimAdı_HelloWorld" adlı yeni modülünüzü arayın
Performansın yavaşlamasıyla yaşayabiliyorsanız, geliştirme / öğrenme sırasında uygulama önbelleğini kapatmak isteyebilirsiniz. Önbelleği temizlemeyi unutmak ve değişikliklerinizin neden görünmediğini merak etmekten daha sinir bozucu bir şey yoktur.
Dizin yapısını ayarlayın
Ardından, modül için bir dizin yapısı ayarlamamız gerekecek. Tüm bu dizinlere ihtiyacınız olmayacak, ancak hepsini kurmanın hiçbir zararı yok.
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ı ekleyin
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
ve yapılandırma dosyasının içine, esasen "boş" bir yapılandırma olan aşağıdakileri ekleyin.
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
İşleri aşırı basitleştiren bu yapılandırma dosyası, Magento'ya hangi kodu çalıştırmak istediğinizi söylemenizi sağlar.
Yönlendiriciyi ayarlama
Sonra, modülün yönlendiricilerini ayarlamamız gerekiyor. Bu, sisteme herhangi bir URL’yi
http://example.com/magento/index.php/helloworld
Bu nedenle, yapılandırma dosyanıza 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 söylediğiniz şey "helloworld'ün ön adıyla herhangi bir URL ...
http://example.com/magento/index.php/helloworld
"FrontName denetleyicisi MyCompanyName_HelloWorld" kullanmalıdır.
Dolayısıyla, yukarıdaki yapılandırma uygulandığında, yukarıdaki dünya sayfasını yüklediğinizde 404 sayfası alırsınız. Bunun nedeni, denetleyicimiz için bir dosya oluşturmadığımızdır. Şimdi yapalım.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
Şimdi sayfayı yüklemeyi deneyin. İlerleme! 404 yerine bir PHP / Magento istisnası elde edersiniz
Controller file was loaded but class does not exist
Bu nedenle, az önce oluşturduğumuz dosyayı açın ve aşağıdaki kodu yapıştırın. Sınıfın adının, yönlendiricinizde sağladığınız adı temel alması gerekir.
<?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";
}
}
Yeni ayarladığımız modül / frontName denetleyicisidir. Bu, varsayılan denetleyici ve modülün varsayılan eylemidir. Denetleyiciler veya eylemler eklemek istiyorsanız, Magento URL'sinin ilk bölümünün değişmez olduğunu ve her zaman bu şekilde gideceklerini hatırlamanız gerekir.http://example.com/magento/index.php/frontName/controllerName/actionName
Bu URL ile eşleşmek istiyorsanız
http://example.com/magento/index.php/helloworld/foo
Bu şekilde yapabileceğiniz bir FooController'a sahip olmanız gerekir:
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';
}
}
Varsayılan denetleyici IndexController ve varsayılan eylem indexAction'ın örtük olarak olabileceğini, ancak bir şey geldikten sonra açık olması gerektiğini lütfen unutmayın. Böylece http://example.com/magento/index.php/helloworld/foo
FooController kontrolörü ve indexAction eylem eylemiyle eşleşecek ve IndexController eylem eylemiyle eşleşmeyecektir. Bir fooAction'a sahip olmak istiyorsanız, IndexController denetleyicisinde bu denetleyiciyi bu şekilde açıkça çağırmanız gerekir: http://example.com/magento/index.php/helloworld/index/foo
çünkü url'nin
ikinci kısmı her zaman controllerName'dir ve her zaman controllerName olacaktır. Bu davranış, Magento içinde paketlenmiş Zend Framework kalıtımdır.
Artık aşağıdaki URL'lere ulaşabilmeniz ve yankı ifadelerinizin sonuçlarını görebilmeniz gerekir
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, bu size Magento'nun bir denetleyiciye nasıl gönderildiğine dair temel bir fikir vermelidir. Buradan, modellerin ve şablon / düzen sisteminin nasıl kullanılması gerektiğini görmek için mevcut Magento denetleyici sınıflarına bakmanızı tavsiye ederim.