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é!
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
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???
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?
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?
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é.
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 ạ!
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?
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é.
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
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?
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.