Question Hỏi cách dùng XenForo_Input ở Code Event Listener

Thảo luận trong 'XenForo Development' bắt đầu bởi Kid, 13/8/13.

1votes
5/5, 1 vote

  1. Kid

    Kid VIP Member

    Bài viết:
    863
    Likes :
    947
    Em đang dùng Code Event Listener loại template_hook ( MyAddon_Listener::template_hook ) đề chèn một ít nội dung vào ad_message_below . Em cần lấy id của chủ đề đang xem. Ở ControllerPublic thì có thể dễ dàng dùng
    Mã:
    $threadId = $this->_input->filterSingle('thread_id', XenForo_Input::UINT);
    Tuy nhiên nếu viết ở trong file Listener.php thì không được. Ai có thể giúp em cái này với ạ
     
    Đang tải...
  2. Kid

    Kid VIP Member

    Bài viết:
    863
    Likes :
    947
    Đã giải quyết đc vấn đề. Tối qua print_r cái $thread_id = $template->getParams() bị lỗi max allow memory nên không làm được. Sáng nay may mắn nên xem đc và đã tìm ra $thread_id = $template->getParams()['thread']['thread_id'];
     
  3. svxf

    svxf New Member

    Bài viết:
    25
    Likes :
    7
    params của template rất là lớn. Bạn print ra thì chắc chắn là sẽ gặp lỗi về bộ nhớ rồi (nếu php.ini ở cấu hình mặc định). Bạn dùng $thread_id = $template->getParams()['thread']['thread_id']; thì PHP cũ ko chạy được đâu.
     
    Kid thích bài này.
  4. BoDoi

    BoDoi ( ´ー`) Staff Member

    Bài viết:
    143
    Likes :
    96
    Em nên sử dụng isset hoặc !empty() nhé. VD template nó trả về là Error thì sẽ ko có param thread dẫn đến phiên bản php mới sẽ bị lỗi
    Mã:
    $threadId = 0;
    $params = $template->getParams()
    if(!empty($params['thread']['thread_id']){
        $threadId = 0; = $params['thread']['thread_id']
    }
    Đối với $template->getParams(), vì dữ liệu nó load toàn trang nên rất lớn. Em nên print_r(array_keys($template->getParams())); nó ra trước sau đó mới dùng đến element bên trong, nhẹ hơn rất nhiều
     
    Kid thích bài này.
comments powered by Disqus

Chia sẻ trang này

Đang tải...