"versteckte Kategorie" benötigt

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

"versteckte Kategorie" benötigt

Post by stm999999999 »

Hallo,

ich glaube :) , ich brauche eine "verstecke Kategorie":

Was will ich?

Unsere Pfarrei besteht aus zwei Gemeindeteilen mit eigener Homepage. Für die eine mache ich ja gerade die Website mit s9y, die andere wird es vielleicht auch bekommen. Oder auch nicht, egal.

Auf jeden Fall gibt es manche Info, die übergeordnet wichtig ist, etwa wenn das gemeinsame, aber in meinem Gemeindeteil liegende Pfarrbüro einen Tag nicht öffnet, oder so.

Das soll nun nicht doppelt eingegeben werden müssen; ich dachte mir, daß ich auf der zweiten Seite einfach per Javascript-Plugin oder php (http://www.s9y.org/204.html) einen Teil "Wichtiges für die gesamte Pfarrei" mit den Überschriften solcher Artikel ausgebe.

Dafür muß ich diese aber wohl in eine Kategorie "wichtiges" oder so einsortieren - zusätzlich zur normalen Einordnung in meinem Blog - damit ich sie gezielt für diese Funktion ansprechen kann.

Erstmal kein Problem, aber ich würde ungerne diese Kategorie in meinem Blog anzeigen! Ich brauche also eine "versteckte" Kategorie - denke ich:

Das bedeutet für mich insbesondere, daß

* bei der Ausgabe "Dieser Artikel ist in den Kategorien x, y und z" diese besondere Kategorie NICHT auftauchen darf.

* es ist kein Problem, daß diese Artikel in der normalen Artikelübersicht auftauschen, denn sie sollen ja eh immer auch einer normalen Kategorie sein

* die Kategorie sollte grundsätzlich nicht in dem Seitenleisten-Plugin "Kategorien" erscheinen. Aber so richtig brauche ich das eigentlich nicht, weil ich eh über die statischen Seitennavigation gehe.


Also eigentlich brauche ich nur den ersten Punkt, irgendwelche Vorschläge?

Oder eine komplett andere Idee?
Last edited by stm999999999 on Mon Nov 27, 2006 1:08 am, edited 1 time in total.
Ciao, Stephan
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

Post by stm999999999 »

Andere Idee:

könnte ich vielleicht - sie es per javascript-Variante oder per php - irgendwie auf den Inhalt eines "Freie Felder"/"custom fields" zur Selektion verwenden?
Ciao, Stephan
Leon
Posts: 3
Joined: Tue Nov 21, 2006 2:23 pm

Post by Leon »

Hi Stephan,

dein Wunsch kommt auch mir sehr entgegen, da ich zwei Kategorien mit sehr ähnlichen Inhalten verwalten möchte, wovon die eine nur zu "internen" Zwecken verwendet werden soll.

Vielleicht könnten man - das wäre wohl die eleganteste Lösung - in der Kategorie-Verwaltung einen kleinen Schalter ergänzen: Kategorie anzeigen (Ja/Nein)?

tschau! Leon
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Hm, so ganz überzeugt bin ich noch nicht von dem allgemeinen Zweck einer "Kategorie-Versteckung". Die Idee mit dem "Kategorie versteckt" Haken scheint mir für einen zukünftige Implementation aber schon ganz gut -- Patches werden gerne angenommen, benötigen aber halt auch eine Änderung am DB-Schema (zusätzliche Spalte in der Kategorienliste) ;)

Was man machen kann ist sein entries.tpl und plugin_categories.tpl so anpassen, dass man IF-Abfragen in den Kategorie-Loops einbaut und Kategorien mit speziellem Namen einfach überspringt.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

Post by stm999999999 »

garvinhicking wrote: Was man machen kann ist sein entries.tpl und plugin_categories.tpl so anpassen, dass man IF-Abfragen in den Kategorie-Loops einbaut und Kategorien mit speziellem Namen einfach überspringt.
Hm, ok, mal gucken - eine typische entires.tpl

Code: Select all

         
{if $entry.categories}
   {$CONST.IN} 
     {foreach from=$entry.categories item="entry_category" name="categories"}
<a href="{$entry_category.category_link}">{$entry_category.category_name|@escape}</a>
         {if not $smarty.foreach.categories.last} / {/if}
  {/foreach}
{/if}
Nach dem "{foreach from=$ent..." kann man natürlich recht leicht "$entry_category.id" gegen ausgewählte Kategorien prüfen. Nur wird ja hinten dran noch ein optischer Trenner, hier "/", eingefügt. Wenn nun drei Kategorien A, B , C ein Artikel ist, und C die versteckte Kategorie ist, dann wird bei der vorletzten, also B geschaut "if not $smarty.foreach.categories.last}" - da sieht Smarty ja nicht, daß die nächse Kategorie C "versteckt" ist. Von daher wäre es vielleicht doch hilfreich, wenn bereits bei der Bereitstellung der Daten aus der Datenbank eine versteckte Kategorie nicht übergeben wird:

Das wäre doch was für das serendipity_event_categorytemplates? Obwohl ich nicht weiß, ob ein Plugin die Ausgabe/Erzeugung von $entry.categories beeinflussen kann.
Ciao, Stephan
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Es gibt noch keinen Hook, Kategorien zu verstecken. Entweder braucht man also einen Hook oder ein neues Datenbankfeld in der Kategorie-Tabelle.

Was das foreach angeht: Da müsstest Du dann zwei foreach-schleifen bauen und dann in jedem loop eine ID mit der ID der letzten KAtegorie eingeben. Diese Variable prüfst Du dann anstelle von .last.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

Post by stm999999999 »

Es gibt noch keinen Hook, Kategorien zu verstecken. Entweder braucht man also einen Hook oder ein neues Datenbankfeld in der Kategorie-Tabelle.
Was heißt "man braucht einen Hook"? Irgendwo hackt es gerade bei mir. Wir brauchen doch so oder so ein neues Datenbankfeld, oder wo willst Du abspeichern, ob eine Kategegorie nun versteckt sein soll, oder nicht?
Was das foreach angeht: Da müsstest Du dann zwei foreach-schleifen bauen und dann in jedem loop eine ID mit der ID der letzten KAtegorie eingeben. Diese Variable prüfst Du dann anstelle von .last.
Ich glaub' ich steh' auf'm Schlauch :-(
Ciao, Stephan
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
Was heißt "man braucht einen Hook"? Irgendwo hackt es gerade bei mir. Wir brauchen doch so oder so ein neues Datenbankfeld, oder wo willst Du abspeichern, ob eine Kategegorie nun versteckt sein soll, oder nicht?
Die Liste der Kategorien ist eine interne s9y Funktion, die nicht durch Plugins beeinflusst werden kann.

Ergo müsste man einen plugin-hook dort einfügen. Da die kategorienliste aber an mehreren stellen erzeugt wird, würde so ein pluginhook die performance auch spürbar drücken. Daher wäre das neue Datenbankfeld sinniger.

Ein plugin könnte dies in einer unabhängigen tabelle speichern.

Also ein neues Datenbankfeld werde zumindest ich erst für die version 1.2 vorsehen; daran werde ich erst Mitte Januar anfangen zu arbeiten. Bis dahin müsstest Du also die verschachtelte-Foreach-Sache ausprobieren. Wie genau das mit Smarty geht kann ich nicht sagen, in PHP wäre es:

Code: Select all

<?php
foreach ($categories AS $category) {
 if (stristr($category['category_name'], 'versteckt')) continue;
 $last_category = $category['category_id'];
}

foreach($categories AS $category) {
 if (stristr($category['category_name'], 'versteckt')) continue;
 echo $category['category_name'];
 if ($last_category != $category['category_id']) echo ', ';
}
Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

Post by stm999999999 »

Ach _das_ meinst Du mit "verschachtelt"! Ich hatte da an "ineinander verschachtelt" gedacht und nicht an hintereinander.

Aber nun mal ans Coden:

Code: Select all

 syntax error: (secure mode) 'stristr' not allowed in if statement
Hm. also geht das schon mal nicht ... weiterbasteln ... es scheint was funktionierendes herauszukommen:

Code: Select all

                
{if $entry.categories}
 {$CONST.IN} 
                   
{foreach from=$entry.categories item="entry_category" name="categories"}
  {if not ($entry_category.category_name eq $hidden_category) }
    {assign var="last_category" value=$entry_category.categoryid}
  {/if}
{/foreach}

{foreach from=$entry.categories item="entry_category" name="categories"}

  {if not ($entry_category.category_name eq $hidden_category) }
							     
  <a href="{$entry_category.category_link}">{$entry_category.category_name|@escape}</a>
   {if not ($last_category eq $entry_category.categoryid)} / {/if}
  {/if}
{/foreach}
  {/if}
und in der config.inc.php

Code: Select all

$serendipity['smarty']->assign('hidden_category', 'VERSTECKT');
oder wenn man keine config.inc.php hat, dann in der entries.tpl:

Code: Select all

{assign var="last_category" value="VERSTECKT"}
Ciao, Stephan
Post Reply