Kaynak Dizelerini Anlama

#1. Giriş

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.

#2. Kaynak dizeleri genel bakış

 

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:

  • code_ - genel bir HTML/JavaScript kod parçası
  • icon_ - ikon görsel etiketi
  • input_ - bir form öğesi
  • link_ - bir bağlantı, bileşik bir bağlantı olabilir

 

#3. Statik ve dinamik kaynaklar

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

#4. Bağlantıları Oluşturma

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:

  • İlk parametre, bağlantının URL’sidir (her zaman cot_url() kullanmanızı öneririz).
  • İkinci parametre, bağlantı etiketi içinde görüntülenecek içeriktir (burada $R, cot_rc() veya başka herhangi bir değişken kullanılabilir).
  • Üçüncü parametre, isteğe bağlı olarak, etikete atanacak HTML özelliklerini belirten bir dizi veya düz bir metin olabilir (HTML dizilerinin kaçış karakterleri ve geçerliliği çağıran kişinin sorumluluğundadır).

#5. Geliştiriciler İçin Öneriler

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.

  1. Küçük ve yeniden kullanılabilir bileşenler (örn. "widgetlar", ikonlar, butonlar, form girişleri vb.) için kaynak dizelerini kullanın.
  2. Widgetlarınıza özel CSS sınıfları ekleyerek esnekliği artırın.
  3. Olabildiğince basit tutmaya çalışın, aşırı karmaşık kod parçaları için dinamik kaynak dizelerini kullanmaktan kaçının.
  4. Tablolar, listeler ve diğer tasarım düzenlerini TPL dosyalarına taşıyın, kaynak dizeleri içinde tutmayın.


Henüz yorum yapılmamış
Yalnızca kayıtlı kullanıcılar yorum yapabilir