Seite 1 von 2

Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 10:54
von BrainAK
Hi,

ich habe endlich mal wieder Zeit gefunden an meinem Forum weiter zu arbeiten.
Die Umstellung von der Smarty Engine auf phpBB macht mir immer noch zu schaffen daher benötige ich eure Hilfe.

In meinem Mod kann man mehrere Kategorien eintragen in den Sendeplan eintragen. Diese stehen dann kommagetrennt in der DB 2,3,7,97 etc.
Beim editieren sollen die bereits ausgewählten Kategorien markiert sein.

Bei Smarty geht das über

Code: Alles auswählen

$markergroupselector = '';
$perm_markergrps = explode(',', $sendeplan['cat_id']);  // Kategorie IDs aus der der Sendeplan Tabelle (2,3,7,97)
$markergroups = array();
$sql = 'SELECT * FROM ' . SENDEPLAN_CAT;
$result = $db->sql_query($sql);
while ($temp = $db->sql_fetchrow($result)) {
    $selstat = '';
    if (in_array($temp['cat_id'], $perm_markergrps)) {
        $selstat = ' selected';
    }
    $markergroupselector .= '<option value="' . $temp['cat_id'] . '"' . $selstat . '>' . $temp['cat_name'] . '</option>';
}

$Smarty->assign(array(
    'SELECTMARKERGROUPS' => $markergroupselector,
)); 

Code: Alles auswählen

// Temmplate
<select name="usergroups[]" class="field" size="6" multiple>{$SELECTMARKERGROUPS}</select>
Wie dies beim phpBB funktioniert ist mir noch nicht klar. Gibt es da evtl. Beispiele den bis jetzt hab ich noch keine Lösung gefunden.

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 11:19
von Dr.Death
Hi,

die Template Zuweisung könnte so aussehen:

Code: Alles auswählen

        $template->assign_vars(array(
            'SELECTMARKERGROUPS'        => $markergroupselector,
            )
        ); 
Siehe dazu aber auch:

https://wiki.phpbb.com/Tutorial.Template_syntax
Vorlage für in phpBB3 eingebundene Seiten

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 12:26
von BrainAK
Ah Ok, doch so einfach. Dachte das wäre schwerer.

Noch ein Problem welches mit dem gleichen Mod zusammen hängt. Wenn das gelöst ist kann man über eine Veröffentlichung des Sendeplans zum DL mal nach denken.

Code: Alles auswählen

$sql = "SELECT    c.*, p.* FROM " . SENDEPLAN_CAT . " c LEFT JOIN " . SENDEPLAN_POST . " p on (c.cat_id = p.cat_id) WHERE '" . $id . "' IN (p.cat_id) ORDER BY p.post_time DESC";
In der Spalte p.cat_id stehen ebenfalls wieder Kategorie IDs durch Komma getrennt.
Rufe ich jetzt zb die Kategorie 3 auf, zeigt er mir keinen einzigen Eintrag an obwohl in der p.cat_is spalte steht 3,7,8,10,11
Dafür ist doch das IN im SQL da oder wo liegt der Fehler?

$id stammt übrigens von deinem GET Parameter der übergeben wird

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 13:34
von Miriam
Lass' Dir Dich mal die zusammengebaute Variable $sql mittels print ausgeben.

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 13:48
von BrainAK
Das wäre

Code: Alles auswählen

SELECT    c.*, p.* FROM r789_sendeplan_cat c LEFT JOIN r789_sendeplan_post p on (c.cat_id = p.cat_id) WHERE '3' IN (p.cat_id) ORDER BY p.post_time DESC

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 14:08
von Miriam
Also da paßt was nicht, denn p.cat_id soll gleichermaßen eine kommaseparierte Liste sein, als auch eine einzelne Zahl... Zumindest wenn ich der Logik Deiner Query folge.

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 14:16
von BrainAK
p.cat_id aus der Datenbank hat eine kommaseparierte Liste oder einen einzelnen Wert, jenachdem ob eine Sendung in einer Kategorie ist oder in mehreren.

Ich rufe die URL sendeplan.php?page=cat&id=3 auf und er soll mir alle Ergebnisse auflisten wo die ID 3 in der p.cat_id drinne steckt.

Sprich, eine Sendung kann in mehreren Kategorien stecken, diese wird in der DB in der Spalte p.cat_is gespeichert. Gleichzeitig wenn ich eine Kategorie 3 aufrufe, soll er mir alle Sendungen ausgeben wo die 3 in der p.cat_id steckt.

Enthällt die Spalte p.cat_id zb. nur den Wert 3, so wird die Sendung beim Aufruf der URL ohne Probeleme ausgegeben.


Als BSP nehmen wir mal dieses Forum. Man stelle sich vor ein Thema ist in mehreren Forenkategorien gespeichert und rufe ich die einzelnen Kategorien auf, soll der Beitrag dort drinne verlinkt sein.

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 14:56
von Miriam
Dein JOIN paßt so nicht zumindest nicht bei dieser IN Bedingung.
Welchen Zweck erfüllt die Tabelle SENDEPLAN_CAT?

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 15:09
von BrainAK
Diese enthällt nur die Sendungskategorien

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `r789_sendeplan_cat` (
  `cat_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `cat_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  `cat_desc` text COLLATE utf8_bin NOT NULL,
  `cat_image` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`cat_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=5 ;

INSERT INTO `r789_sendeplan_cat` (`cat_id`, `cat_name`, `cat_desc`, `cat_image`) VALUES
(3, 'News', 'Aktuelle News und Neuigkeiten', ''),
(4, 'Sendungen', 'Rund um unsere Sendungen', '');
Und wenn eine Sendung aus der r789_sendeplan_post in beiden Kategorien auftauchen soll, enthällt die Spalte cat_id aus der r789_sendeplan_post den Wert 3 und 4 also 3,4.
Wenn ich nun alle Post haben will die in Kategorie 3 ist, soll auch 3,4 berückstichtigt werden weil 3 und 4 jeweils eine eigene kategorie ist.


EDIT: WHERE FIND_IN_SET('" . $id . "',p.cat_id) war die Lösung

Re: Ausgewählte Kategorien ausgeben

Verfasst: 22.06.2014 16:17
von Miriam
Und die SQL Query sieht jetzt wie aus?