What I’d like to do (as I know there’s no baked in setting or feature set) is use CSS to group categories on the home page.
I’m not looking to nest categories, but just group some together and possibly put a header on them. I know the individual categories can be “separated” with padding, and I know each category can be targeted by category ID or category name. So what I’m hoping is to be able to replicate something that looks like this:
I realize for simplicity, the categories would have to be in their sorted order, and each category targeted by catediry_id, but I’m thinking that there’s possibly some CSS that can throw padding after one category or before another.
The big question is there the ability to insert some text in the padding to create a header?
The propose of this is to first break up the long category list view, but separate: example
category 1-2 under “staff” header
Category 3-4 under “community resources)
categories 5,8,11,12,13 “under general discussion categories”
I don’t want to make these sub categories, I like the structure and category system just as it is. All I want to do is display the categories a little differently on the categories view page. Ideally this is just a visual layout, NOTHING to change with the library structure of the platform.
Any idea how to make this happen?
This would be kind of a game changer for my work collaboration site’s layout.
Sam, codinghorror, do you think there would be a way to create a grouping step in the category reorganization menu that could do this natively, say as an option (grouping on/off).just put the categories in order within main page grouping and it could automatically separare them. In core, plugin or a theme component?
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.
A bit late but maybe someone else needs it. I must mention that:
Not all the CSS code is required, especially the borders and the background colors for table rows, so feel free to adjust them as you like.
I had to change the layout from the regular table into flex cause you can’t have negative margins on table rows and other layout issues, and well…is more flexible
Replace Category Group 1 and Category Group 2 with your desired category group names
In my example I’ve used the category ID’s 2 and 4, so using chrome dev tools to inspect ( see pic below), find the right category id and replace [data-category-id="2"] and [data-category-id="4"] in my example with your id(s).
Hi Cos
]very interesting; thank you for sharing. in the same spirit (that of obtaining a better presentation, we are trying to put, in front of discourse, a wordpress page with a specific presentation and we would like to "send on this page, category names, for example those which have received a response , those chosen by the user, or then a determinate category; do you think this is possible and if so how?
I’m afraid you can’t do that just by CSS. Maybe the WordPress Discourse plugin is what you need. In addition to this, the wp discourse shortcodes is also a must.
We are already using it on our WordPress website and it works great so far. This is how the plugin looks in the sidebar widget:
@sam, @cosdesign’s response works. is there any way to bake this into core’s menus so users can leave it off by default, but then set the headers in the admin panel for group header titles, and in each category’s attributes page, select from a dropdown of the enabled section headers from the admin panel so the category just falls under the header.
This shouldn’t be terribly difficult to add to the platform and would really improve large multi user role and group, multi category installations
Ha senso. I fogli di stile principali di Discourse vengono invertiti per creare una versione RTL qui: discourse/lib/stylesheet/compiler.rb at main · discourse/discourse · GitHub. Non credo che i file CSS aggiunti dai temi vengano compilati per creare una versione RTL. Se ciò è corretto, ciò spiegherebbe i problemi che hai riscontrato con i temi quando viene utilizzato un layout RTL.
Potresti confermarlo aggiungendo alcune regole CSS che contengono una direzione al tema del tuo sito, quindi visita il sito con una locale RTL e vedi se la direzione è stata invertita. Non credo che verrà invertita.
Conosci un esempio di tema che non funziona con RTL? Se sì, pubblica qui un link al tema e testerò la mia teoria e spiegherò cosa sta andando storto dopo averlo testato.
Il problema è che i temi di Discourse non hanno le loro regole CSS invertite. Ciò significa che se un tema ha regole CSS che specificano una direzione, la direzione sarà la stessa quando viene utilizzata una lingua RTL rispetto a quando viene utilizzata una lingua LTR. Ecco un piccolo esempio:
Quando il tema viene utilizzato con un’interfaccia RTL, padding-left: 8px; non viene invertito in padding-right: 8px;. Questo causa un piccolo problema di allineamento. Sono sicuro che ci sono esempi di problemi più grandi che si verificano quando i temi vengono utilizzati con una lingua RTL.
Se quella regola fosse in un file CSS principale di Discourse, left: 0; verrebbe automaticamente convertito in right: 0; quando viene selezionata una lingua RTL. Poiché il CSS viene aggiunto a un tema, è necessario modificarlo manualmente in questo modo:
body [data-category-id="2"]::before,body [data-category-id="4"]::before {
position: absolute;
top: -35px;
right: 0; // cambiato nella posizione corretta per i layout RTL
font-weight: bold;
font-size: 15px;
text-transform: uppercase;
color: var(--primary-medium);
}
Discourse aggiunge una classe rtl al tag html quando viene utilizzato un layout RTL. Gli sviluppatori di temi potrebbero utilizzare questa classe per far funzionare i loro temi sia per i layout LTR che RTL. Questo funziona, e penso sia corretto, ma forse la dichiarazione left: auto non è necessaria.
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);
}
/* Corregge il posizionamento per i layout rtl */
.rtl body [data-category-id="2"]::before,.rtl body [data-category-id="4"]::before {
right: 0;
left: auto;
}
Non sono sicuro se gli sviluppatori debbano adottare questo approccio con i loro temi. Richiede tempo e potrebbe portare a errori e problemi di manutenzione. Forse Discourse potrebbe compilare alcuni temi, o considerare di fornire una versione RTL. Potrebbe valere la pena testare questo approccio con alcuni di essi:
require "rtlcss"
Rtlcss.flip_css("theme_css")
Questa doveva essere una risposta breve Se quello che ho scritto è corretto e non è stato trattato in un altro argomento, forse dovrebbe essere spostato in un nuovo argomento.