Smarty 4 Taşıma
Bu kılavuz, XOOPS’de Smarty 3’ten Smarty 4’e yükseltme yaparken gereken değişiklikleri ve geçiş adımlarını kapsar. Bu farklılıkları anlamak, modern XOOPS kurulumlarıyla uyumluluğu sürdürmek için çok önemlidir.
İlgili Belgeler
Section titled “İlgili Belgeler”- Smarty-Basics - XOOPS’de Smarty’nin temelleri
- theme Geliştirme - XOOPS temaları oluşturma
- template-Değişkenler - Şablonlarda mevcut değişkenler
Değişikliklere Genel Bakış
Section titled “Değişikliklere Genel Bakış”Smarty 4, Smarty 3’ten birkaç önemli değişiklik getirdi:
- Değişken atama davranışı değiştirildi
{php}etiketleri tamamen kaldırıldı- API değişikliklerini önbelleğe alma
- Değiştirici işleme güncellemeleri
- Güvenlik politikası değişiklikleri
- Kullanımdan kaldırılan özellikler kaldırıldı
Değişken Erişim Değişiklikleri
Section titled “Değişken Erişim Değişiklikleri”Smarty 2/3,‘de atanmış değerlere doğrudan erişilebiliyordu:
// PHP$GLOBALS['xoopsTpl']->assign('mod_url', $helper->url());{* Smarty 2/3 - worked fine *}<img src="<{$mod_url}>/assets/images/icon.png">Smarty 4’te değişkenler Smarty_Variable nesnelerine sarılır:
Smarty_Variable Object( [value] => http://example.com/modules/mymodule/ [nocache] =>)1. Çözüm: Value Özelliğine Erişin
Section titled “1. Çözüm: Value Özelliğine Erişin”{* Smarty 4 - access the value property *}<img src="<{$mod_url->value}>/assets/images/icon.png">2. Çözüm: Uyumluluk Modu
Section titled “2. Çözüm: Uyumluluk Modu”PHP’de uyumluluk modunu etkinleştirin:
$smarty = new Smarty();$smarty->setCompatibilityMode(true);Bu, Smarty 3 gibi doğrudan değişken erişimine izin verir.
3. Çözüm: Koşullu Sürüm Kontrolü
Section titled “3. Çözüm: Koşullu Sürüm Kontrolü”Her iki sürümde de çalışan templates yazın:
<{if $smarty.version|regex_replace:'[^0-9]':'' >= 4}> <{$mod_url->value}><{else}> <{$mod_url}><{/if}>Çözüm 4: Sarmalayıcı İşlevi
Section titled “Çözüm 4: Sarmalayıcı İşlevi”Ödevler için bir yardımcı işlev oluşturun:
function smartyAssign($smarty, $name, $value){ if (version_compare($smarty->version, '4.0.0', '>=')) { // Smarty 4+ - assign normally, access via ->value in templates $smarty->assign($name, $value); } else { // Smarty 3 - standard assignment $smarty->assign($name, $value); }}{php} Etiketlerini Kaldırma
Section titled “{php} Etiketlerini Kaldırma”Smarty 3+, güvenlik nedeniyle {php} etiketlerini desteklemez:
{* This NO LONGER works in Smarty 3+ *}<{assign var="cid" value=$downloads.cid}><{php}> $catid = $this->get_template_vars('cid');<{/php}>Çözüm: Smarty Değişkenlerini kullanın
Section titled “Çözüm: Smarty Değişkenlerini kullanın”{* Use Smarty's built-in variable access *}<{assign var="cid" value=$downloads.cid}><{assign var="catid" value=$smarty.template_vars.cid}>Çözüm: Mantığı PHP’ye taşıyın
Section titled “Çözüm: Mantığı PHP’ye taşıyın”Karmaşık mantık şablonlarda değil, PHP’de olmalıdır:
// In PHP - do the processing$catid = $downloads['cid'];$categoryInfo = getCategoryInfo($catid);
// Assign processed data to template$GLOBALS['xoopsTpl']->assign('category', $categoryInfo);{* In template - just display *}<h2><{$category.name}></h2>Çözüm: Özel Eklentiler
Section titled “Çözüm: Özel Eklentiler”Yeniden kullanılabilir işlevsellik için Smarty eklentileri oluşturun:
function smarty_function_getcategory($params, $smarty){ $catId = $params['id'] ?? 0; $categoryHandler = xoops_getModuleHandler('category', 'mymodule'); $category = $categoryHandler->get($catId);
if ($category) { $smarty->assign($params['assign'], $category->toArray()); }}{* In template *}<{getcategory id=$cid assign="category"}><h2><{$category.name}></h2>Önbelleğe Alma Değişiklikleri
Section titled “Önbelleğe Alma Değişiklikleri”Smarty 3 Önbelleğe Alma
Section titled “Smarty 3 Önbelleğe Alma”// Smarty 3 style$smarty->caching = true;$smarty->cache_lifetime = 3600;$smarty->cache_dir = '/path/to/cache';
// Per-variable nocache$xoopsTpl->tpl_vars["mod_url"]->nocache = false;Smarty 4 Önbelleğe Alma
Section titled “Smarty 4 Önbelleğe Alma”// Smarty 4 style$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);$smarty->setCacheLifetime(3600);$smarty->setCacheDir('/path/to/cache');
// Or using properties (still works)$smarty->caching = Smarty::CACHING_LIFETIME_CURRENT;$smarty->cache_lifetime = 3600;Sabitleri Önbelleğe Alma
Section titled “Sabitleri Önbelleğe Alma”// Caching modesSmarty::CACHING_OFF // No cachingSmarty::CACHING_LIFETIME_CURRENT // Use cache_lifetimeSmarty::CACHING_LIFETIME_SAVED // Use cached lifetimeŞablonlarda Nocache
Section titled “Şablonlarda Nocache”{* Mark content as never cached *}<{nocache}> <p>Current time: <{$smarty.now|date_format:"%H:%M:%S"}></p><{/nocache}>Değiştirici Değişiklikleri
Section titled “Değiştirici Değişiklikleri”Dize Değiştiriciler
Section titled “Dize Değiştiriciler”Bazı değiştiriciler yeniden adlandırıldı veya kullanımdan kaldırıldı:
{* Smarty 3 *}<{$text|escape:'htmlall'}>
{* Smarty 4 - use 'html' instead *}<{$text|escape:'html'}>Dizi Değiştiriciler
Section titled “Dizi Değiştiriciler”Dizi değiştiriciler @ önekini gerektirir:
{* Count array elements *}<{$items|@count}> items
{* Join array *}<{$tags|@implode:', '}>
{* JSON encode *}<{$data|@json_encode}>Özel Değiştiriciler
Section titled “Özel Değiştiriciler”Özel değiştiricilerin kaydedilmesi gerekir:
// Register a custom modifier$smarty->registerPlugin('modifier', 'my_modifier', 'my_modifier_function');
function my_modifier_function($string, $param1 = 'default'){ // Process and return return processed_string($string, $param1);}Güvenlik Politikası Değişiklikleri
Section titled “Güvenlik Politikası Değişiklikleri”Smarty 4 Güvenlik
Section titled “Smarty 4 Güvenlik”Smarty 4’ün varsayılan güvenliği daha sıkıdır:
// Configure security policy$smarty->enableSecurity('Smarty_Security');
// Or create custom policyclass MySecurityPolicy extends Smarty_Security{ public $php_functions = ['isset', 'empty', 'count']; public $php_modifiers = ['escape', 'count']; public $allow_super_globals = false;}
$smarty->enableSecurity(new MySecurityPolicy($smarty));İzin Verilen İşlevler
Section titled “İzin Verilen İşlevler”Varsayılan olarak Smarty 4, hangi PHP işlevlerinin kullanılabileceğini kısıtlar:
{* These may be restricted *}<{if isset($variable)}><{if empty($array)}><{$array|@count}>Gerekirse izin verilen işlevleri yapılandırın:
$smarty->security_policy->php_functions = [ 'isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'date', 'time'];template Devralma Güncellemeleri
Section titled “template Devralma Güncellemeleri”Blok Söz Dizimi
Section titled “Blok Söz Dizimi”Blok sözdizimi aynı kalıyor ancak bazı değişiklikler var:
{* Parent template *}<html><head> {block name=head} <title>Default Title</title> {/block}</head><body> {block name=content}{/block}</body></html>{* Child template *}{extends file="parent.tpl"}
{block name=head} {$smarty.block.parent} {* Include parent block content *} <meta name="custom" content="value">{/block}
{block name=content} <h1>My Content</h1>{/block}Ekle ve Başına Ekle
Section titled “Ekle ve Başına Ekle”{block name=head append} {* This is added after parent content *} <link rel="stylesheet" href="extra.css">{/block}
{block name=scripts prepend} {* This is added before parent content *} <script src="early.js"></script>{/block}Kullanımdan Kaldırılan Özellikler
Section titled “Kullanımdan Kaldırılan Özellikler”Smarty 4’te kaldırıldı
Section titled “Smarty 4’te kaldırıldı”| Özellik | Alternatif |
|---|---|
{php} etiketleri | Mantığı PHP’ye taşıyın veya eklentileri kullanın |
{include_php} | Kayıtlı eklentileri kullanın |
$smarty.capture | Hala çalışıyor ancak kullanımdan kaldırıldı |
{strip} boşluklu | Küçültme araçlarını kullanın |
Alternatifleri Kullan
Section titled “Alternatifleri Kullan”{* Instead of {php} *}{* Move to PHP and assign result *}
{* Instead of include_php *}<{include file="db:mytemplate.tpl"}>
{* Instead of capture (still works but consider) *}<{capture name="sidebar"}> <h3>Sidebar</h3><{/capture}><div><{$smarty.capture.sidebar}></div>Geçiş Kontrol Listesi
Section titled “Geçiş Kontrol Listesi”Taşımadan Önce
Section titled “Taşımadan Önce”- Tüm şablonları yedekleyin
- Tüm
{php}etiketi kullanımını listeleyin - Özel eklentileri belgeleyin
- Mevcut işlevselliği test edin
Taşıma Sırasında
Section titled “Taşıma Sırasında”- Tüm
{php}etiketlerini kaldırın - Değişken erişim sözdizimini güncelleyin
- Değiştirici kullanımını kontrol edin
- Önbelleğe alma yapılandırmasını güncelleyin
- Güvenlik ayarlarını gözden geçirin
Geçişten Sonra
Section titled “Geçişten Sonra”- Tüm şablonları test edin
- Tüm formların çalışıp çalışmadığını kontrol edin
- Önbelleğe almanın çalıştığını doğrulayın
- Farklı user rolleriyle test edin
Uyumluluk Testi
Section titled “Uyumluluk Testi”Sürüm Tespiti
Section titled “Sürüm Tespiti”// Check Smarty version in PHP$version = Smarty::SMARTY_VERSION;
if (version_compare($version, '4.0.0', '>=')) { // Smarty 4+ specific code} else { // Smarty 3 code}template Sürümü Kontrolü
Section titled “template Sürümü Kontrolü”{* Check version in template *}<{assign var="smarty_major" value=$smarty.version|regex_replace:'/\\..*$/':''}>
<{if $smarty_major >= 4}> {* Smarty 4+ template code *}<{else}> {* Smarty 3 template code *}<{/if}>Çapraz Uyumlu templates Yazma
Section titled “Çapraz Uyumlu templates Yazma”En İyi Uygulamalar
Section titled “En İyi Uygulamalar”-
{php}etiketlerinden tamamen kaçının - Smarty’de çalışmazlar 3+ -
Şablonları basit tutun - Karmaşık mantık PHP’ye aittir
-
Standart değiştiricileri kullanın - Kullanımdan kaldırılmış olanlardan kaçının
-
Her iki sürümü de test edin - Her ikisini de desteklemeniz gerekiyorsa
-
Karmaşık işlemler için eklentileri kullanın - Daha kolay bakım yapılabilir
Örnek: Çapraz Uyumlu template
Section titled “Örnek: Çapraz Uyumlu template”{* Works in both Smarty 3 and 4 *}<!DOCTYPE html><html><head> <title><{$page_title|default:'Default Title'|escape}></title></head><body> <{if isset($items) && $items|@count > 0}> <ul> <{foreach $items as $item}> <li><{$item.name|escape}></li> <{/foreach}> </ul> <{else}> <p>No items found.</p> <{/if}></body></html>Yaygın Geçiş Sorunları
Section titled “Yaygın Geçiş Sorunları”Sorun: Değişkenler Boş Dönüyor
Section titled “Sorun: Değişkenler Boş Dönüyor”Sorun: <{$mod_url}>, Smarty’de hiçbir şey döndürmüyor 4
Çözüm: <{$mod_url->value}> kullanın veya uyumluluk modunu etkinleştirin
Sorun: PHP Etiket Hataları
Section titled “Sorun: PHP Etiket Hataları”Sorun: template {php} etiketlerinde hata veriyor
Çözüm: Tüm PHP etiketlerini kaldırın ve mantığı PHP dosyalarına taşıyın
Sorun: Değiştirici Bulunamadı
Section titled “Sorun: Değiştirici Bulunamadı”Sorun: Özel değiştirici “bilinmeyen değiştirici” hatası veriyor
Çözüm: Değiştiriciyi registerPlugin() ile kaydedin
Sorun: Güvenlik Kısıtlaması
Section titled “Sorun: Güvenlik Kısıtlaması”Sorun: Şablonda işleve izin verilmiyor
Çözüm: Güvenlik ilkesinin izin verilenler listesine işlev ekleyin
#smarty #migration #yükseltme #xoops #smarty4 #uyumluluk