ساخت Controller برای اندپوینت های رجیستر شده

نحوه ساخت 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`).