Lỗi Expression Widget Framework

Discussion in '[bd] Widget Framework' started by tungtt, Sep 18, 2014.

  1. tungtt

    tungtt New Member

    Chào bạn,
    Mình đang sử dụng Widget Framework tuy nhiên có một lỗi như sau không biết khắc phục thế nào, không biết do hệ thống mình đang dùng hay do add-on này, mong bạn xem qua nhé!
    Mình sử dụng Expression để cho hiển thị hay không hiển thị widget với một số bài viết nhất định. Cụ thể ở đây mình chỉ cho hiển thị widget với những bài viết có prefix_id = 5
    Mình đặt vào ô nhập Expression là: $thread['prefix_id'] == '5'
    Widget hiển thị đúng theo yêu cầu của mình, tức là chỉ hiển thị khi bài viết nào có prefix_id = 5, ngoài ra nó không hiển thị. Tuy nhiên khi đăng nhập vào Admin CP, mình thấy xuất hiện hàng loạt lỗi, trong vòng nửa ngày mà lên đến vài nghìn trang error log với lỗi này:
    Code:
    Undefined variable: thread
    6 phút trước - library/WidgetFramework/WidgetRenderer.php(498) : runtime-created function:1
    Server Error Log
    Error Info
    ErrorException: Undefined variable: thread - library/WidgetFramework/WidgetRenderer.php(498) : runtime-created function:1
    Generated By: Unknown Account, 7 phút trước
    Stack Trace
    #0 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(498) : runtime-created function(1): XenForo_Application::handlePhpError(8, 'Undefined varia...', '/home/user/...', 1, Array)
    #1 [internal function]: __lambda_func(Array)
    #2 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(502): call_user_func('?lambda_1', Array)
    #3 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(588): WidgetFramework_WidgetRenderer->_executeExpression('$thread['prefix...', Array)
    #4 /home/user/public_html/domain.com/library/WidgetFramework/Core.php(397): WidgetFramework_WidgetRenderer->render(Array, 'EWRporta_Portal', Array, Object(XenForo_Template_Public), '')
    #5 /home/user/public_html/domain.com/library/WidgetFramework/Core.php(316): WidgetFramework_Core->_renderWidgetsFor('EWRporta_Portal', Array, Object(XenForo_Template_Public), '')
    #6 /home/user/public_html/domain.com/library/WidgetFramework/Listener.php(126): WidgetFramework_Core->renderWidgetsFor('EWRporta_Portal', Array, Object(XenForo_Template_Public), Array)
    #7 [internal function]: WidgetFramework_Listener::template_post_render('EWRporta_Portal', '???????????????...', Array, Object(XenForo_Template_Public))
    #8 /home/user/public_html/domain.com/library/XenForo/CodeEvent.php(58): call_user_func_array(Array, Array)
    #9 /home/user/public_html/domain.com/library/XenForo/Template/Abstract.php(195): XenForo_CodeEvent::fire('template_post_r...', Array, 'EWRporta_Portal')
    #10 /home/user/public_html/domain.com/library/XenForo/Template/Public.php(110): XenForo_Template_Abstract->render()
    #11 /home/user/public_html/domain.com/library/XenForo/ViewRenderer/HtmlPublic.php(123): XenForo_Template_Public->render()
    #12 /home/user/public_html/domain.com/library/XenForo/FrontController.php(618): XenForo_ViewRenderer_HtmlPublic->renderContainer(Object(XenForo_Template_Public), Array)
    #13 /home/user/public_html/domain.com/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_View), Object(XenForo_ViewRenderer_HtmlPublic), Array)
    #14 /home/user/public_html/domain.com/index.php(13): XenForo_FrontController->run()
    #15 {main}
    Request State
    array(3) {
    ["url"] => string(22) "http://www.domain.com/"
    ["_GET"] => array(0) {
    }
    ["_POST"] => array(0) {
    }
    }

    Vậy bạn kiểm tra giúp mình nhé!
    Với lại mình đặt là: $thread['prefix_id'] == '5' OR $thread['prefix_id'] == '7' thì nó không chạy, ở đây mình dùng OR hay cho vào mảng array gì gì đó hả bạn?
    Cảm ơn bạn nhé!
     
  2. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Bạn dùng position cho widget là gì thế nhỉ?
     
  3. tungtt

    tungtt New Member

    Mình dùng thread_view
     
  4. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    thread_view mà bị thì hơi lạ, nhưng bạn có thể dùng expression như thế này

    PHP:
    !empty($thread['prefix_id']) AND $thread['prefix_id'] == 5
     
  5. tungtt

    tungtt New Member

    Vẫn bị lỗi bạn ạ!
    Có 1 widget mình muốn chỉ cho hiển thị với prefix_id = 5
    Mình dùng expression là:
    Code:
    !empty($thread['prefix_id']) AND $thread['prefix_id'] == 5
    Còn với widget mình muốn nó hiển thị trên tất cả các trang, ngoại trừ với prefix_id = 5
    Mình dùng expression là:
    Code:
    empty($thread['prefix_id']) AND $thread['prefix_id'] != 5
    Tuy nhiên vẫn lỗi!
    Không hiểu mình sai chỗ nào nữa???
     
  6. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Cái thứ hai bạn phải dùng như thế này mới đúng nhé:

    PHP:
    empty($thread['prefix_id']) OR $thread['prefix_id'] != 5
    Lỗi là bị server error log hay lỗi là chưa hiện đúng thế bạn?
     
  7. tungtt

    tungtt New Member

    Mình đã sửa lại, hiển thị đúng nhưng vẫn lỗi server error log!
     
  8. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Bạn clear server error log rồi đợi một lúc xem còn không. Nếu còn thì gửi mình chi tiết error nhé.
     
  9. tungtt

    tungtt New Member

    Code:
    Server Error Log
    Error Info
    ErrorException: Undefined variable: thread - library/WidgetFramework/WidgetRenderer.php(498) : runtime-created function:1
    Generated By: Unknown Account, 1 phút trước
    Stack Trace
    #0 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(498) : runtime-created function(1): XenForo_Application::handlePhpError(8, 'Undefined varia...', '/home/user/...', 1, Array)
    #1 [internal function]: __lambda_func(Array)
    #2 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(502): call_user_func('?lambda_19', Array)
    #3 /home/user/public_html/domain.com/library/WidgetFramework/WidgetRenderer.php(588): WidgetFramework_WidgetRenderer->_executeExpression('$thread['prefix...', Array)
    #4 /home/user/public_html/domain.com/library/WidgetFramework/Core.php(397): WidgetFramework_WidgetRenderer->render(Array, 'EWRporta_Portal', Array, Object(XenForo_Template_Public), Object(_WidgetFramework_ArrayOfString))
    #5 /home/user/public_html/domain.com/library/WidgetFramework/Core.php(316): WidgetFramework_Core->_renderWidgetsFor('EWRporta_Portal', Array, Object(XenForo_Template_Public), '')
    #6 /home/user/public_html/domain.com/library/WidgetFramework/Listener.php(126): WidgetFramework_Core->renderWidgetsFor('EWRporta_Portal', Array, Object(XenForo_Template_Public), Array)
    #7 [internal function]: WidgetFramework_Listener::template_post_render('EWRporta_Portal', '???????????????...', Array, Object(XenForo_Template_Public))
    #8 /home/user/public_html/domain.com/library/XenForo/CodeEvent.php(58): call_user_func_array(Array, Array)
    #9 /home/user/public_html/domain.com/library/XenForo/Template/Abstract.php(195): XenForo_CodeEvent::fire('template_post_r...', Array, 'EWRporta_Portal')
    #10 /home/user/public_html/domain.com/library/XenForo/Template/Public.php(110): XenForo_Template_Abstract->render()
    #11 /home/user/public_html/domain.com/library/XenForo/ViewRenderer/HtmlPublic.php(123): XenForo_Template_Public->render()
    #12 /home/user/public_html/domain.com/library/XenForo/FrontController.php(618): XenForo_ViewRenderer_HtmlPublic->renderContainer(Object(XenForo_Template_Public), Array)
    #13 /home/user/public_html/domain.com/library/XenForo/FrontController.php(158): XenForo_FrontController->renderView(Object(XenForo_ControllerResponse_View), Object(XenForo_ViewRenderer_HtmlPublic), Array)
    #14 /home/user/public_html/domain.com/index.php(13): XenForo_FrontController->run()
    #15 {main}
    Request State
    array(3) {
      ["url"] => string(22) "http://www.domain.com/"
      ["_GET"] => array(0) {
      }
      ["_POST"] => array(0) {
      }
    }
    
    Khi mình view theard thì không thấy xuất hiện lỗi, khi view các trang khác xuất hiện lỗi, như vậy có thể do:
    Code:
    empty($thread['prefix_id']) OR $thread['prefix_id'] != 5
    chưa đúng?
     
  10. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Theo error log thì bạn bị lỗi ở widget nào đó nằm ở EWRporta_Portal chứ không phải thread_view bạn nhé.
     
  11. tungtt

    tungtt New Member

    Thì do lỗi ở cái widget mà mình đặt expression là:
    empty($thread['prefix_id']) OR $thread['prefix_id'] != 5
    Nếu mình bỏ dòng ấy đi thì không còn xuất hiện lỗi nữa!
    Với tất cả những widget trên, mình dùng position là: EWRporta_Portal, thread_view,... nói chung là cho hiển thị trên toàn bộ website. Đặt lệnh trên đây chỉ để cho phép/không cho phép hiển thị với prefix_id = 5 thôi bạn ạ!
     
  12. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Expression liên quan đến position bạn nhé. Thế nên ở trên mình có hỏi bạn dùng position gì. Thế tóm lại là widget của bạn dùng những position gì vậy?
     
  13. tungtt

    tungtt New Member

    Mình dũng những position sau đây:
     
  14. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    2 widgets đều dùng position giống nhau hả bạn? Bạn disable thử một cái để kiểm tra xem lỗi từ expression nào nhé.
     
  15. tungtt

    tungtt New Member

    2 widget đều dùng position giống nhau.
    Mình disable lần lượt từng widget, lỗi xuất hiện ở widget có dùng expression:
    Code:
    empty($thread['prefix_id']) OR $thread['prefix_id'] != 5
     
  16. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Lạ nhỉ, thử lại expression này nhé bạn

    PHP:
    empty($thread) OR $thread['prefix_id'] != 5
     
  17. tungtt

    tungtt New Member

    Hiển thị ok nhưng vẫn lỗi, thông báo lỗi chi tiết vẫn như trên bạn ạ!
    Có dùng kiểu template {$thread.prefix_id} != 5 được không bạn?
     
  18. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Không dùng kiểu template được nha bạn. Ngoài ra bạn tắt hết các widget khác để kiểm tra, mình nghĩ là widget khác dùng expression đang gây lỗi chứ không phải cái widget bạn đang sửa.
     
  19. tungtt

    tungtt New Member

    Mình chỉ dùng expression cho 2 widget này thôi! :(
     
  20. xfrocks

    xfrocks XenForo rocks!
    Staff Member

    Bạn cho mình mượn tài khoản admin vào kiểm tra nhé?
     
Loading...