OpenCart 1.5.X geliştirici yeni başlayanlar için hızlı başlangıç kılavuzu
Bu kılavuz, PHP, OOP ve MVC mimarisine zaten aşina olan geliştiriciler için yazılmıştır.
Aşağıda, alışveriş sepetinin katalog tarafı için örnekler göreceksiniz. Yönetici tarafı, ilgili bölümde belirtilen görünümler haricinde işlev bakımından aynıdır.
Kitaplıkları Anlamak
Tüm kitaplık işlevlerine Denetleyici, Model ve Görünümler aracılığıyla erişilebilir $this->library_name. Bunların tümü /system/library/klasörde bulunabilir. Örneğin, mevcut alışveriş sepetinin ürünlerine erişmek için Cart, içinde bulunan /system/library/cart.phpve kullanılarak erişilebilen sınıfı kullanmanız gerekir.$this->cart->getProducts()
Yaygın olarak kullanılan öğeler
customer.php - Müşteri ile ilgili işlevler
user.php - Yönetici kullanıcıyla ilgili işlevler
cart.php - Alışveriş sepetiyle ilgili işlevler
config.php - Tüm ayarlar buradan yüklenir
url.php - URL oluşturma işlevleri
Rota parametresini anlama
OpenCart'ın çerçevesi, route=aaa/bbb/cccneyin yükleneceğini bilmek için sorgu dizesi parametresine dayanır ve her sayfa için düzenlemeniz gereken dosyaları bulmanın temelini oluşturur. Çoğu yol aslında yalnızca aaa/bbbiki parça olarak görülmesi gerekenleri kullanır , ancak bazıları üç bölüm içerir aaa/bbb/ccc. İlk bölüm aaagenellikle denetleyici veya şablon klasörler gibi genel bir klasör içindeki klasörle ilgilidir. İkinci bölüm genellikle ilgili .phpveya .tpluzantı olmadan dosya adıyla ilgilidir . Üçüncü bölüm, aşağıdaki "Denetleyicileri anlama" bölümünde açıklanmıştır.
Dilleri anlamak
Diller /catalog/language/, your-languagealt klasördeki klasörde saklanır . Bunun içinde, çeşitli sayfalarda kullanılan genel metin değerleri your-language.phpklasör içindeki dosyada saklanır , bu nedenle katalog tarafındaki İngilizce dili için değerleri içinde bulabilirsiniz catalog/language/english/english.php. Belirli bir sayfa metni routeiçin, sayfa için ihtiyacınız olacaktır (Bu genellikle böyledir, ancak istediğiniz herhangi bir dil dosyasını belirleyebileceğiniz için her zaman geçerli değildir ). Örneğin, arama sayfasının rotası vardır product/searchve bu nedenle bu sayfa için dile özgü metnin içinde bulunabilir catalog/language/english/product/search.php(Dosyanın adı ve alt klasörünün, ardından gelen rotayla eşleştiğine dikkat edin .php.
Dili bir denetleyiciye yüklemek için şunu kullanırsınız:
$this->language->load('product/search');
Ardından, dil kitaplığı işlevini get, örneğin, belirli dil metinlerini almak için kullanabilirsiniz.
$some_variable = $this->language->get('heading_title');
Dil değişkenleri $_, bir anahtarlar ve metin değerleri dizisi olan özel bir değişken kullanılarak dil dosyasında atanır . Senin içinde /catalog/language/english/product/search.phpbenzer bir şey bulmalısın
$_['heading_title'] = 'Search';
Global dil dosyasındaki english/english.phpdeğerler otomatik olarak yüklenir ve $this->language->loadyöntem olmadan kullanılabilir.
Denetleyicileri anlama
Kontrolörler temel alınarak yüklenir routeve anlaşılması oldukça basittir. Denetleyiciler /catalog/controller/klasörde bulunur. Son örnekten devam edersek, Arama sayfası için Denetleyici /product/search.phpbu klasörün içindedir. İzlenen rotanın .phpkullanıldığına bir kez daha dikkat edin .
Denetleyici dosyasını açtığınızda, Controllersınıfı genişleten bir Pascal Case sınıf adı görürsünüz ControllerProductSearch. Bu yine rotaya özeldir.Controller ardından alt klasör adı ve uzantı büyük harfle yazılmadan dosya adı gelir. Büyük harf kullanımı aslında gerekli değildir, ancak kolay okunabilirlik için önerilir. Sınıf adlarının alt klasörden ve dosya adından harfler ve sayılar dışında herhangi bir değer almadığını belirtmek gerekir. Alt çizgiler kaldırılır.
Sınıfın içinde yöntemler vardır. Bildirilen sınıftaki yöntemler public, rota aracılığıyla çalıştırılmak üzere erişilebilirdir - privatedeğildir. Varsayılan olarak, standart iki parçalı yolla ( aaa/bbbyukarıda), varsayılan bir index()yöntem çağrılır. Bir rotanın üçüncü kısmı ( cccyukarıda) kullanılırsa, bunun yerine bu yöntem çalıştırılacaktır. Örneğin account/return/insert, /catalog/controller/account/return.phpdosyayı ve sınıfı yükleyecek ve insertyöntemi çağırmayı deneyecek
Modelleri Anlamak
OpenCart'taki modeller /catalog/model/klasörde bulunur ve rotaya değil işleve göre gruplandırılır ve bu nedenle bunları kontrol cihazınıza
$this->load->model('xxx/yyy');
Bu, dosyayı xxxadı verilen alt klasöre yükleyecektir yyy.php. Daha sonra nesne üzerinden kullanılabilir
$this->model_xxx_yyy
ve denetleyicilerde olduğu gibi, yalnızca publicyöntemlerini çağırabilirsiniz . Örneğin, bir görüntüyü yeniden boyutlandırmak için tool/imagemodeli kullanır ve resizeaşağıdaki gibi yöntemini çağırırsınız.
$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
Denetleyiciden görünümlerdeki değişken atamasını anlama
Denetleyiciden görünüme değerler iletmek için, verilerinizi $this->datadeğişkene atamanız yeterlidir , bu temelde bir anahtar => değer çiftleri dizisidir. Örnek olarak
$this->data['example_var'] = 123;
Her anahtarı bir değişkene dönüştüren extract () yöntemine aşinaysanız, buna bir görünümde erişmek biraz anlaşılır olmalıdır . Böylece example_varanahtar $example_vargörünümde olduğu gibi erişilebilir hale gelir ve erişilebilir.
Temaları anlamak
Temalar yalnızca katalog tarafında mevcuttur ve temelde şablonlar, stil sayfaları ve tema görüntülerinden oluşan bir klasördür. Tema klasörleri /catalog/view/theme/klasöre yerleştirilir ve ardından tema adı gelir. Klasör ismi hariç önem olmadığı defaultklasöre
Yönetici tarafı kullanır /admin/view/template/( /theme/theme-name/farklı temalara izin vermediği için yoldan atlayarak )
Şablon dosyaları template, tema klasöründeki bir klasörde bulunur. Şu anda seçili tema için herhangi bir şablon yoksa, bunun yerine yedek olarak varsayılan klasörün şablonu kullanılır. Bu, temaların çok az dosyayla oluşturulabileceği ve yine de tam olarak çalışabileceği anlamına gelir. Ayrıca, yükseltmeler yapıldıkça kod yinelemesini ve sorunları azaltır
Görünümleri (şablonlar) anlama
Dil ve modellerde olduğu gibi, görünüm dosyaları genellikle rota ile ilgilidir, ancak olması gerekmez. Katalog tarafındaki şablonlar genellikle /catalog/view/theme/your-theme/template/mevcut olmadığı sürece içinde bulunur, bu durumda varsayılan temanın şablonları kullanılacaktır. Yukarıdaki arama sayfası örneğimiz için dosya product/search.tpl. Üç bölümden oluşan rotalar için, aaa/bbb_ccc.tplkatı kural olmamasına rağmen genellikle geçerlidir . Yöneticide, ürün listeleme sayfası gibi öğeleri listeleyen sayfaların içinde olması catalog/product_list.tplve ürün düzenleme formunun içinde olması dışında çoğu sayfa bunu takip eder catalog/product_form.tpl. Yine, bunlar ayarlanmadı, ancak varsayılan alışveriş sepeti için bir standart.
Şablon dosyası aslında sadece başka bir php dosyasıdır, ancak bir .tpl uzantısına sahiptir ve aslında denetleyici dosyasında çalıştırılır, bu nedenle bir denetleyicide kodlayabileceğiniz her şey bir şablon dosyasında çalıştırılabilir (ancak kesinlikle önerilmez) gerekli)
Veritabanı nesnesini anlama
Sorgular kullanılarak çalıştırılır
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
DB_PREFIX adından da anlaşılacağı gibi, varsa veritabanı önekini içeren bir sabittir
$resultSELECTbirkaç özellik içeren sorgular için bir nesne döndürür
$result->row bir veya daha fazla ilişkilendirilebilir dizi olarak döndürülürse ilk satırın verilerini içerir
$result->rows foreach kullanarak döngü yapmak için ideal olan bir dizi satır sonucu içerir
$result->num_rows döndürülen sonuçların sayısını içerir
Ayrıca $this->dbnesnenin sahip olduğu birkaç ekstra yöntem vardır.
$this->db->escape()iletilen değerde mysql_real_escape_string () kullanır
$this->db->countAffectedbir UPDATEsorgudan etkilenen satırların sayısını verir vb.
$this->db->getLastId()mysql_insert_id () kullanarak son otomatik artış kimliğini döndürür
Ayrılmış değişkenleri anlama
OpenCart standardın yerine kullanılmasına değişkenleri önceden tanımlanmış $_GET, $_POST, $_SESSION, $_COOKIE, $_FILES, $_REQUESTVE$_SERVER
$_SESSION$this->session->dataverinin bir ilişkisel dizi olduğu yerde düzenlenir .$_SESSION
Diğerlerinin hepsine kullanılarak erişilebilir $this->requestve sihirli tırnak işaretlerinin etkinleştirilmesi / devre dışı bırakılması için "temizlendi".
$_GET olur $this->request->get
$_POST olur $this->request->post
$_COOKIE olur $this->request->cookie
$_FILES olur $this->request->files
$_REQUEST olur $this->request->request
$_SERVER olur $this->request->server
Özet
Yukarıdakiler geliştiriciler için kurşun geçirmez bir rehber olmasa da, umarım yeni başlayanlar için iyi bir başlangıç noktası olur.