نحوه ساخت Controller های صفحات CRM با ارثبری از BaseViewController.
مرور کلی
هر صفحه CRM که از طریق `la24_endpoints` ثبت میشود باید یک کلاس Controller داشته باشد که از `BaseViewController` ارث ببرد. این کلاس پایه بارگذاری قالب، enqueue اسکریپتها و ثبت هوکها را در چرخه حیات CRM مدیریت میکند.

API مربوط به BaseViewController
| متد | چه زمانی override کنیم | هدف |
|---|---|---|
| `content()` | همیشه | رندر HTML صفحه |
| `hook_footer()` | هنگام نیاز به enqueue اسکریپت | Enqueue JS/CSS و ارسال داده به اسکریپت |
هر دو متد بهصورت خودکار توسط LA24Core هنگام فعال بودن اندپوینت فراخوانی میشوند. وقتی `hook_footer()` را override میکنید، همیشه `parent::hook_footer()` را فراخوانی کنید.
Controller حداقلی
php
<?php
namespace MyPlugin\Controllers;
use LoyalAxis\abstracts\BaseViewController;
defined( 'ABSPATH' ) || exit;
class MyCrmPage extends BaseViewController {
public function content() {
echo '<div class="la24-panel-content"><p>سلام از صفحه CRM من.</p></div>';
}
}
الگوی کنترل دسترسی
Capability تولیدشده خودکار برای اندپوینت را در ابتدای `content()` بررسی کنید:
php
public function content() {
if ( ! la24_user_can( get_current_user_id(), 'la24_mycrmpage_access' ) ) {
la24_get_template( 'AccessDenied.php' );
return;
}
// محتوای صفحه را اینجا رندر کنید
}
نام capability از الگوی `la24_{endpoint_key_lowercase}_access` پیروی میکند. برای مثال، کلید اندپوینت `MyCrmPage` → capability `la24_mycrmpage_access`.
Enqueue کردن اسکریپتها و ارسال داده به JS
`hook_footer()` را override کنید تا JavaScript را enqueue کرده و دادههای PHP را به فرانتاند ارسال کنید:
php
public function hook_footer() {
parent::hook_footer();
la24_enqueue_script(
'my-crm-page',
MY_CRM_EXT_URL . 'assets/my-crm-page.js',
array( 'jquery' ),
'1.0.0',
true
);
wp_localize_script( 'my-crm-page', 'MyCrmData', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'my_crm_nonce' ),
'userId' => get_current_user_id(),
) );
}
داده localize شده در JavaScript به عنوان `window.MyCrmData` در دسترس است.
رندر قالبها
از `la24_get_template()` برای بارگذاری فایلهای قالب PHP و ارسال متغیرها به آنها استفاده کنید:
php
public function content() {
if ( ! la24_user_can( get_current_user_id(), 'la24_mycrmpage_access' ) ) {
la24_get_template( 'AccessDenied.php' );
return;
}
la24_get_template( 'my-crm-page.php', array(
'user_id' => get_current_user_id(),
), MY_CRM_EXT_PATH . 'templates/' );
}
`la24_get_template( $template, $args, $path )`:
- `$template` — نام فایل قالب
- `$args` — آرایه انجمنی از متغیرهایی که در scope قالب extract میشوند
- `$path` — مسیر پوشه حاوی قالب (پیشفرض: پوشه قالبهای خود LA24Core)
ساختار فایل قالب
`templates/my-crm-page.php`:
php
<?php defined( 'ABSPATH' ) || exit; ?>
<div class="la24-panel-content">
<div class="container-fluid">
<h4><?php esc_html_e( 'داشبورد CRM', 'my-crm-ext' ); ?></h4>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<?php echo esc_html__( 'به صفحه سفارشی CRM خوش آمدید.', 'my-crm-ext' ); ?>
</div>
</div>
</div>
</div>
</div>
</div>
متغیرهای ارسالشده از طریق `$args` مستقیماً در scope قالب در دسترس هستند (مثلاً `$user_id`).