Ralat Templat
Ralat Templat (Penyahpepijatan Pintar)
Section titled “Ralat Templat (Penyahpepijatan Pintar)”Isu templat Smarty biasa dan teknik penyahpepijatan untuk XOOPS tema dan modul.
Carta Aliran Diagnostik
Section titled “Carta Aliran 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 --> DRalat Templat Smarty Biasa
Section titled “Ralat Templat Smarty Biasa”pie title Template Error Types "Syntax Errors" : 25 "Undefined Variables" : 25 "Missing Plugins" : 15 "Cache Issues" : 20 "Encoding Problems" : 10 "Path Issues" : 51. Ralat Sintaks
Section titled “1. Ralat Sintaks”Simptom:
- Mesej “Ralat sintaks pintar”.
- Templat tidak akan disusun
- Halaman kosong tanpa keluaran
Mesej Ralat:
Syntax error: unrecognized tag 'myfunction'Unexpected "}" near end of templateIsu Sintaks Biasa
Section titled “Isu Sintaks Biasa”Teg penutup tiada:
{* WRONG *}{if $user}User: {$user.name}{* Missing {/if} *}
{* CORRECT *}{if $user}User: {$user.name}{/if}Sintaks pembolehubah yang 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 *}Petikan tidak sepadan:
{* WRONG *}{if $name == 'John} {* Mismatched quotes *}{assign var="user' value="John"}
{* CORRECT *}{if $name == 'John'}{assign var="user" value="John"}Penyelesaian:
{* 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. Ralat Pembolehubah Tidak Ditakrifkan
Section titled “2. Ralat Pembolehubah Tidak Ditakrifkan”Simptom:
- Amaran “pembolehubah tidak ditentukan”.
- Pembolehubah dipaparkan sebagai kosong
- PHP notis dalam log ralat
Mesej Ralat:
Notice: Undefined variable: myvarSmarty notice: variable "$user" not availableSkrip Nyahpepijat:
<?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>";?>Betulkan dalam 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');?>Betulkan dalam Templat:
{* 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 suai Hilang atau Salah
Section titled “3. Pengubah suai Hilang atau Salah”Simptom:
- Data tidak diformat dengan betul
- Teks dipaparkan sebagai HTML
- Tidak betul case/encoding
Mesej Ralat:
Warning: undefined modifier 'stripslashes'Pengubah suai biasa:
{* 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 Pengubahsuai Tersuai:
<?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 Cache
Section titled “4. Masalah Cache”Simptom:
- Perubahan templat tidak muncul
- Kandungan lama masih dipaparkan
- Termasuk atau sumber basi
Penyelesaian:
# 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/*Kosongkan Cache dalam Kod:
<?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. Ralat Pemalam Tidak Ditemui
Section titled “5. Ralat Pemalam Tidak Ditemui”Simptom:
- “Pengubah suai tidak diketahui” atau “Pemalam tidak diketahui”
- Fungsi tersuai tidak berfungsi
- Ralat kompilasi dengan pemalam
Mesej Ralat:
Fatal error: Call to undefined function smarty_modifier_customUnknown modifier 'myfunction'Buat Pemalam Tersuai:
<?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. Templat Include/Extends Isu
Section titled “6. Templat Include/Extends Isu”Simptom:
- Templat yang disertakan tidak dimuatkan
- Templat induk tidak ditemui
- CSS/JS tidak dimuatkan
Mesej Ralat:
Template file 'file:path/to/template.html' not foundCan't find template file 'header.html'Sintaks Sertakan Betul:
{* 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>Semak Laluan Templat:
# 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. Pembolehubah Array/Object Akses
Section titled “7. Pembolehubah Array/Object Akses”Simptom:
- Tidak dapat mengakses nilai tatasusunan
- Sifat objek tidak dipaparkan
- Pembolehubah kompleks gagal
Mesej Ralat:
Undefined variable: user.profile.nameSintaks yang betul:
{* 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. Isu Pengekodan Aksara
Section titled “8. Isu Pengekodan Aksara”Simptom:
- Teks bercelaru dalam templat
- Aksara khas dipaparkan secara tidak betul
- UTF-8 aksara dipecahkan
Penyelesaian:
Pengekodan Fail Templat:
{* 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);?>Konfigurasi Mod Nyahpepijat
Section titled “Konfigurasi Mod Nyahpepijat”Dayakan Penyahpepijatan Templat:
<?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;?>Output Konsol Nyahpepijat:
<?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>";?>Senarai Semak Pengesahan Templat
Section titled “Senarai Semak Pengesahan Templat”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 & Amalan Terbaik
Section titled “Pencegahan & Amalan Terbaik”- Dayakan penyahpepijatan semasa pembangunan
- Sahkan templat sebelum digunakan
- Kosongkan cache selepas perubahan
- Gunakan git untuk menjejak perubahan templat
- Uji dalam berbilang pelayar untuk isu pengekodan
- Dokumenkan pemalam tersuai dan pengubah suai
- Gunakan warisan templat untuk konsistensi
Dokumentasi Berkaitan
Section titled “Dokumentasi Berkaitan”- Panduan Penyahpepijatan Smarty
- Templat Pintar
- Dayakan Mod Nyahpepijat
- Tema FAQ
#XOOPS #penyelesaian masalah #template #pintar #penyahpepijat