Eğer MVC'yi (Model-View-Controller) daha önce duyduysanız, PHP kodunuzda HTML dizeleri kullanmanın kötü bir kodlama tarzı olduğunu biliyor olabilirsiniz. Gerçi LDU'nun ilk günlerinden beri çekirdekte bunlardan çok fazla vardı.
Cotonti'de bu dizeleri ortadan kaldırmayı ve şablon tasarımcılarına biçimlendirme ve düzen üzerinde tam kontrol vermeyi amaçladık.
Bu amacı gerçekleştirmek için, Cotonti 0.7.0 sürümünde Kaynak Dizeleri (genellikle rc olarak kısaltılır) kavramı tanıtıldı. Bu makale, kaynak dizelerinin ne olduğunu açıklar ve bunların nasıl kullanılacağına ve eski kodların nasıl saf MVC + RC modeline dönüştürüleceğine dair öneriler sunar.
Kaynak Dizeleri, bir web sitesinin HTML (veya başka herhangi bir) çıktısında kullanılmak üzere tasarlanmış PHP dize değişkenleridir. Temel fark, bunların küresel $R dizisinde saklanması ve çekirdek/modül PHP kodundan fiziksel olarak ayrılmasıdır.
Önceden tanımlanmış bir dizi standart kaynak, system/resources.php dosyasında bulunur. Eğer bir tema geliştiricisi bazı kaynak dizelerini özelleştirmek isterse, bunları sadece themes/THEME_NAME/THEME_NAME.php dosyasında yeniden tanımlayabilir. Modül ve eklenti geliştiricileri de kendi kodları için belirli kaynak dosyalarında standart kaynaklar sağlayabilir ve bunlar yine belirli bir temanın tanımlamaları tarafından geçersiz kılınabilir.
Global $R dizisi, tüm kaynakları içermek için kullanılır; tıpkı global $L dizisinin dil dizeleri için kullanılması gibi. Ön ekler, kaynakları düzenli tutmak için kullanılır. İlk olarak, kaynaklar modüllere göre düzenlenir, bu nedenle modül ön eki önce gelir (örneğin, 'pfs_'). Cotonti genelinde yaygın olarak kullanılan kaynaklar için herhangi bir modül ön eki bulunmaz. Daha sonra genellikle bir kaynak türü ön eki gelir, örneğin 'icon_', 'link_', 'code_' vb. İşte bir kaynak dizesi tanımına örnek:
$R['pfs_icon_folder'] = '<img class="icon" src="themes/'.$theme.'/img/system/icon-folder.gif" alt="'.$L['Folder'].'" />';
Gördüğünüz gibi, sık kullanılan bir öğenin HTML yapısını tanımlar ve $L, $theme, $cfg, $usr gibi küresel statik değişkenleri kullanır.
İşte kaynak adlarında yaygın olarak kullanılan bazı kaynak türü ön eklerinin listesi:
İkonlar gibi birçok kaynak dizesi statiktir: Bunları bir kez tanımlarsınız ve doğrudan kullanabilirsiniz. Yukarıdaki $R['pfs_icon_folder']
örneği bir statik kaynaktır. PHP kodu içinde bunu doğrudan şu şekilde kullanabilirsiniz:
$some_folder = $R['pfs_icon_folder'] . $something;
Ayrıca TPL dosyalarında şu şekilde kullanılabilir:
<a href="/some/folder">{PHP.R.pfs_icon_folder} {FOLDER_NAME}</a>
Ancak bazen, PHP betiğinizde belirli parçaları dinamik olarak atanması gereken widget'lara ihtiyacınız olabilir. Bu tür kaynaklar dinamik olarak bilinir. İşte bir dinamik kaynak örneği:
$R['pfs_icon_type'] = '<img class="icon" src="images/pfs/{$type}.gif" alt="{$name}" />';
Gördüğünüz gibi bunun çoğu hala statik HTML'dir. Ancak, PHP değişkenlerini ve bazı şablon motorlarını hatırlatan {$var_name} gibi değiştirilecek parçalar vardır. Bunların PHP değişkenleri olarak değerlendirilmemesi için tek tırnak (ticks) kullanmanız gerektiğinden emin olun.
Ne yazık ki, dinamik kaynakları TPL dosyalarında etkili bir şekilde kullanamazsınız, çünkü bunlar yalnızca PHP koduna özeldir. Bunun için cot_rc()
adlı özel bir fonksiyon vardır. Yukarıdaki kaynağı şu şekilde kullanabilirsiniz:
$some_icon = cot_rc('pfs_icon_type', array('type' => $type, 'name' => $name));
Veya eğer global kapsamdaysanız ve $type ve $name değişkenleri zaten global olarak tanımlanmışsa, yalnızca şu şekilde çağırabilirsiniz:
$some_icon = cot_rc('pfs_icon_type');
Varsayılan olarak cot_rc()
, belirtilen kaynak indeksinde küresel $R dizisini arar. Ancak belirli bir kaynak dizesini doğrudan da geçirebilirsiniz, örneğin:
$something = cot_rc('Every <b>{$pet}</b> likes <i>{$food}</i>', array('pet' => 'dog', 'food' => 'meat'));
İkinci parametre, dinamik değişkenleri içeren bir ilişkisel dizidir. Eğer cot_rc()
{$var_name} ile karşılaşır ve 'var_name' değişkeni değiştirilecekler arasında yoksa, global alandaki $var_name değişkenini kullanmaya çalışır.
Ayrıca, parametre listesini temsil eden kısa bir sözdizimi de mevcuttur:
$some_icon = cot_rc('pfs_icon_type', "type=$type&name=$name"));
Basit kısa parametre listeleri için, '=', '&' gibi karakterler içermeyen değerler kullanın.
Kodun çeşitli yerlerinde şu tür bağlantı oluşturma kodları görebilirsiniz:
$out = '<a href="' . cot_url('mod', 'arg1=val1&arg2=val2') . '" title="' . $title . '">' . $text . '</a>';
Bu tarz bağlantıları oluşturmak için dinamik kaynak dizelerini ve cot_rc()
fonksiyonunu kullanabilirsiniz, ancak bu pek de kısa bir yol olmaz. Bunun yerine cot_rc_link()
fonksiyonunu kullanabilirsiniz. Yukarıdaki örneği şu şekilde dönüştürebiliriz:
$out = cot_rc_link(cot_url('mod', 'arg1=val1&arg2=val2'), $text, array('title' => $title));
Mükemmel değil, ama en azından dinamik kaynak dizeleri konseptini bağlantılara uygular ve HTML'i çekirdek koddan çıkarır. Daha temiz bir yapı sunar.
Fonksiyonun kullanımı oldukça basittir:
cot_url()
kullanmanızı öneririz).cot_rc()
veya başka herhangi bir değişken kullanılabilir).Artık Kaynak Dizeleri ile nasıl çalışacağınızı öğrendiğinize göre, PHP kodunuzdan HTML'i tamamen çıkarmak istiyorsanız bazı önerilerimiz var. Kaynak dizeleri dışında başka konuları da kapsar ama kısa tutacağız.