رفتن به محتوا

خطاهای قالب

خطاهای الگو (اشکال زدایی هوشمند)

Section titled “خطاهای الگو (اشکال زدایی هوشمند)”

مشکلات رایج قالب Smarty و تکنیک های اشکال زدایی برای تم ها و ماژول های XOOPS.


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 --> D

خطاهای رایج در قالب Smarty

Section titled “خطاهای رایج در قالب Smarty”
pie title Template Error Types
"Syntax Errors" : 25
"Undefined Variables" : 25
"Missing Plugins" : 15
"Cache Issues" : 20
"Encoding Problems" : 10
"Path Issues" : 5

علائم:

  • پیام های “خطای دستوری هوشمند”.
  • قالب ها کامپایل نمی شوند
  • صفحه خالی بدون خروجی

پیام های خطا:

Syntax error: unrecognized tag 'myfunction'
Unexpected "}" near end of template

فقدان برچسب بسته شدن:

{* WRONG *}
{if $user}
User: {$user.name}
{* Missing {/if} *}
{* CORRECT *}
{if $user}
User: {$user.name}
{/if}

** نحو متغیر نادرست:**

{* 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 *}

** نقل قول های نامتناسب:**

{* WRONG *}
{if $name == 'John} {* Mismatched quotes *}
{assign var="user' value="John"}
{* CORRECT *}
{if $name == 'John'}
{assign var="user" value="John"}

راه حل:

{* 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. خطاهای متغیر تعریف نشده

Section titled “2. خطاهای متغیر تعریف نشده”

علائم:

  • هشدارهای “متغیر تعریف نشده”.
  • نمایشگر متغیر به صورت خالی نمایش داده می شود
  • اطلاعیه PHP در ورود به سیستم خطا

پیام های خطا:

Notice: Undefined variable: myvar
Smarty notice: variable "$user" not available

اسکریپت اشکال زدایی:

<?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 assigned
echo "<h1>Template Variables</h1>";
echo "<pre>";
print_r($tpl->get_template_vars());
echo "</pre>";
// Or dump Smarty object
echo "<h1>Smarty Debug</h1>";
echo "<pre>";
$tpl->debug_vars();
echo "</pre>";
?>

رفع در 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');
?>

اصلاح در قالب:

{* 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. اصلاح‌کننده‌های گمشده یا نادرست

Section titled “3. اصلاح‌کننده‌های گمشده یا نادرست”

علائم:

  • داده ها به درستی فرمت نمی شوند
  • متن به صورت HTML نمایش داده می شود
  • case/encoding نادرست است

پیام های خطا:

Warning: undefined modifier 'stripslashes'

** اصلاح کننده های رایج:**

{* 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 *}

ثبت نام اصلاح کننده سفارشی:

<?php
// Register in your module
$xoopsTpl = new XoopsTpl();
$xoopsTpl->register_modifier('mymodifier', 'my_modifier_function');
function my_modifier_function($string) {
return strtoupper($string);
}
?>

علائم:

  • تغییرات قالب ظاهر نمی شود
  • محتوای قدیمی هنوز نشان می دهد
  • کهنه شامل یا منابع

راه حل:

Terminal window
# Clear Smarty cache directories
rm -rf /path/to/xoops/xoops_data/caches/smarty_cache/*
rm -rf /path/to/xoops/xoops_data/caches/smarty_compile/*
# Clear specific module cache
rm -rf /path/to/xoops/xoops_data/caches/smarty_cache/modules/*

پاک کردن کش در کد:

<?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 files
require_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);
?>

علائم:

  • “اصلاح کننده ناشناخته” یا “افزونه ناشناخته”
  • توابع سفارشی کار نمی کنند
  • خطاهای کامپایل با افزونه ها

پیام های خطا:

Fatal error: Call to undefined function smarty_modifier_custom
Unknown modifier 'myfunction'

ایجاد پلاگین سفارشی:

modules/yourmodule/plugins/modifier.custom.php
<?php
/**
* Smarty {$var|custom} modifier plugin
*/
function smarty_modifier_custom($string, $param = '') {
// Your custom code
return strtoupper($string) . $param;
}
?>

افزونه ثبت نام:

<?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'
);
?>

انواع پلاگین:

modifier.name.php
<?php
function smarty_modifier_name($string) {
return $string;
}
// Block plugin: block.name.php
function 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.php
function smarty_function_name($params, &$smarty) {
return 'output';
}
// Filter plugin: filter.name.php
function smarty_filter_name($code, &$smarty) {
return $code;
}
?>

علائم:

  • قالب های گنجانده شده بارگذاری نمی شوند
  • الگوی والد پیدا نشد
  • CSS/JS بارگیری نمی شود

پیام های خطا:

Template file 'file:path/to/template.html' not found
Can't find template file 'header.html'

** نحو صحیح شامل:**

{* 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>

مسیر الگو را بررسی کنید:

Terminal window
# Verify template file exists
ls -la /path/to/xoops/themes/mytheme/templates/
ls -la /path/to/xoops/modules/mymodule/templates/
# Check permissions
stat /path/to/xoops/themes/mytheme/templates/header.html

علائم:

  • نمی توان به مقادیر آرایه دسترسی پیدا کرد
  • ویژگی های شیء نمایش داده نمی شود
  • متغیرهای پیچیده شکست می خورند

پیام های خطا:

Undefined variable: user.profile.name

** نحو صحیح:**

{* 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. مسائل رمزگذاری کاراکتر

Section titled “8. مسائل رمزگذاری کاراکتر”

علائم:

  • متن های مخدوش در قالب ها
  • کاراکترهای ویژه به اشتباه نمایش داده می شوند
  • کاراکترهای UTF-8 شکسته شده است

راه حل:

رمزگذاری فایل الگو:

{* 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:

<?php
// Set output encoding
header('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 SQL
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
// Assign data properly
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
$xoopsTpl->assign('text', $text);
?>

پیکربندی حالت اشکال زدایی

Section titled “پیکربندی حالت اشکال زدایی”

فعال کردن اشکال زدایی الگو:

<?php
// In mainfile.php
define('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;
?>

خروجی دیباگ کنسول:

<?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 code
echo "<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>";
?>

چک لیست اعتبار سنجی الگو

Section titled “چک لیست اعتبار سنجی الگو”
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"]

پیشگیری و بهترین شیوه ها

Section titled “پیشگیری و بهترین شیوه ها”
  1. فعال کردن اشکال زدایی در حین توسعه
  2. قبل از استقرار الگوها را اعتبارسنجی کنید
  3. پاک کردن کش پس از تغییرات
  4. از git برای پیگیری تغییرات قالب استفاده کنید
  5. ** در مرورگرهای متعدد ** برای مشکلات رمزگذاری تست کنید
  6. افزونه های سفارشی و اصلاح کننده ها را مستند کنید
  7. از وراثت قالب برای ثبات استفاده کنید

  • راهنمای رفع اشکال هوشمند
  • قالب هوشمند
  • حالت Debug Mode را فعال کنید
  • سوالات متداول تم

#xoops #عیب یابی #قالب ها #هوشمند #اشکال زدایی