template Hataları
template Hataları (Smarty Hata Ayıklama)
Section titled “template Hataları (Smarty Hata Ayıklama)”XOOPS temaları ve modülleri için yaygın Smarty şablonu sorunları ve hata ayıklama teknikleri.
Tanılama Akış Şeması
Section titled “Tanılama Akış Şeması”flowchart TD A[Template Error] --> B{Error Visible?} B -->|No| C[Enable Template Debug] B -->|Yes| D[Read Error Message]
C --> E{Type of Error?} E -->|Syntax| F[Check Template Syntax] E -->|Variable| G[Check Variable Assignment] E -->|Plugin| H[Check Smarty Plugin]
D --> I{Parse Error?} I -->|Yes| J[Check Braces Matching] I -->|No| K{Undefined Variable?}
K -->|Yes| L[Check Variable in PHP] K -->|No| M{File Not Found?}
M -->|Yes| N[Check Template Path] M -->|No| O[Clear Cache]
F --> P[Fix Syntax] G --> Q[Verify PHP Code] H --> R[Install Plugin] J --> P L --> Q N --> S[Verify paths] O --> T{Error Resolved?} P --> T Q --> T R --> T S --> T
T -->|No| U[Enable Debug Mode] T -->|Yes| V[Problem Solved] U --> DYaygın Smarty template Hataları
Section titled “Yaygın Smarty template Hataları”pie title Template Error Types "Syntax Errors" : 25 "Undefined Variables" : 25 "Missing Plugins" : 15 "Cache Issues" : 20 "Encoding Problems" : 10 "Path Issues" : 51. Sözdizimi Hataları
Section titled “1. Sözdizimi Hataları”Belirtiler:
- “Smarty söz dizimi hatası” mesajları
- templates derlenmiyor
- Çıktısı olmayan boş sayfa
Hata Mesajları:
Syntax error: unrecognized tag 'myfunction'Unexpected "}" near end of templateYaygın Sözdizimi Sorunları
Section titled “Yaygın Sözdizimi Sorunları”Kapanış etiketi eksik:
{* WRONG *}{if $user}User: {$user.name}{* Missing {/if} *}
{* CORRECT *}{if $user}User: {$user.name}{/if}Yanlış değişken sözdizimi:
{* WRONG *}{$user->name} {* Use . not -> *}{$array[key]} {* Use quoted keys *}{$func()} {* Can't call functions directly *}
{* CORRECT *}{$user.name}{$array.key}{$array['key']}{$user|@function} {* Use modifiers instead *}Eşleşmeyen alıntılar:
{* WRONG *}{if $name == 'John} {* Mismatched quotes *}{assign var="user' value="John"}
{* CORRECT *}{if $name == 'John'}{assign var="user" value="John"}Çözümler:
{* Always balance braces *}{if condition} ...{elseif condition} ...{else} ...{/if}
{* Verify tag format *}{foreach $items as $item} ...{/foreach}
{* Check all variables are defined *}{if isset($variable)} {$variable}{/if}2. Tanımlanamayan Değişken Hataları
Section titled “2. Tanımlanamayan Değişken Hataları”Belirtiler:
- “Tanımlanamayan değişken” uyarıları
- Değişken boş olarak görüntülenir
- Hata günlüğünde PHP bildirimi
Hata Mesajları:
Notice: Undefined variable: myvarSmarty notice: variable "$user" not availableKomut Dosyasında Hata Ayıklama:
<?php// In your template file or PHP code// Create modules/yourmodule/debug_template.php
require_once '../../mainfile.php';
// Get template engine$tpl = new XoopsTpl();
// Check what variables are assignedecho "<h1>Template Variables</h1>";echo "<pre>";print_r($tpl->get_template_vars());echo "</pre>";
// Or dump Smarty objectecho "<h1>Smarty Debug</h1>";echo "<pre>";$tpl->debug_vars();echo "</pre>";?>PHP’de düzeltin:
<?php// Ensure variables are assigned before rendering$xoopsTpl = new XoopsTpl();
// WRONG - variable not assigned$xoopsTpl->display('file:templates/page.html');
// CORRECT - assign variables first$user = [ 'name' => 'John', 'email' => 'john@example.com'];$xoopsTpl->assign('user', $user);$xoopsTpl->display('file:templates/page.html');?>Şablonda düzeltme:
{* Check if variable exists before using *}{if isset($user)} <p>User: {$user.name}</p>{else} <p>No user data</p>{/if}
{* Use default values *}<p>Name: {$user.name|default:"No name"}</p>
{* Check array key exists *}{if isset($array.key)} {$array.key}{/if}3. Eksik veya Yanlış Değiştiriciler
Section titled “3. Eksik veya Yanlış Değiştiriciler”Belirtiler:
- Veriler doğru şekilde biçimlendirilmiyor
- Metin HTML olarak görüntülenir
- Yanlış case/encoding
Hata Mesajları:
Warning: undefined modifier 'stripslashes'Genel Değiştiriciler:
{* String operations *}{$text|upper} {* Uppercase *}{$text|lower} {* Lowercase *}{$text|capitalize} {* First letter capital *}{$text|truncate:20:"..."} {* Truncate to 20 chars *}{$text|strip_tags} {* Remove HTML tags *}
{* HTML/Formatting *}{$html|escape} {* HTML escape *}{$html|escape:'html'}{$url|escape:'url'} {* URL escape *}{$text|nl2br} {* Newlines to <br> *}
{* Arrays *}{$array|@count} {* Array count *}{$array|@implode:', '} {* Join array *}
{* Default values *}{$var|default:"No value"}
{* Date formatting *}{$date|date_format:"%Y-%m-%d"} {* Format date *}
{* Math operations *}{$number|math:'+':10} {* Math operations *}Özel Değiştiriciyi Kaydet:
<?php// Register in your module$xoopsTpl = new XoopsTpl();$xoopsTpl->register_modifier('mymodifier', 'my_modifier_function');
function my_modifier_function($string) { return strtoupper($string);}?>4. cache Sorunları
Section titled “4. cache Sorunları”Belirtiler:
- template değişiklikleri görünmüyor
- Eski içerik hâlâ gösteriliyor
- Eski içerik veya kaynaklar
Çözümler:
# Clear Smarty cache directoriesrm -rf /path/to/xoops/xoops_data/caches/smarty_cache/*rm -rf /path/to/xoops/xoops_data/caches/smarty_compile/*
# Clear specific module cacherm -rf /path/to/xoops/xoops_data/caches/smarty_cache/modules/*Koddaki Önbelleği Temizle:
<?php// Clear all Smarty caches$xoopsTpl = new XoopsTpl();$xoopsTpl->clear_cache();$xoopsTpl->clear_compiled_tpl();
// Clear specific template cache$xoopsTpl->clear_cache('file:templates/page.html');
// Clear all cached filesrequire_once XOOPS_ROOT_PATH . '/class/xoopsfile.php';$dh = opendir(XOOPS_CACHE_PATH . '/smarty_cache');while (($file = readdir($dh)) !== false) { if (is_file(XOOPS_CACHE_PATH . '/smarty_cache/' . $file)) { unlink(XOOPS_CACHE_PATH . '/smarty_cache/' . $file); }}closedir($dh);?>5. Eklenti Bulunamadı Hataları
Section titled “5. Eklenti Bulunamadı Hataları”Belirtiler:
- “Bilinmeyen değiştirici” veya “Bilinmeyen eklenti”
- Özel işlevler çalışmıyor
- Eklentilerde derleme hataları
Hata Mesajları:
Fatal error: Call to undefined function smarty_modifier_customUnknown modifier 'myfunction'Özel Eklenti Oluşturun:
<?php/** * Smarty {$var|custom} modifier plugin */function smarty_modifier_custom($string, $param = '') { // Your custom code return strtoupper($string) . $param;}?>Eklentiyi Kaydet:
<?php// In your module's init code$xoopsTpl = new XoopsTpl();
// Add plugin directory to Smarty$xoopsTpl->addPluginDir( XOOPS_ROOT_PATH . '/modules/yourmodule/plugins');
// Or manually register$xoopsTpl->register_modifier( 'custom', 'smarty_modifier_custom');?>Eklenti Türleri:
<?phpfunction smarty_modifier_name($string) { return $string;}
// Block plugin: block.name.phpfunction smarty_block_name($params, $content, &$smarty, &$repeat) { if (!isset($smarty->security_settings['IF_FUNCS'])) { $smarty->security_settings['IF_FUNCS'] = []; } return $content;}
// Function plugin: function.name.phpfunction smarty_function_name($params, &$smarty) { return 'output';}
// Filter plugin: filter.name.phpfunction smarty_filter_name($code, &$smarty) { return $code;}?>6. template Include/Extends Sorunlar
Section titled “6. template Include/Extends Sorunlar”Belirtiler:
- Dahil edilen templates yüklenmiyor
- Ana template bulunamadı
- CSS/JS yüklenmiyor
Hata Mesajları:
Template file 'file:path/to/template.html' not foundCan't find template file 'header.html'Doğru Ekleme Söz Dizimi:
{* Include template *}{include file="file:templates/header.html"}
{* Include with variables *}{include file="file:templates/header.html" title="My Page"}
{* Template inheritance *}{extends file="file:templates/base.html"}
{* Named blocks *}{block name="content"} Page content here{/block}
{* Static resources *}<link rel="stylesheet" href="{$xoops_url}/themes/{$xoops_theme}/style.css"><script src="{$xoops_url}/modules/{$xoops_module_dir}/js/script.js"></script>template Yolunu Kontrol Edin:
# Verify template file existsls -la /path/to/xoops/themes/mytheme/templates/ls -la /path/to/xoops/modules/mymodule/templates/
# Check permissionsstat /path/to/xoops/themes/mytheme/templates/header.html7. Değişken Array/Object Erişim
Section titled “7. Değişken Array/Object Erişim”Belirtiler:
- Dizi değerlerine erişilemiyor
- Nesne özellikleri görüntülenmiyor
- Karmaşık değişkenler başarısız olur
Hata Mesajları:
Undefined variable: user.profile.nameDoğru Söz Dizimi:
{* Array access *}{$array.key} {* Use . for keys *}{$array['key']}{$array.0} {* Numeric indexes *}{$array.$variable_key} {* Dynamic keys *}
{* Nested arrays *}{$user.profile.name}{$data.items.0.title}
{* Object properties *}{$object.property}{$object.method|escape} {* Method calls *}
{* Safe access with isset *}{if isset($array.key)} {$array.key}{/if}
{* Check length *}{if count($array) > 0} Items found{/if}8. Karakter Kodlama Sorunları
Section titled “8. Karakter Kodlama Sorunları”Belirtiler:
- Şablonlarda bozuk metin
- Özel karakterler hatalı görüntüleniyor
- UTF-8 karakter bozuk
Çözümler:
template Dosya Kodlaması:
{* Set charset in meta tag *}<meta charset="UTF-8">
{* Or in HTML head *}<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
{* Proper PHP declaration *}header('Content-Type: text/html; charset=utf-8');PHP Kod:
<?php// Set output encodingheader('Content-Type: text/html; charset=utf-8');
// Ensure database uses UTF-8$conn = new mysqli('localhost', 'user', 'pass', 'db');$conn->set_charset('utf8mb4');
// Or in SQLSET NAMES utf8mb4;SET CHARACTER SET utf8mb4;
// Assign data properly$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');$xoopsTpl->assign('text', $text);?>Hata Ayıklama Modu Yapılandırması
Section titled “Hata Ayıklama Modu Yapılandırması”template Hata Ayıklamayı Etkinleştir:
<?php// In mainfile.phpdefine('XOOPS_DEBUG_LEVEL', 2);
// In Smarty configuration$xoopsTpl->debugging = true;$xoopsTpl->debug_tpl = SMARTY_DIR . 'debug.tpl';
// Or in module$tpl = new XoopsTpl();$tpl->debugging = true;?>Konsol Çıkışında Hata Ayıklama:
<?php// Create modules/yourmodule/debug_smarty.php
require_once '../../mainfile.php';require_once XOOPS_ROOT_PATH . '/class/smarty/Smarty.class.php';
$smarty = new Smarty();$smarty->debugging = true;
// Check compiled template$compiled_dir = $smarty->getCompileDir();echo "<h1>Compiled Templates</h1>";$files = glob($compiled_dir . '/*.php');foreach ($files as $file) { echo "<p>" . basename($file) . "</p>";}
// View compiled codeecho "<h1>Compiled Code</h1>";echo "<pre>";$latest = max(array_map('filemtime', $files));foreach ($files as $file) { if (filemtime($file) == $latest) { echo htmlspecialchars(file_get_contents($file)); break; }}echo "</pre>";?>template Doğrulama Kontrol Listesi
Section titled “template Doğrulama Kontrol Listesi”graph TD A[Template Validation] --> B["1. Syntax Check"] A --> C["2. Variable Verification"] A --> D["3. Plugin Check"] A --> E["4. File Paths"] A --> F["5. Encoding"] A --> G["6. Cache"]
B --> B1["✓ All braces matched"] B --> B2["✓ All tags closed"] B --> B3["✓ Proper syntax"]
C --> C1["✓ Variables assigned"] C --> C2["✓ Correct property access"] C --> C3["✓ Default values set"]
D --> D1["✓ Modifiers available"] D --> D2["✓ Plugins registered"] D --> D3["✓ Custom functions work"]
E --> E1["✓ Relative paths correct"] E --> E2["✓ Files exist"] E --> E3["✓ Permissions correct"]
F --> F1["✓ UTF-8 declared"] F --> F2["✓ HTML charset set"] F --> F3["✓ Database UTF-8"]
G --> G1["✓ Cache cleared"] G --> G2["✓ Compiled fresh"]Önleme ve En İyi Uygulamalar
Section titled “Önleme ve En İyi Uygulamalar”- Geliştirme sırasında hata ayıklamayı etkinleştirin
- Dağıtmadan önce şablonları doğrulayın
- Değişikliklerden sonra önbelleği temizleyin
- template değişikliklerini izlemek için git’i kullanın
- Kodlama sorunları için birden fazla tarayıcıda test edin
- Özel eklentileri belgeleyin ve değiştiriciler
- Tutarlılık için template devralmayı kullanın
İlgili Belgeler
Section titled “İlgili Belgeler”- Smarty Hata Ayıklama Kılavuzu
- Smarty template oluşturma
- Hata Ayıklama Modunu Etkinleştir
- theme FAQ
#xoops #sorun giderme #templates #Smarty #hata ayıklama