İçeriğe geç

XoopsObjectHandler Sınıfı

XoopsObjectHandler sınıfı ve onun uzantısı XoopsPersistableObjectHandler, XoopsObject bulut sunucularında CRUD (Oluşturma, Okuma, Güncelleme, Silme) işlemlerini gerçekleştirmek için standartlaştırılmış bir arayüz sağlar. Bu, etki alanı mantığını database erişiminden ayıran Veri Eşleyici modelini uygular.

namespace Xoops\Core;
abstract class XoopsObjectHandler
{
protected XoopsDatabase $db;
public function __construct(XoopsDatabase $db);
abstract public function create(bool $isNew = true);
abstract public function get(int $id);
abstract public function insert(XoopsObject $obj, bool $force = false): bool;
abstract public function delete(XoopsObject $obj, bool $force = false): bool;
}
XoopsObjectHandler (Abstract Base)
└── XoopsPersistableObjectHandler (Extended Implementation)
├── XoopsUserHandler
├── XoopsGroupHandler
├── XoopsModuleHandler
├── XoopsBlockHandler
├── XoopsConfigHandler
└── [Custom Module Handlers]
public function __construct(XoopsDatabase $db)

Parametreler:

ParametreTürAçıklama
$dbXoopsDatabasedatabase bağlantı örneği

Örnek:

$db = XoopsDatabaseFactory::getDatabaseConnection();
$handler = new MyObjectHandler($db);

Yeni bir nesne örneği oluşturur.

abstract public function create(bool $isNew = true): ?XoopsObject

Parametreler:

ParametreTürAçıklama
$isNewboolNesnenin yeni olup olmadığı (varsayılan: true)

Döndürür: XoopsObject|null - Yeni nesne örneği

Örnek:

$handler = xoops_getHandler('user');
$user = $handler->create();
$user->setVar('uname', 'newuser');

Bir nesneyi birincil anahtarına göre alır.

abstract public function get(int $id): ?XoopsObject

Parametreler:

ParametreTürAçıklama
$idintBirincil anahtar değeri

Döndürür: XoopsObject|null - Nesne örneği veya bulunamazsa null

Örnek:

$handler = xoops_getHandler('user');
$user = $handler->get(1);
if ($user) {
echo $user->getVar('uname');
}

Bir nesneyi veritabanına kaydeder (ekleme veya güncelleme).

abstract public function insert(
XoopsObject $obj,
bool $force = false
): bool

Parametreler:

ParametreTürAçıklama
$objXoopsObjectKaydedilecek nesne
$forceboolNesne değişmese bile işlemi zorla

Dönüş: bool - Başarı durumunda doğru

Örnek:

$handler = xoops_getHandler('user');
$user = $handler->create();
$user->setVar('uname', 'testuser');
$user->setVar('email', 'test@example.com');
if ($handler->insert($user)) {
echo "User saved with ID: " . $user->getVar('uid');
} else {
echo "Save failed: " . implode(', ', $user->getErrors());
}

Veritabanından bir nesneyi siler.

abstract public function delete(
XoopsObject $obj,
bool $force = false
): bool

Parametreler:

ParametreTürAçıklama
$objXoopsObjectSilinecek nesne
$forceboolSilmeye zorla

Dönüş: bool - Başarı durumunda doğru

Örnek:

$handler = xoops_getHandler('user');
$user = $handler->get(5);
if ($user && $handler->delete($user)) {
echo "User deleted";
}

XoopsPersistableObjectHandler, XoopsObjectHandler’yi sorgulama ve toplu işlemler için ek yöntemlerle genişletir.

public function __construct(
XoopsDatabase $db,
string $table,
string $className,
string $keyName,
string $identifierName = ''
)

Parametreler:

ParametreTürAçıklama
$dbXoopsDatabasedatabase bağlantısı
$tabledizeTablo adı (ön ek olmadan)
$classNamedizeNesnenin tam sınıf adı
$keyNamedizeBirincil anahtar alan adı
$identifierNamedizeİnsan tarafından okunabilen tanımlayıcı alan

Örnek:

class ArticleHandler extends XoopsPersistableObjectHandler
{
public function __construct(XoopsDatabase $db)
{
parent::__construct(
$db,
'mymodule_articles', // Table name
'Article', // Class name
'article_id', // Primary key
'title' // Identifier field
);
}
}

Kriterlerle eşleşen birden fazla nesneyi alır.

public function getObjects(
CriteriaElement $criteria = null,
bool $idAsKey = false,
bool $asObject = true
): array

Parametreler:

ParametreTürAçıklama
$criteriaKriter ÖğesiSorgu kriterleri (isteğe bağlı)
$idAsKeyboolBirincil anahtarı dizi anahtarı olarak kullanın
$asObjectboolNesneleri (doğru) veya dizileri (yanlış) döndür

Döndürür: array - Nesnelerin veya ilişkisel dizilerin dizisi

Örnek:

$handler = xoops_getHandler('user');
// Get all active users
$criteria = new Criteria('level', 0, '>');
$users = $handler->getObjects($criteria);
// Get users with ID as key
$users = $handler->getObjects($criteria, true);
echo $users[1]->getVar('uname'); // Access by ID
// Get as arrays instead of objects
$usersArray = $handler->getObjects($criteria, false, false);
foreach ($usersArray as $userData) {
echo $userData['uname'];
}

Kriterlerle eşleşen nesneleri sayar.

public function getCount(CriteriaElement $criteria = null): int

Parametreler:

ParametreTürAçıklama
$criteriaKriter ÖğesiSorgu kriterleri (isteğe bağlı)

Döndürür: int - Eşleşen nesnelerin sayısı

Örnek:

$handler = xoops_getHandler('user');
// Count all users
$totalUsers = $handler->getCount();
// Count active users
$criteria = new Criteria('level', 0, '>');
$activeUsers = $handler->getCount($criteria);
echo "Total: $totalUsers, Active: $activeUsers";

###Hepsini al

Tüm nesneleri alır (ölçütü olmayan getObjects’in takma adı).

public function getAll(
CriteriaElement $criteria = null,
array $fields = null,
bool $asObject = true,
bool $idAsKey = true
): array

Parametreler:

ParametreTürAçıklama
$criteriaKriter ÖğesiSorgu kriterleri
$fieldsdiziAlınacak belirli alanlar
$asObjectboolNesne olarak geri dön
$idAsKeyboolKimliği dizi anahtarı olarak kullan

Örnek:

$handler = xoops_getHandler('module');
// Get all modules
$modules = $handler->getAll();
// Get only specific fields
$modules = $handler->getAll(null, ['mid', 'name', 'dirname'], false);

Yalnızca eşleşen nesnelerin birincil anahtarlarını alır.

public function getIds(CriteriaElement $criteria = null): array

Parametreler:

ParametreTürAçıklama
$criteriaKriter ÖğesiSorgu kriterleri

Döndürür: array - Birincil anahtar değerleri dizisi

Örnek:

$handler = xoops_getHandler('user');
$criteria = new Criteria('level', 1);
$adminIds = $handler->getIds($criteria);
// [1, 5, 12, ...] - Array of admin user IDs

Açılır listeler için anahtar/değer listesini alır.

public function getList(CriteriaElement $criteria = null): array

Döndürür: array - İlişkisel dizi [id => tanımlayıcı]

Örnek:

$handler = xoops_getHandler('group');
$groups = $handler->getList();
// [1 => 'Administrators', 2 => 'Registered Users', ...]
// For a select dropdown
$form->addElement(new XoopsFormSelect('Group', 'group_id', $default, 1, false));
$form->getElement('group_id')->addOptionArray($groups);

Kriterlerle eşleşen tüm nesneleri siler.

public function deleteAll(
CriteriaElement $criteria = null,
bool $force = true,
bool $asObject = false
): bool

Parametreler:

ParametreTürAçıklama
$criteriaKriter ÖğesiSilinecek nesnelere ilişkin kriterler
$forceboolSilmeye zorla
$asObjectboolNesneleri silmeden önce yükleyin (olayları tetikler)

Döndürür: bool - Başarı durumunda doğru

Örnek:

$handler = xoops_getModuleHandler('comment', 'mymodule');
// Delete all comments for a specific article
$criteria = new Criteria('article_id', $articleId);
$handler->deleteAll($criteria);
// Delete with object loading (triggers delete events)
$handler->deleteAll($criteria, true, true);

Eşleşen tüm nesneler için bir alan değerini günceller.

public function updateAll(
string $fieldname,
mixed $fieldvalue,
CriteriaElement $criteria = null,
bool $force = false
): bool

Parametreler:

ParametreTürAçıklama
$fieldnamedizeGüncellenecek alan
$fieldvaluekarışıkYeni değer
$criteriaKriter ÖğesiGüncellenecek nesnelere ilişkin kriterler
$forceboolGüncellemeyi zorla

Returns: bool - True on success

Örnek:

$handler = xoops_getModuleHandler('article', 'mymodule');
// Mark all articles by an author as draft
$criteria = new Criteria('author_id', $authorId);
$handler->updateAll('published', 0, $criteria);
// Update view count
$criteria = new Criteria('article_id', $id);
$handler->updateAll('views', $views + 1, $criteria);

Ek işlevlere sahip genişletilmiş ekleme yöntemi.

public function insert(
XoopsObject $obj,
bool $force = false
): bool

Davranış:

  • Nesne yeniyse (isNew() === true): INSERT
  • Nesne mevcutsa (isNew() === false): UPDATE
  • Otomatik olarak cleanVars()’yi arar
  • Yeni nesnelerde otomatik artış kimliğini ayarlar

Örnek:

$handler = xoops_getModuleHandler('article', 'mymodule');
// Create new article
$article = $handler->create();
$article->setVar('title', 'New Article');
$article->setVar('content', 'Content here');
$handler->insert($article);
echo "Created with ID: " . $article->getVar('article_id');
// Update existing article
$article = $handler->get(5);
$article->setVar('title', 'Updated Title');
$handler->insert($article);

Bir Core işleyiciyi almak için genel işlev.

function xoops_getHandler(string $name, bool $optional = false): ?XoopsObjectHandler

Parametreler:

ParametreTürAçıklama
$namedizeİşleyici adı (user, module, grup vb.)
$optionalboolHatayı tetiklemek yerine null değerini döndürün

Örnek:

$userHandler = xoops_getHandler('user');
$moduleHandler = xoops_getHandler('module');
$groupHandler = xoops_getHandler('group');
$blockHandler = xoops_getHandler('block');
$configHandler = xoops_getHandler('config');

Modüle özgü bir işleyici alır.

function xoops_getModuleHandler(
string $name,
string $dirname = null,
bool $optional = false
): ?XoopsObjectHandler

Parametreler:

ParametreTürAçıklama
$namedizeİşleyici adı
$dirnamedizemodule dizini adı
$optionalboolBaşarısızlık durumunda null değerini döndür

Örnek:

// Get handler from current module
$articleHandler = xoops_getModuleHandler('article');
// Get handler from specific module
$articleHandler = xoops_getModuleHandler('article', 'news');
$storyHandler = xoops_getModuleHandler('story', 'news');

<?php
namespace XoopsModules\MyModule;
use XoopsPersistableObjectHandler;
use XoopsDatabase;
use CriteriaElement;
use Criteria;
use CriteriaCompo;
/**
* Handler for Article objects
*/
class ArticleHandler extends XoopsPersistableObjectHandler
{
/**
* Constructor
*/
public function __construct(XoopsDatabase $db = null)
{
parent::__construct(
$db,
'mymodule_articles',
Article::class,
'article_id',
'title'
);
}
/**
* Get published articles
*/
public function getPublished(int $limit = 10, int $start = 0): array
{
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('published', 1));
$criteria->add(new Criteria('publish_date', time(), '<='));
$criteria->setSort('publish_date');
$criteria->setOrder('DESC');
$criteria->setLimit($limit);
$criteria->setStart($start);
return $this->getObjects($criteria);
}
/**
* Get articles by author
*/
public function getByAuthor(int $authorId, bool $publishedOnly = true): array
{
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('author_id', $authorId));
if ($publishedOnly) {
$criteria->add(new Criteria('published', 1));
}
$criteria->setSort('created');
$criteria->setOrder('DESC');
return $this->getObjects($criteria);
}
/**
* Get articles by category
*/
public function getByCategory(int $categoryId, int $limit = 0): array
{
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('category_id', $categoryId));
$criteria->add(new Criteria('published', 1));
$criteria->setSort('publish_date');
$criteria->setOrder('DESC');
if ($limit > 0) {
$criteria->setLimit($limit);
}
return $this->getObjects($criteria);
}
/**
* Search articles
*/
public function search(string $query, array $fields = ['title', 'content']): array
{
$criteria = new CriteriaCompo();
$searchCriteria = new CriteriaCompo();
foreach ($fields as $field) {
$searchCriteria->add(
new Criteria($field, '%' . $query . '%', 'LIKE'),
'OR'
);
}
$criteria->add($searchCriteria);
$criteria->add(new Criteria('published', 1));
$criteria->setSort('publish_date');
$criteria->setOrder('DESC');
return $this->getObjects($criteria);
}
/**
* Get popular articles by view count
*/
public function getPopular(int $limit = 5): array
{
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('published', 1));
$criteria->setSort('views');
$criteria->setOrder('DESC');
$criteria->setLimit($limit);
return $this->getObjects($criteria);
}
/**
* Increment view count
*/
public function incrementViews(int $articleId): bool
{
$sql = sprintf(
"UPDATE %s SET views = views + 1 WHERE article_id = %d",
$this->db->prefix($this->table),
$articleId
);
return $this->db->queryF($sql) !== false;
}
/**
* Override insert for custom behavior
*/
public function insert(\XoopsObject $obj, bool $force = false): bool
{
// Set updated timestamp
$obj->setVar('updated', time());
// If new, set created timestamp
if ($obj->isNew()) {
$obj->setVar('created', time());
}
return parent::insert($obj, $force);
}
/**
* Override delete for cascade operations
*/
public function delete(\XoopsObject $obj, bool $force = false): bool
{
// Delete associated comments
$commentHandler = xoops_getModuleHandler('comment', 'mymodule');
$criteria = new Criteria('article_id', $obj->getVar('article_id'));
$commentHandler->deleteAll($criteria);
return parent::delete($obj, $force);
}
}
// Get the handler
$articleHandler = xoops_getModuleHandler('article', 'mymodule');
// Create a new article
$article = $articleHandler->create();
$article->setVars([
'title' => 'My New Article',
'content' => 'Article content here...',
'author_id' => $xoopsUser->getVar('uid'),
'category_id' => 1,
'published' => 1,
'publish_date' => time()
]);
if ($articleHandler->insert($article)) {
redirect_header('article.php?id=' . $article->getVar('article_id'), 2, 'Article created');
}
// Get published articles
$articles = $articleHandler->getPublished(10);
// Search articles
$results = $articleHandler->search('xoops');
// Get popular articles
$popular = $articleHandler->getPopular(5);
// Update view count
$articleHandler->incrementViews($articleId);
  1. Use Criteria for Queries: Always use Criteria objects for type-safe queries

  2. Extend for Custom Methods: Add domain-specific query methods to handlers

  3. Override insert/delete: Add cascade operations and timestamps in overrides

  4. Use Transaction Where Needed: Wrap complex operations in transactions

  5. Leverage getList: Use getList() for select dropdowns to reduce queries

  6. Index Keys: Ensure database fields used in criteria are indexed

  7. Limit Results: Always use setLimit() for potentially large result sets

  • XoopsObject - Temel nesne sınıfı
  • ../Database/Criteria - Bina sorgu kriterleri
  • ../Database/XoopsDatabase - database işlemleri

See also: XOOPS Source Code