Trong CodeIgniter 3, bạn có thể tạo chức năng tương tự như shortcode của WordPress để cho phép nhúng nội dung động hoặc chức năng vào trong các view. Mặc dù CodeIgniter không có hỗ trợ sẵn cho shortcode như WordPress, bạn có thể xây dựng hệ thống shortcode tùy chỉnh bằng cách sử dụng các regular expressions (biểu thức chính quy) để tìm và thay thế các mã shortcode trong nội dung.

Dưới đây là cách bạn có thể tạo một chức năng shortcode cơ bản trong CodeIgniter 3:

Bước 1: Tạo Helper cho Shortcode

Tạo một helper mới để quản lý các shortcode. Bạn có thể lưu nó trong thư mục application/helpers/ với tên tệp là shortcode_helper.php.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

if (!function_exists('do_shortcode')) {

    // Hàm xử lý shortcode
    function do_shortcode($content) {
        // Tìm tất cả các shortcode trong nội dung bằng biểu thức chính quy
        return preg_replace_callback('/\[(\w+)([^\]]*)\]/', 'shortcode_callback', $content);
    }

    // Hàm gọi lại cho preg_replace_callback
    function shortcode_callback($matches) {
        // $matches[1] là tên của shortcode
        // $matches[2] là các tham số của shortcode (nếu có)

        // Phân tích tham số của shortcode thành dạng mảng
        $params = shortcode_parse_atts($matches[2]);

        // Kiểm tra xem có function shortcode tương ứng không
        $shortcode_function = 'shortcode_' . $matches[1];
        if (function_exists($shortcode_function)) {
            return call_user_func($shortcode_function, $params);
        }

        // Nếu không có shortcode tương ứng, trả lại nội dung gốc
        return $matches[0];
    }

    // Hàm phân tích chuỗi thành mảng tham số
    function shortcode_parse_atts($text) {
        $atts = [];
        preg_match_all('/(\w+)=["\']([^"\']*)["\']/', $text, $matches, PREG_SET_ORDER);
        foreach ($matches as $match) {
            $atts[$match[1]] = $match[2];
        }
        return $atts;
    }
}

Bước 2: Đăng ký các Shortcode

Sau khi đã tạo hệ thống shortcode, bạn cần tạo các hàm shortcode cụ thể. Bạn có thể đăng ký các hàm shortcode trong cùng một helper hoặc tạo một helper khác.

Ví dụ: tạo shortcode [hello], hiển thị văn bản “Hello, World!”.

if (!function_exists('shortcode_hello')) {

    // Shortcode [hello] không có tham số
    function shortcode_hello($params) {
        return '<strong>Hello, World!</strong>';
    }
}

Ví dụ tiếp theo: tạo shortcode [button], hiển thị một nút với văn bản và URL tùy chỉnh.

if (!function_exists('shortcode_button')) {

    // Shortcode [button text="Click Me" url="http://example.com"]
    function shortcode_button($params) {
        $text = isset($params['text']) ? $params['text'] : 'Button';
        $url = isset($params['url']) ? $params['url'] : '#';
        
        return '<a href="' . htmlspecialchars($url) . '" class="btn btn-primary">' . htmlspecialchars($text) . '</a>';
    }
}

Bước 3: Sử dụng Shortcode trong View

Trong các view của CodeIgniter, bạn có thể sử dụng các shortcode bằng cách gọi hàm do_shortcode() trên nội dung. Ví dụ:

// Trong view (application/views/shortcode_view.php)

$content = '
    <p>Đây là một đoạn văn bản có chứa shortcode.</p>
    <p>[hello]</p>
    <p>[button text="Click Here" url="https://google.com"]</p>
';

// Thực thi shortcode trước khi hiển thị nội dung
echo do_shortcode($content);

Bước 4: Tải Helper trong Controller

Trong controller của bạn, đảm bảo helper shortcode_helper được tải trước khi sử dụng các shortcode:

// Trong view (application/views/shortcode_view.php)

$content = '
    <p>Đây là một đoạn văn bản có chứa shortcode.</p>
    <p>[hello]</p>
    <p>[button text="Click Here" url="https://google.com"]</p>
';

// Thực thi shortcode trước khi hiển thị nội dung
echo do_shortcode($content);

Kết quả

Khi bạn chạy view với nội dung chứa các shortcode, các shortcode sẽ được thay thế bằng các giá trị thực tế được tạo bởi các hàm shortcode. Kết quả sẽ trông giống như:

<?php
class Shortcode extends CI_Controller {

    public function index() {
        // Tải helper shortcode
        $this->load->helper('shortcode');

        // Tải view chứa shortcode
        $this->load->view('shortcode_view');
    }
}
?>

Mở rộng Shortcode

Bạn có thể dễ dàng mở rộng hệ thống shortcode này bằng cách:

  • Thêm nhiều hàm shortcode khác vào shortcode_helper.php.
  • Sử dụng các logic phức tạp hơn trong các hàm shortcode.
  • Tích hợp các chức năng như chèn hình ảnh, nhúng video, hoặc tạo các biểu mẫu động.

Kết luận

Với cách này, bạn đã có thể tạo một hệ thống shortcode tương tự như WordPress trong CodeIgniter 3. Bằng cách sử dụng biểu thức chính quy và callback, bạn có thể xử lý và thực thi các shortcode động để nhúng các phần tử hoặc chức năng vào trong nội dung của view.