هل يمكن القيام بذلك باستخدام CSS؟ تجميع الفئات في صفحة الفئات

ما أود القيام به (وأعلم أنه لا توجد إعدادات أو مجموعة ميزات مدمجة) هو استخدام CSS لتجميع الفئات في الصفحة الرئيسية.

لا أبحث عن تداخل الفئات، بل فقط تجميع بعضها معًا وإضافة عنوان فوقها ربما. أعرف أنه يمكن “فصل” الفئات الفردية باستخدام الحشو (padding)، وأعلم أنه يمكن استهداف كل فئة بمعرف الفئة (category ID) أو اسم الفئة. لذا، فإن أملِي هو القدرة على تكرار شيء يبدو مثل هذا:

أدرك أنه من أجل البساطة، يجب أن تكون الفئات مرتبة حسب الترتيب الحالي، وأن يتم استهداف كل فئة بواسطة معرف الفئة، لكنني أفكر في أنه قد يكون هناك بعض CSS يمكنه إضافة حشو بعد فئة معينة أو قبل فئة أخرى.

السؤال الكبير هو: هل توجد إمكانية لإدراج بعض النص في الحشو لإنشاء عنوان؟

الهدف من هذا هو أولاً تقسيم عرض قائمة الفئات الطويلة، وفصلها على النحو التالي: مثال

  • الفئتان 1 و2 تحت عنوان “الموظفين”

  • الفئتان 3 و4 تحت عنوان “مصادر المجتمع”

  • الفئات 5، 8، 11، 12، 13 تحت عنوان “فئات النقاش العام”

لا أريد تحويل هذه إلى فئات فرعية، فأنا أحب البنية ونظام الفئات كما هو. كل ما أريده هو عرض الفئات بشكل مختلف قليلاً في صفحة عرض الفئات.理想ًا، يكون هذا مجرد تخطيط بصري، ولا شيء يغير البنية البرمجية للمنصة.

هل لديك أي فكرة حول كيفية تحقيق ذلك؟

سيكون هذا نوعًا من التغيير الجوهري في تخطيط موقعي للتعاون في العمل.

سام، كودينغهورور، هل تعتقد أنه يمكن إنشاء خطوة تجميع في قائمة إعادة تنظيم الفئات تقوم بذلك بشكل أصلي، كخيار (تفعيل/إيقاف التجميع)؟ فقط ضع الفئات بالترتيب داخل التجميع في الصفحة الرئيسية، ويمكن أن يفصلها تلقائيًا. هل هذا في النواة (Core)، أم في إضافة (Plugin)، أم في مكون سمة (Theme component)؟

3 إعجابات

anyone? buehler.

feedback appreciated

This kind of stuff is possible in a theme component but extremely complicated. I think you would need to override templates which makes this also pretty fragile.

4 إعجابات

في وقت متأخر قليلاً :smile: ولكن ربما يحتاج شخص آخر إليها. يجب أن أذكر أن:

  • ليس كل كود CSS مطلوبًا، خاصة الحدود وألوان الخلفية لصفوف الجدول، لذا لا تتردد في تعديلها كما تحب.
  • كان عليّ تغيير التخطيط من الجدول العادي إلى flex لأنه لا يمكن استخدام الهوامش السالبة على صفوف الجدول ومشاكل تخطيط أخرى، وبشكل عام… هو أكثر مرونة :smile:
  • استبدل Category Group 1 و Category Group 2 بأسماء مجموعات الفئات المطلوبة.
  • في مثالتي استخدمت معرفات الفئات 2 و 4، لذا باستخدام أدوات مطوري Chrome لفحص العنصر (انظر الصورة أدناه)، ابحث عن معرف الفئة الصحيح واستبدل [data-category-id="2"] و [data-category-id="4"] في مثالتي بمعرفاتك.

الصق هذا داخل تبويب Common:

.category-list{
    display: flex;
    flex-direction: column;
}
.category-list thead tr{
    display: flex;
}
.category-list .topics {
    width: 95px;
    margin-left: auto;
    min-width: 95px;
    white-space: nowrap;
}
.category-list tbody tr {
    background-color: var(--primary-very-low);
    box-sizing: border-box;
    display: flex;
}
body .category-list [data-category-id="2"],body .category-list [data-category-id="4"] {
    position: relative;
    margin-top: 50px;
}
body [data-category-id="2"]::before {
    content: "Category Group 1";
}
body [data-category-id="4"]::before {
    content: "Category Group 2";
}
body [data-category-id="2"]::before,body [data-category-id="4"]::before {
    position: absolute;
    top: -35px;
    left: 0;
    font-weight: bold;
    font-size: 15px;
    text-transform: uppercase;
    color: var(--primary-medium);
}

الصق هذا داخل تبويب Desktop:

.category-list tbody tr {
    margin-bottom: 15px;
    border: 1px solid var(--primary-low);
}

وهذا داخل تبويب Mobile:

body .category-list-item.category .posts {
    width: auto;
    margin-left: auto;
}
body .category-list-item>footer,body .subcategory-list-item>footer{
    background-color: var(--primary-very-low);
}
.categories-list .category-list th {
    padding: 0;
}
.category-list-item>footer .category-stat, .subcategory-list-item>footer .category-stat {
    float: right;
}
.category-list-item>footer .category-stat:first-child, .subcategory-list-item>footer .category-stat:first-child{
    margin-right: 0;
}
body .category-list-item.category tr:first-of-type{
    padding: 10px 0;
    border-bottom: 1px solid var(--primary-low);
}
body tr.category-topic-link:last-of-type{
    border-bottom: 1px solid var(--primary-low);
}
body .categories-list .category-list th {
    padding: 0;
}
body .category-list-item {
    border-top: none;
    margin-bottom: 10px;
}
body .category-list-item {
    padding: 0;
    border: 1px solid var(--primary-low)!important;
}
.category-list-item>footer, .subcategory-list-item>footer {
    border-top: none;
}

وهكذا يبدو الشكل على شاشات سطح المكتب والهاتف المحمول:

10 إعجابات

مرحبًا كوس،

معلومات في غاية الإثارة؛ شكرًا لك على المشاركة. وفي نفس السياق (أي السعي للحصول على عرض أفضل)، نحاول وضع صفحة ووردبريس ذات عرض محدد أمام الخطاب، ونود “إرسال” أسماء الفئات إلى هذه الصفحة، مثل الفئات التي تلقت ردًا، أو تلك التي اختارها المستخدم، أو فئة معينة. هل تعتقد أن هذا ممكن؟ وإذا كان كذلك، فكيف يمكن تحقيق ذلك؟

إعجاب واحد (1)

أخشى أنه لا يمكنك فعل ذلك باستخدام CSS فقط. ربما يكون إضافة ووردبريس ديوسرس هو ما تحتاجه. بالإضافة إلى ذلك، فإن اختصارات ووردبريس ديوسرس ضرورية أيضًا.
نحن نستخدمها بالفعل على موقعنا الإلكتروني الخاص بووردبريس وتعمل بشكل ممتاز حتى الآن. إليك كيف تبدو الإضافة في أداة الشريط الجانبي:

إعجابَين (2)

@sam، استجابة @cosdesign تعمل. هل توجد طريقة لدمج هذا في القوائم الأساسية بحيث يمكن للمستخدمين إبطاله افتراضيًا، ثم تعيين الرؤوس في لوحة الإدارة لعناوين رؤوس المجموعات، وفي صفحة سمات كل فئة، اختيار من قائمة منسدلة لرؤوس الأقسام المفعلة من لوحة الإدارة بحيث تقع الفئة ببساطة تحت الرأس.

لا ينبغي أن يكون هذا صعبًا بشكل مفرط لإضافته إلى المنصة، وسيحسن بشكل كبير التثبيتات الكبيرة متعددة أدوار المستخدمين والمجموعات، ومتعددة الفئات.

إعجاب واحد (1)

هذا النوع من التجميع مدعوم الآن في نواة Discourse:

اختر “الفئات الفرعية مع المواضيع المميزة” كـ “نمط صفحة الفئة لسطح المكتب”:

ثم ستبدو صفحة الفئات الخاصة بك شيئًا كهذا:

5 إعجابات

هل من الممكن فعل ذلك باستخدام RTL؟ لقد حاولت لكنني فشلت :broken_heart:

هذا منطقي. يتم قلب أنماط Discourse الأساسية لإنشاء إصدار RTL هنا: discourse/lib/stylesheet/compiler.rb at main · discourse/discourse · GitHub. لا أعتقد أن ملفات CSS التي تضيفها السمات يتم تجميعها لإنشاء إصدار RTL. إذا كان هذا صحيحًا، فهذا يفسر المشكلات التي واجهتها مع السمات عند استخدام تخطيط RTL.

يمكنك تأكيد ذلك عن طريق إضافة بعض قواعد CSS التي تحتوي على اتجاه إلى سمة موقعك، ثم زيارة الموقع بلغة RTL ومعرفة ما إذا كان الاتجاه قد تم قلبه. لا أعتقد أنه سيتم قلبه.

على سبيل المثال، إذا أضفت هذا إلى السمة الخاصة بك:

.category-list-item footer .category-stat, .subcategory-list-item footer .category-stat {
    float: right;
}

لا أعتقد أنه سيتم تحويله إلى هذا:

.category-list-item footer .category-stat, .subcategory-list-item footer .category-stat {
    float: left;
}

أتفق معك، ما زلت مرتبكًا بشأن استخدام الكود أعلاه :confused:

أي اقتراحات؟

هل تعرف مثالاً لموضوع لا يعمل مع RTL؟ إذا كان الأمر كذلك، فانشر رابطًا للموضوع هنا وسأختبر نظريتي وأشرح ما يحدث خطأ بعد اختباره.

تعديل: إليك شرح للمشكلة:

بالنسبة لملفات CSS الموجودة في قاعدة كود Discourse الرئيسية، يتم إنشاء CSS الخاص بـ RTL عن طريق “قلب” معظم قواعد CSS التي تعتمد على اتجاه تخطيط الموقع. على سبيل المثال، يتم قلب padding-left إلى padding-right. يتم ذلك باستخدام أداة RTLcss: GitHub - discourse/rtlcss: A wrapper around the rtlcss npm package to flip CSS direction in Ruby.

المشكلة هي أن سمات Discourse لا يتم قلب قواعد CSS الخاصة بها. هذا يعني أنه إذا كان للموضوع قواعد CSS تحدد اتجاهًا، فسيكون الاتجاه هو نفسه عند استخدام لغة RTL كما هو الحال عند استخدام لغة LTR. إليك مثال بسيط على ذلك:

عند استخدام السمة مع واجهة RTL، لا يتم قلب padding-left: 8px; إلى padding-right: 8px; هذا يسبب مشكلة بسيطة في المحاذاة. أنا متأكد من وجود أمثلة لمشاكل أكبر تحدث عند استخدام السمات مع لغة RTL.

وينطبق الشيء نفسه على أي CSS تضيفه إلى سمة Discourse افتراضية في محرر السمات. إليك مثال باستخدام الكود من هذا الموضوع: Can it be done with CSS? Grouping categories on category page - #4 by cosdesign.

هذه قاعدة من CSS تقوم بتعيين اتجاه:

body [data-category-id="2"]::before,body [data-category-id="4"]::before {
    position: absolute;
    top: -35px;
    left: 0; // this needs to be changed
    font-weight: bold;
    font-size: 15px;
    text-transform: uppercase;
    color: var(--primary-medium);
}

مع لغة RTL، هذه هي المشكلة:

إذا كانت هذه القاعدة في ملف CSS أساسي لـ Discourse، فسيتم تحويل left: 0; تلقائيًا إلى right: 0; عند تحديد لغة RTL. نظرًا لأن CSS تتم إضافته إلى سمة، تحتاج إلى تعديله يدويًا إلى هذا:

body [data-category-id="2"]::before,body [data-category-id="4"]::before {
    position: absolute;
    top: -35px;
    right: 0; // changed to the proper position for RTL layouts
    font-weight: bold;
    font-size: 15px;
    text-transform: uppercase;
    color: var(--primary-medium);
}

يضيف Discourse فئة rtl إلى علامة html عند استخدام تخطيط RTL. يمكن لمطوري السمات استخدام هذه الفئة لجعل سماتهم تعمل مع كل من تخطيطات LTR و RTL. هذا يعمل، وأعتقد أنه صحيح، ولكن ربما لا تحتاج عبارة left: auto إلى أن تكون هناك.

body [data-category-id="2"]::before,body [data-category-id="4"]::before {
    position: absolute;
    top: -35px;
    left: 0;
    font-weight: bold;
    font-size: 15px;
    text-transform: uppercase;
    color: var(--primary-medium);
}
/* Fix positioning for rtl layouts */
.rtl body [data-category-id="2"]::before,.rtl body [data-category-id="4"]::before {
    right: 0;
    left: auto;
}

لست متأكدًا مما إذا كان يجب على المطورين اتباع هذا النهج مع سماتهم. إنه يستغرق وقتًا طويلاً ويمكن أن يؤدي إلى أخطاء ومشكلات في الصيانة. ربما يمكن لـ Discourse تجميع بعض السمات التي يمكن أن تفكر في توفير إصدار RTL. قد يكون من المفيد اختبار هذا النهج مع عدد قليل منها:

require "rtlcss"

Rtlcss.flip_css("theme_css")

كان من المفترض أن يكون هذا إجابة قصيرة :slight_smile: إذا كان ما كتبته صحيحًا ولم يتم التعامل معه في موضوع آخر، فربما يجب نقله إلى موضوع جديد.

قد تفعل هذه Theme component ما تريده. أو قد تكون أساسًا جيدًا للنظر في الكود للحصول على أفكار.

“صناديق الفئات + المجموعات الحديثة” كما هو مستخدم في سمة Air تعمل بشكل جيد.