# ملاحق تقاطع الوسوم

**URL:** https://meta.discourse.org/t/tag-intersection-navigator/368815
**Category:** Plugin
**Created:** [4 يونيو 2025، 9:20ص UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815 "2025-06-04T09:20:40Z")
**Posts on this page:** 6
**Page:** 2

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2 يناير 2026، 10:21ص UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/21 "2026-01-02T10:21:25Z")

</div>

إجراء “تنظيف ربيعي” للعطلة

> <https://github.com/merefield/discourse-tag-intersection-navigator/pull/7>
>
> \* deals with rename
> \* also removes distinction of mobile view which is no longe…r possible within an initialiser

- لم يعد من الممكن التمييز بين الأجهزة المحمولة أثناء التهيئة في النواة (core)، لذا كان لا بد من معالجة هذا الأمر
- قامت النواة (core) بتغيير أسماء المعلمات (param names) للوسوم (tags)

---

<div class="post-metadata">

### Author: ![mhawash](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mhawash/32/542302_2.png) [@mhawash](https://meta.discourse.org/u/mhawash)
#### Post date: [8 فبراير 2026، 11:54ص UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/22 "2026-02-08T11:54:24Z")

</div>

هذا غير كافٍ، نحن بحاجة فعليًا إلى بناء هذه الميزة داخليًا، فالعديد من برامج المجتمع لديها هذه الميزة بشكل أصلي، بما في ذلك Discord وNodebb وغيرهما!

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [8 فبراير 2026، 12:05م UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/23 "2026-02-08T12:05:22Z")

</div>

إذا كنت ترغب في توظيفي (ووافق CDCK من حيث المبدأ)، فسأقوم بتطوير طلب سحب (PR) :).

في غضون ذلك، إذا كنت تستضيف بنفسك، فاستمتع به كما هو!

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [11 فبراير 2026، 6:35م UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/24 "2026-02-11T18:35:02Z")

</div>

لقد قمت بترقية المنتدى والآن النقر على العلامات يعطي خطأ 500.

للعلم فقط: يُظهر السجل ما يلي

> **info**
>
> NoMethodError (undefined method ‘force\_encoding’ for nil)  
> app/controllers/application\_controller.rb:442:in ‘block in ApplicationController#with\_resolved\_locale’  
> app/controllers/application\_controller.rb:442:in ‘ApplicationController#with\_resolved\_locale’  
> app/controllers/application\_controller.rb:1088:in ‘ApplicationController#ensure\_dont\_cache\_page’  
> lib/middleware/omniauth\_bypass\_middleware.rb:35:in ‘Middleware::OmniauthBypassMiddleware#call’  
> lib/middleware/crawler\_hooks.rb:11:in ‘Middleware::CrawlerHooks#call’  
> lib/content\_security\_policy/middleware.rb:12:in ‘ContentSecurityPolicy::Middleware#call’  
> lib/middleware/anonymous\_cache.rb:418:in ‘Middleware::AnonymousCache#call’  
> lib/middleware/csp\_script\_nonce\_injector.rb:12:in ‘Middleware::CspScriptNonceInjector#call’  
> config/initializers/008-rack-cors.rb:14:in ‘Discourse::Cors#call’  
> lib/middleware/default\_headers.rb:13:in ‘Middleware::DefaultHeaders#call’  
> config/initializers/100-quiet\_logger.rb:20:in ‘DiscourseRackQuietAssetsLogger#call’  
> config/initializers/100-silence\_logger.rb:29:in ‘SilenceLogger#call’  
> lib/middleware/enforce\_hostname.rb:23:in ‘Middleware::EnforceHostname#call’  
> lib/middleware/request\_tracker.rb:321:in ‘Middleware::RequestTracker#call’  
> lib/middleware/overload\_protections.rb:22:in ‘Middleware::OverloadProtections#call’  
> lib/middleware/processing\_request.rb:14:in ‘Middleware::ProcessingRequest#call’

> **backtrace**
>
> plugins/discourse-tag-intersection-navigator/lib/discourse\_tag\_intersection\_navigator/tags\_controller\_extension.rb:17:in ‘block (2 levels) in module:TagsControllerExtension’
> 
> plugins/discourse-tag-intersection-navigator/lib/discourse\_tag\_intersection\_navigator/tags\_controller\_extension.rb:10:in ‘DiscourseTagIntersectionNavigator::TagsControllerExtension#show’
> 
> actionpack (8.0.4) lib/action\_controller/metal/basic\_implicit\_render.rb:8:in ‘ActionController::BasicImplicitRender#send\_action’
> 
> actionpack (8.0.4) lib/abstract\_controller/base.rb:215:in ‘AbstractController::Base#process\_action’
> 
> actionpack (8.0.4) lib/action\_controller/metal/rendering.rb:193:in ‘ActionController::Rendering#process\_action’
> 
> actionpack (8.0.4) lib/abstract\_controller/callbacks.rb:261:in ‘block in AbstractController::Callbacks#process\_action’
> 
> activesupport (8.0.4) lib/active\_support/callbacks.rb:120:in ‘block in ActiveSupport::Callbacks#run\_callbacks’
> 
> app/controllers/application\_controller.rb:442:in ‘block in ApplicationController#with\_resolved\_locale’
> 
> i18n (1.14.7) lib/i18n.rb:353:in ‘I18n::Base#with\_locale’
> 
> app/controllers/application\_controller.rb:442:in ‘ApplicationController#with\_resolved\_locale’
> 
> activesupport (8.0.4) lib/active\_support/callbacks.rb:129:in ‘block in ActiveSupport::Callbacks#run\_callbacks’
> 
> app/controllers/application\_controller.rb:1088:in ‘ApplicationController#ensure\_dont\_cache\_page’
> 
> activesupport (8.0.4) lib/active\_support/callbacks.rb:129:in ‘block in ActiveSupport::Callbacks#run\_callbacks’
> 
> activesupport (8.0.4) lib/active\_support/callbacks.rb:140:in ‘ActiveSupport::Callbacks#run\_callbacks’
> 
> actionpack (8.0.4) lib/abstract\_controller/callbacks.rb:260:in ‘AbstractController::Callbacks#process\_action’
> 
> actionpack (8.0.4) lib/action\_controller/metal/rescue.rb:27:in ‘ActionController::Rescue#process\_action’
> 
> actionpack (8.0.4) lib/action\_controller/metal/instrumentation.rb:76:in ‘block in ActionController::Instrumentation#process\_action’
> 
> activesupport (8.0.4) lib/active\_support/notifications.rb:210:in ‘block in ActiveSupport::Notifications.instrument’
> 
> activesupport (8.0.4) lib/active\_support/notifications/instrumenter.rb:58:in ‘ActiveSupport::Notifications::Instrumenter#instrument’
> 
> activesupport (8.0.4) lib/active\_support/notifications.rb:210:in ‘ActiveSupport::Notifications.instrument’
> 
> actionpack (8.0.4) lib/action\_controller/metal/instrumentation.rb:75:in ‘ActionController::Instrumentation#process\_action’
> 
> actionpack (8.0.4) lib/action\_controller/metal/params\_wrapper.rb:259:in ‘ActionController::ParamsWrapper#process\_action’
> 
> activerecord (8.0.4) lib/active\_record/railties/controller\_runtime.rb:39:in ‘ActiveRecord::Railties::ControllerRuntime#process\_action’
> 
> actionpack (8.0.4) lib/abstract\_controller/base.rb:152:in ‘AbstractController::Base#process’
> 
> actionview (8.0.4) lib/action\_view/rendering.rb:40:in ‘ActionView::Rendering#process’
> 
> actionpack (8.0.4) lib/action\_controller/metal.rb:252:in ‘ActionController::Metal#dispatch’
> 
> actionpack (8.0.4) lib/action\_controller/metal.rb:335:in ‘ActionController::Metal.dispatch’
> 
> actionpack (8.0.4) lib/action\_dispatch/routing/route\_set.rb:67:in ‘ActionDispatch::Routing::RouteSet::Dispatcher#dispatch’
> 
> actionpack (8.0.4) lib/action\_dispatch/routing/route\_set.rb:50:in ‘ActionDispatch::Routing::RouteSet::Dispatcher#serve’
> 
> actionpack (8.0.4) lib/action\_dispatch/journey/router.rb:53:in ‘block in ActionDispatch::Journey::Router#serve’
> 
> actionpack (8.0.4) lib/action\_dispatch/journey/router.rb:133:in ‘block in ActionDispatch::Journey::Router#find\_routes’
> 
> actionpack (8.0.4) lib/action\_dispatch/journey/router.rb:126:in ‘Array#each’
> 
> actionpack (8.0.4) lib/action\_dispatch/journey/router.rb:126:in ‘ActionDispatch::Journey::Router#find\_routes’
> 
> actionpack (8.0.4) lib/action\_dispatch/journey/router.rb:34:in ‘ActionDispatch::Journey::Router#serve’
> 
> actionpack (8.0.4) lib/action\_dispatch/routing/route\_set.rb:908:in ‘ActionDispatch::Routing::RouteSet#call’
> 
> lib/middleware/omniauth\_bypass\_middleware.rb:35:in ‘Middleware::OmniauthBypassMiddleware#call’
> 
> plugins/discourse-reach-and-rights/lib/discourse\_reach\_and\_rights/request\_cache\_middleware.rb:10:in ‘DiscourseReachAndRights::RequestCacheMiddleware#call’
> 
> lib/middleware/crawler\_hooks.rb:11:in ‘Middleware::CrawlerHooks#call’
> 
> rack (2.2.21) lib/rack/tempfile\_reaper.rb:15:in ‘Rack::TempfileReaper#call’
> 
> rack (2.2.21) lib/rack/conditional\_get.rb:27:in ‘Rack::ConditionalGet#call’
> 
> rack (2.2.21) lib/rack/head.rb:12:in ‘Rack::Head#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/http/permissions\_policy.rb:38:in ‘ActionDispatch::PermissionsPolicy::Middleware#call’
> 
> lib/content\_security\_policy/middleware.rb:12:in ‘ContentSecurityPolicy::Middleware#call’
> 
> lib/middleware/anonymous\_cache.rb:418:in ‘Middleware::AnonymousCache#call’
> 
> lib/middleware/csp\_script\_nonce\_injector.rb:12:in ‘Middleware::CspScriptNonceInjector#call’
> 
> config/initializers/008-rack-cors.rb:14:in ‘Discourse::Cors#call’
> 
> rack (2.2.21) lib/rack/session/abstract/id.rb:266:in ‘Rack::Session::Abstract::Persisted#context’
> 
> rack (2.2.21) lib/rack/session/abstract/id.rb:260:in ‘Rack::Session::Abstract::Persisted#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/cookies.rb:706:in ‘ActionDispatch::Cookies#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/callbacks.rb:31:in ‘block in ActionDispatch::Callbacks#call’
> 
> activesupport (8.0.4) lib/active\_support/callbacks.rb:100:in ‘ActiveSupport::Callbacks#run\_callbacks’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/callbacks.rb:30:in ‘ActionDispatch::Callbacks#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/debug\_exceptions.rb:31:in ‘ActionDispatch::DebugExceptions#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/show\_exceptions.rb:32:in ‘ActionDispatch::ShowExceptions#call’
> 
> logster (2.20.1) lib/logster/middleware/reporter.rb:40:in ‘Logster::Middleware::Reporter#call’
> 
> lib/middleware/default\_headers.rb:13:in ‘Middleware::DefaultHeaders#call’
> 
> railties (8.0.4) lib/rails/rack/logger.rb:41:in ‘Rails::Rack::Logger#call\_app’
> 
> railties (8.0.4) lib/rails/rack/logger.rb:29:in ‘Rails::Rack::Logger#call’
> 
> config/initializers/100-quiet\_logger.rb:20:in ‘DiscourseRackQuietAssetsLogger#call’
> 
> config/initializers/100-silence\_logger.rb:29:in ‘SilenceLogger#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/request\_id.rb:34:in ‘ActionDispatch::RequestId#call’
> 
> lib/middleware/enforce\_hostname.rb:23:in ‘Middleware::EnforceHostname#call’
> 
> rack (2.2.21) lib/rack/method\_override.rb:24:in ‘Rack::MethodOverride#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/executor.rb:16:in ‘ActionDispatch::Executor#call’
> 
> rack (2.2.21) lib/rack/sendfile.rb:127:in ‘Rack::Sendfile#call’
> 
> message\_bus (4.4.1) lib/message\_bus/rack/middleware.rb:60:in ‘MessageBus::Rack::Middleware#call’
> 
> lib/middleware/request\_tracker.rb:321:in ‘Middleware::RequestTracker#call’
> 
> actionpack (8.0.4) lib/action\_dispatch/middleware/remote\_ip.rb:96:in ‘ActionDispatch::RemoteIp#call’
> 
> lib/middleware/overload\_protections.rb:22:in ‘Middleware::OverloadProtections#call’
> 
> lib/middleware/processing\_request.rb:14:in ‘Middleware::ProcessingRequest#call’
> 
> railties (8.0.4) lib/rails/engine.rb:535:in ‘Rails::Engine#call’
> 
> railties (8.0.4) lib/rails/railtie.rb:226:in ‘Kernel#public\_send’
> 
> railties (8.0.4) lib/rails/railtie.rb:226:in ‘Rails::Railtie.method\_missing’
> 
> rack (2.2.21) lib/rack/urlmap.rb:74:in ‘block in Rack::URLMap#call’
> 
> rack (2.2.21) lib/rack/urlmap.rb:58:in ‘Array#each’
> 
> rack (2.2.21) lib/rack/urlmap.rb:58:in ‘Rack::URLMap#call’
> 
> rack (2.2.21) lib/rack/tempfile\_reaper.rb:15:in ‘Rack::TempfileReaper#call’
> 
> pitchfork (0.18.1) lib/pitchfork/chunked.rb:105:in ‘Pitchfork::Chunked#call’
> 
> rack (2.2.21) lib/rack/content\_length.rb:17:in ‘Rack::ContentLength#call’
> 
> pitchfork (0.18.1) lib/pitchfork/http\_server.rb:867:in ‘Pitchfork::HttpServer#process\_client’
> 
> pitchfork (0.18.1) lib/pitchfork/http\_server.rb:1015:in ‘Pitchfork::HttpServer#worker\_loop’
> 
> pitchfork (0.18.1) lib/pitchfork/http\_server.rb:616:in ‘block in Pitchfork::HttpServer#spawn\_worker’
> 
> pitchfork (0.18.1) lib/pitchfork/http\_server.rb:1219:in ‘block in Pitchfork::HttpServer#fork\_sibling’
> 
> pitchfork (0.18.1) lib/pitchfork.rb:174:in ‘block in Pitchfork.clean\_fork’
> 
> pitchfork (0.18.1) lib/pitchfork.rb:172:in ‘Kernel#catch’
> 
> pitchfork (0.18.1) lib/pitchfork.rb:172:in ‘Pitchfork.clean\_fork’
> 
> pitchfork (0.18.1) lib/pitchfork/http\_server.rb:690:in 'Pitchfork::HttpServer#sp

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [11 فبراير 2026، 9:53م UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/25 "2026-02-11T21:53:16Z")

</div>

> <https://github.com/merefield/discourse-tag-intersection-navigator/pull/8>

سمحت بعض التحسينات في النواة (core) لهذا المكون الإضافي (plugin) بأن يصبح أصغر حجمًا قليلاً 👍

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [28 مارس 2026، 2:09م UTC](https://meta.discourse.org/t/tag-intersection-navigator/368815/26 "2026-03-28T14:09:23Z")

</div>

لقد قمت بإجراء بعض الصيانة الضرورية هنا:

> <https://github.com/merefield/discourse-tag-intersection-navigator/pull/10>

ولكنني أضفت أيضًا ميزة ضرورية جدًا! 🥼

> <https://github.com/merefield/discourse-tag-intersection-navigator/pull/9>
>
> \- Added intersection-aware new-topic banner support.
> - New pre-initialize…r:
> - assets/javascripts/discourse/pre-initializers/intersection-topic-tracking.gjs
> - Extends core TopicTrackingState so incoming-topic counts are scoped to:
> - all selected intersection tags
> - current category, if present
> - current filter mode where core supports incoming counts (latest/new/unread/unseen)
> - Added system coverage for the new banner behavior.
> - spec/system/tag\_intersection\_navigator\_spec.rb
> - Verifies the banner appears only for in-scope incoming topics and excludes:
> - wrong tags
> - wrong category
> - Fixed the plugin’s composer cleanup to preserve tag objects.
> - assets/javascripts/discourse/initializers/init-tag-intersection-nav.gjs
> - This removes the plugin’s contribution to the Discourse 2026.01 tag-object deprecation by filtering out the
> sentinel allWord without coercing real tag objects back to strings

الآن يمكنك الحصول على إشعارات البانر العادية للمواضيع الجديدة دون الحاجة إلى مغادرة عرض تقاطعات الوسوم! 🚀 ⛳ مما يجعلها أكثر عملية كصفحة رئيسية أيضًا.

إذا أعجبك عملي [فكر في رعاية](https://github.com/sponsors/merefield) 🙏

[Previous page](https://meta.discourse.org/t/tag-intersection-navigator/368815.md?page=1)
