تخطَّ إلى المحتوى

فئة XoopsObject

فئة XoopsObject هي الفئة الأساسية الأساسية لجميع كائنات البيانات في نظام XOOPS. توفر واجهة موحدة لإدارة خصائص الكائن والتحقق من الصحة وتتبع الحالة والتسلسل.

namespace Xoops\Core;
class XoopsObject
{
protected array $vars = [];
protected array $cleanVars = [];
protected bool $isNew = true;
protected array $errors = [];
}
XoopsObject
├── XoopsUser
├── XoopsGroup
├── XoopsModule
├── XoopsBlock
├── XoopsComment
├── XoopsNotification
├── XoopsConfig
└── [كائنات وحدات مخصصة]
الخاصيةالنوعالظهورالوصف
$varsarrayمحمييخزن تعريفات المتغيرات والقيم
$cleanVarsarrayمحمييخزن القيم المنظفة لعمليات قاعدة البيانات
$isNewboolمحمييشير إلى ما إذا كان الكائن جديد (ليس بعد في قاعدة البيانات)
$errorsarrayمحمييخزن التحقق والرسائل الخطأ
public function __construct()

ينشئ نسخة جديدة من XoopsObject. يتم تحديد الكائن كجديد بشكل افتراضي.

مثال:

$object = new XoopsObject();
// الكائن جديد ولا يحتوي على متغيرات محددة

تهيئة تعريف المتغير للكائن.

public function initVar(
string $key,
int $dataType,
mixed $value = null,
bool $required = false,
int $maxlength = null,
string $options = ''
): void

المعاملات:

المعاملالنوعالوصف
$keystringاسم المتغير
$dataTypeintثابت نوع البيانات (انظر أنواع البيانات)
$valuemixedالقيمة الافتراضية
$requiredboolما إذا كان الحقل مطلوب
$maxlengthintالحد الأقصى للطول لأنواع السلاسل
$optionsstringخيارات إضافية

أنواع البيانات:

الثابتالقيمةالوصف
XOBJ_DTYPE_TXTBOX1إدخال صندوق النص
XOBJ_DTYPE_TXTAREA2محتوى textarea
XOBJ_DTYPE_INT3قيمة عددية صحيحة
XOBJ_DTYPE_URL4سلسلة URL
XOBJ_DTYPE_EMAIL5عنوان بريد إلكتروني
XOBJ_DTYPE_ARRAY6مصفوفة مسلسلة
XOBJ_DTYPE_OTHER7نوع مخصص
XOBJ_DTYPE_SOURCE8كود المصدر
XOBJ_DTYPE_STIME9صيغة وقت قصيرة
XOBJ_DTYPE_MTIME10صيغة وقت متوسطة
XOBJ_DTYPE_LTIME11صيغة وقت طويلة
XOBJ_DTYPE_FLOAT12فاصلة عائمة
XOBJ_DTYPE_DECIMAL13رقم عشري
XOBJ_DTYPE_ENUM14التعداد

مثال:

class MyObject extends XoopsObject
{
public function __construct()
{
parent::__construct();
$this->initVar('id', XOBJ_DTYPE_INT, null, false);
$this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('email', XOBJ_DTYPE_EMAIL, '', true, 100);
$this->initVar('created', XOBJ_DTYPE_INT, time(), false);
$this->initVar('status', XOBJ_DTYPE_INT, 1, true);
}
}

تعيين قيمة المتغير.

public function setVar(
string $key,
mixed $value,
bool $notGpc = false
): bool

المعاملات:

المعاملالنوعالوصف
$keystringاسم المتغير
$valuemixedالقيمة المراد تعيينها
$notGpcboolإذا كان صحيح، القيمة ليست من GET/POST/COOKIE

الإرجاع: bool - صحيح إذا نجح، خطأ بخلاف ذلك

مثال:

$object = new MyObject();
$object->setVar('title', 'Hello World');
$object->setVar('content', '<p>Content here</p>', true); // ليس من إدخال المستخدم
$object->setVar('status', 1);

استرجاع قيمة المتغير مع تنسيق اختياري.

public function getVar(
string $key,
string $format = 's'
): mixed

المعاملات:

المعاملالنوعالوصف
$keystringاسم المتغير
$formatstringصيغة الإخراج

خيارات الصيغة:

الصيغةالوصف
's'عرض - كيانات HTML منقولة للعرض
'e'تعديل - لقيم إدخال النموذج
'p'معاينة - مشابهة للعرض
'f'بيانات النموذج - خام لمعالجة النموذج
'n'بلا - قيمة خام بدون تنسيق

الإرجاع: mixed - القيمة المنسقة

مثال:

$object = new MyObject();
$object->setVar('title', 'Hello <World>');
echo $object->getVar('title', 's'); // "Hello &lt;World&gt;"
echo $object->getVar('title', 'e'); // "Hello &lt;World&gt;" (لقيمة الإدخال)
echo $object->getVar('title', 'n'); // "Hello <World>" (خام)
// لأنواع بيانات المصفوفة
$object->setVar('options', ['a', 'b', 'c']);
$options = $object->getVar('options', 'n'); // إرجاع المصفوفة

تعيين متغيرات متعددة في آن واحد من مصفوفة.

public function setVars(
array $values,
bool $notGpc = false
): void

المعاملات:

المعاملالنوعالوصف
$valuesarrayمصفوفة ترابطية من أزواج المفتاح => القيمة
$notGpcboolإذا كان صحيح، القيم ليست من GET/POST/COOKIE

مثال:

$object = new MyObject();
$object->setVars([
'title' => 'My Title',
'content' => 'My content',
'status' => 1
]);
// من قاعدة البيانات (ليس إدخال المستخدم)
$object->setVars($row, true);

استرجاع جميع قيم المتغيرات.

public function getValues(
array $keys = null,
string $format = 's',
int $maxDepth = 1
): array

المعاملات:

المعاملالنوعالوصف
$keysarrayمفاتيح محددة للاسترجاع (null للكل)
$formatstringصيغة الإخراج
$maxDepthintالحد الأقصى للعمق للكائنات المتداخلة

الإرجاع: array - مصفوفة ترابطية من القيم

مثال:

$object = new MyObject();
// الحصول على جميع القيم
$allValues = $object->getValues();
// الحصول على قيم محددة
$subset = $object->getValues(['title', 'status']);
// الحصول على قيم خام لقاعدة البيانات
$rawValues = $object->getValues(null, 'n');

تعيين قيمة مباشرة بدون التحقق (استخدم بحذر).

public function assignVar(
string $key,
mixed $value
): void

المعاملات:

المعاملالنوعالوصف
$keystringاسم المتغير
$valuemixedالقيمة المراد تعيينها

مثال:

// تعيين مباشر من مصدر موثوق (مثل قاعدة البيانات)
$object->assignVar('id', $row['id']);
$object->assignVar('created', $row['created']);

تنظيف جميع المتغيرات لعمليات قاعدة البيانات.

public function cleanVars(): bool

الإرجاع: bool - صحيح إذا كانت جميع المتغيرات صحيحة

مثال:

$object = new MyObject();
$object->setVar('title', 'Test');
$object->setVar('email', 'user@example.com');
if ($object->cleanVars()) {
// المتغيرات نظيفة وجاهزة لقاعدة البيانات
$cleanData = $object->cleanVars;
} else {
// حدثت أخطاء في التحقق
$errors = $object->getErrors();
}

التحقق من تعيين ما إذا كان الكائن جديد.

public function isNew(): bool
public function setNew(): void
public function unsetNew(): void

مثال:

$object = new MyObject();
echo $object->isNew(); // true
$object->unsetNew();
echo $object->isNew(); // false
$object->setNew();
echo $object->isNew(); // true

إضافة رسالة خطأ.

public function setErrors(string|array $error): void

مثال:

$object->setErrors('Title is required');
$object->setErrors(['Field 1 error', 'Field 2 error']);

استرجاع جميع رسائل الخطأ.

public function getErrors(): array

مثال:

$errors = $object->getErrors();
foreach ($errors as $error) {
echo $error . "\n";
}

إرجاع الأخطاء المنسقة كـ HTML.

public function getHtmlErrors(): string

مثال:

if (!$object->cleanVars()) {
echo '<div class="error">' . $object->getHtmlErrors() . '</div>';
}

تحويل الكائن إلى مصفوفة.

public function toArray(): array

مثال:

$object = new MyObject();
$object->setVar('title', 'Test');
$data = $object->toArray();
// ['title' => 'Test', ...]

إرجاع تعريفات المتغيرات.

public function getVars(): array

مثال:

$vars = $object->getVars();
foreach ($vars as $key => $definition) {
echo "Field: $key, Type: {$definition['data_type']}\n";
}

<?php
/**
* Custom Article Object
*/
class Article extends XoopsObject
{
/**
* Constructor - Initialize all variables
*/
public function __construct()
{
parent::__construct();
// Primary key
$this->initVar('article_id', XOBJ_DTYPE_INT, null, false);
// Required fields
$this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('author_id', XOBJ_DTYPE_INT, 0, true);
// Optional fields
$this->initVar('summary', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('category_id', XOBJ_DTYPE_INT, 0, false);
// Timestamps
$this->initVar('created', XOBJ_DTYPE_INT, time(), false);
$this->initVar('updated', XOBJ_DTYPE_INT, time(), false);
// Status flags
$this->initVar('published', XOBJ_DTYPE_INT, 0, false);
$this->initVar('views', XOBJ_DTYPE_INT, 0, false);
// Metadata as array
$this->initVar('meta', XOBJ_DTYPE_ARRAY, [], false);
}
/**
* Get formatted creation date
*/
public function getCreatedDate(string $format = 'Y-m-d H:i:s'): string
{
return date($format, $this->getVar('created', 'n'));
}
/**
* Check if article is published
*/
public function isPublished(): bool
{
return $this->getVar('published', 'n') == 1;
}
/**
* Increment view counter
*/
public function incrementViews(): void
{
$views = $this->getVar('views', 'n');
$this->setVar('views', $views + 1);
}
/**
* Custom validation
*/
public function validate(): bool
{
$this->errors = [];
// Title validation
$title = trim($this->getVar('title', 'n'));
if (empty($title)) {
$this->setErrors('Title is required');
} elseif (strlen($title) < 5) {
$this->setErrors('Title must be at least 5 characters');
}
// Author validation
if ($this->getVar('author_id', 'n') <= 0) {
$this->setErrors('Author is required');
}
return empty($this->errors);
}
}
// Usage
$article = new Article();
$article->setVar('title', 'My First Article');
$article->setVar('author_id', 1);
$article->setVar('content', '<p>Article content here...</p>', true);
$article->setVar('meta', [
'keywords' => ['xoops', 'cms', 'php'],
'description' => 'An example article'
]);
if ($article->validate() && $article->cleanVars()) {
// Save to database via handler
$handler = xoops_getModuleHandler('article', 'mymodule');
$handler->insert($article);
echo "Article saved with ID: " . $article->getVar('article_id');
} else {
echo "Errors: " . $article->getHtmlErrors();
}
  1. دائم تهيئة المتغيرات: تحديد جميع المتغيرات في المُنشئ باستخدام initVar()

  2. استخدم أنواع البيانات المناسبة: اختر ثابت XOBJ_DTYPE_* الصحيح للتحقق

  3. تعامل مع إدخال المستخدم بحذر: استخدم setVar() مع $notGpc = false لإدخال المستخدم

  4. تحقق قبل الحفظ: دائماً استدعِ cleanVars() قبل عمليات قاعدة البيانات

  5. استخدم معاملات الصيغة: استخدم الصيغة المناسبة في getVar() للسياق

  6. توسيع المنطق المخصص: إضافة الطرق المتعلقة بالمجال في الفئات الفرعية

  • XoopsObjectHandler - نمط المعالج لاستمرارية الكائن
  • ../Database/Criteria - بناء الاستعلام مع Criteria
  • ../Database/XoopsDatabase - عمليات قاعدة البيانات

انظر أيضاً: كود مصدر XOOPS