نحوه ثبت اندپوینت‌های سفارشی صفحات CRM

نحوه ثبت اندپوینت‌های سفارشی صفحات CRM و اتصال آن‌ها به کلاس‌های Controller PHP.


مرور کلی

فیلتر `la24_endpoints` slug های URL را به کلاس‌های Controller PHP متصل می‌کند. وقتی کاربری به یک اندپوینت در پنل CRM هدایت می‌شود، LA24Core کلاس Controller مرتبط را نمونه‌سازی کرده و متد `content()` آن را برای رندر صفحه فراخوانی می‌کند.

امضای هوک

php
apply_filters( 'la24_endpoints', array $endpoints );
**نوع:** Filter **پارامترها:** `$endpoints` (آرایه) — رجیستری اندپوینت‌های فعلی **بازگشتی:** آرایه — رجیستری اندپوینت‌های تغییریافته

ثبت اندپوینت

php
add_filter( 'la24_endpoints', function ( $endpoints ) {

    $endpoints['MyCrmPage'] = array(
        'name'     => __( 'داشبورد CRM', 'my-crm-ext' ),
        'callback' => '\MyPlugin\Controllers\MyCrmPage',
    );

    $endpoints['MyCrmReports'] = array(
        'name'     => __( 'گزارش‌ها', 'my-crm-ext' ),
        'callback' => '\MyPlugin\Controllers\MyCrmReports',
    );

    return $endpoints;
} );
کلاس Controller در آدرس `\MyPlugin\Controllers\MyCrmPage` باید از `BaseViewController` ارث ببرد. برای API کامل Controller به راهنمای **ساخت Controller** مراجعه کنید.

فیلدهای اندپوینت

فیلدنوعتوضیح
کلید (کلید آرایه)stringslug URL؛ به عنوان شناسه اندپوینت استفاده می‌شود (مثلاً `MyCrmPage`)
`name`stringبرچسب قابل خواندن برای انسان
`callback`stringنام کامل کلاس Controller (با namespace)

Capability خودکار

برای هر اندپوینت ثبت‌شده، LA24Core به‌صورت خودکار یک capability با نام زیر می‌سازد:
javascript
la24_{slug_lowercase}_access
برای مثال، ثبت `MyCrmPage` باعث ایجاد `la24_mycrmpage_access` می‌شود. این capability را درون Controller خود بررسی کنید تا کنترل دسترسی اعمال شود:
php
if ( ! la24_user_can( get_current_user_id(), 'la24_mycrmpage_access' ) ) {
    la24_get_template( 'AccessDenied.php' );
    return;
}

دریافت URL اندپوینت

از تابع کمکی زیر برای ساخت URL هر اندپوینت ثبت‌شده استفاده کنید:
php
// URL ساده
$url = la24_get_permalink_panel( 'MyCrmPage' );

// با پارامترهای query
$url = la24_get_permalink_panel( 'MyCrmPage/?user_id=42' );
این تابع همیشه URL صحیح پنل را بدون توجه به تنظیمات permalink برمی‌گرداند.

اتصال آیتم‌های منو به اندپوینت‌ها

آیتم منو ثبت‌شده در `la24_dashboard_menu_items` به‌صورت خودکار به اندپوینت لینک می‌شود، زمانی که کلید آرایه‌اش با کلید اندپوینت یکسان باشد:
php
// کلید اندپوینت: 'MyCrmPage'
$endpoints['MyCrmPage'] = array( ... );

// کلید آیتم منو هم 'MyCrmPage' است — اتصال خودکار انجام می‌شود
$menus['MyCrmPage'] = array(
    'name'   => __( 'داشبورد CRM', 'my-crm-ext' ),
    'parent' => 'my_crm_section',
    ...
);