Kesalahan template
Kesalahan template (Smarty Debugging)
Section titled “Kesalahan template (Smarty Debugging)”Masalah umum template Smarty dan teknik debugging untuk theme dan module XOOPS.
Diagram Alir Diagnostik
Section titled “Diagram Alir Diagnostik”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 --> DKesalahan Umum template Smarty
Section titled “Kesalahan Umum template Smarty”pie title Template Error Types "Syntax Errors" : 25 "Undefined Variables" : 25 "Missing Plugins" : 15 "Cache Issues" : 20 "Encoding Problems" : 10 "Path Issues" : 51. Kesalahan Sintaks
Section titled “1. Kesalahan Sintaks”Gejala:
- Pesan “kesalahan sintaksis Smarty”.
- template tidak dapat dikompilasi
- Halaman kosong tanpa keluaran
Pesan Kesalahan:
Syntax error: unrecognized tag 'myfunction'Unexpected "}" near end of templateMasalah Sintaks Umum
Section titled “Masalah Sintaks Umum”Tag penutup tidak ada:
{* WRONG *}{if $user}User: {$user.name}{* Missing {/if} *}
{* CORRECT *}{if $user}User: {$user.name}{/if}Sintaks variabel salah:
{* 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 *}Kutipan tidak cocok:
{* WRONG *}{if $name == 'John} {* Mismatched quotes *}{assign var="user' value="John"}
{* CORRECT *}{if $name == 'John'}{assign var="user" value="John"}Solusi:
{* 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. Kesalahan Variabel Tidak Terdefinisi
Section titled “2. Kesalahan Variabel Tidak Terdefinisi”Gejala:
- Peringatan “Variabel tidak terdefinisi”.
- Variabel ditampilkan sebagai kosong
- Pemberitahuan PHP di log kesalahan
Pesan Kesalahan:
Notice: Undefined variable: myvarSmarty notice: variable "$user" not availableSkrip Debug:
<?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>";?>Perbaiki di PHP:
<?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');?>Perbaikan di template:
{* 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. Pengubah Hilang atau Salah
Section titled “3. Pengubah Hilang atau Salah”Gejala:
- Data tidak diformat dengan benar
- Teks ditampilkan sebagai HTML
- case/encoding salah
Pesan Kesalahan:
Warning: undefined modifier 'stripslashes'Pengubah Umum:
{* 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 *}Daftar Pengubah Kustom:
<?php// Register in your module$xoopsTpl = new XoopsTpl();$xoopsTpl->register_modifier('mymodifier', 'my_modifier_function');
function my_modifier_function($string) { return strtoupper($string);}?>4. Masalah Tembolok
Section titled “4. Masalah Tembolok”Gejala:
- Perubahan template tidak muncul
- Konten lama masih ditampilkan
- Termasuk atau sumber daya basi
Solusi:
# 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/*Hapus Cache dalam Kode:
<?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. Kesalahan Plugin Tidak Ditemukan
Section titled “5. Kesalahan Plugin Tidak Ditemukan”Gejala:
- “Pengubah tidak dikenal” atau “Plugin tidak dikenal”
- Fungsi khusus tidak berfungsi
- Kesalahan kompilasi dengan plugin
Pesan Kesalahan:
Fatal error: Call to undefined function smarty_modifier_customUnknown modifier 'myfunction'Buat Plugin Khusus:
<?php/** * Smarty {$var|custom} modifier plugin */function smarty_modifier_custom($string, $param = '') { // Your custom code return strtoupper($string) . $param;}?>Daftar Plugin:
<?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');?>Jenis Plugin:
<?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. Masalah template Include/Extends
Section titled “6. Masalah template Include/Extends”Gejala:
- template yang disertakan tidak dimuat
- template induk tidak ditemukan
- CSS/JS tidak memuat
Pesan Kesalahan:
Template file 'file:path/to/template.html' not foundCan't find template file 'header.html'Sintaks Sertakan Benar:
{* 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>Periksa Jalur template:
# 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. Akses Variabel Array/Object
Section titled “7. Akses Variabel Array/Object”Gejala:
- Tidak dapat mengakses nilai array
- Properti objek tidak ditampilkan
- Variabel kompleks gagal
Pesan Kesalahan:
Undefined variable: user.profile.nameSintaks yang Benar:
{* 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. Masalah Pengkodean Karakter
Section titled “8. Masalah Pengkodean Karakter”Gejala:
- Teks kacau di template
- Karakter khusus tidak ditampilkan dengan benar
- Karakter UTF-8 rusak
Solusi:
Pengkodean File template:
{* 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');Kode PHP:
<?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);?>Konfigurasi Mode Debug
Section titled “Konfigurasi Mode Debug”Aktifkan Proses Debug template:
<?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;?>Keluaran Konsol Debug:
<?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>";?>Daftar Periksa Validasi template
Section titled “Daftar Periksa Validasi template”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"]Pencegahan & Praktik Terbaik
Section titled “Pencegahan & Praktik Terbaik”- Aktifkan debugging selama pengembangan
- Validasi template sebelum diterapkan
- Hapus cache setelah perubahan
- Gunakan git untuk melacak perubahan template
- Uji di beberapa browser untuk masalah pengkodean
- Dokumentasi plugin khusus dan pengubah
- Gunakan warisan template untuk konsistensi
Dokumentasi Terkait
Section titled “Dokumentasi Terkait”- Panduan Proses Debug Smarty
- template Smarty
- Aktifkan Mode Debug
- FAQ theme
#xoops #pemecahan masalah #template #smarty #debugging