Ausgewählte Kategorien ausgeben

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
BrainAK
Mitglied
Beiträge: 18
Registriert: 15.03.2014 19:56

Ausgewählte Kategorien ausgeben

Beitrag 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.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17403
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Ausgewählte Kategorien ausgeben

Beitrag 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
BrainAK
Mitglied
Beiträge: 18
Registriert: 15.03.2014 19:56

Re: Ausgewählte Kategorien ausgeben

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Ausgewählte Kategorien ausgeben

Beitrag von Miriam »

Lass' Dir Dich mal die zusammengebaute Variable $sql mittels print ausgeben.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
BrainAK
Mitglied
Beiträge: 18
Registriert: 15.03.2014 19:56

Re: Ausgewählte Kategorien ausgeben

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Ausgewählte Kategorien ausgeben

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
BrainAK
Mitglied
Beiträge: 18
Registriert: 15.03.2014 19:56

Re: Ausgewählte Kategorien ausgeben

Beitrag 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.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Ausgewählte Kategorien ausgeben

Beitrag von Miriam »

Dein JOIN paßt so nicht zumindest nicht bei dieser IN Bedingung.
Welchen Zweck erfüllt die Tabelle SENDEPLAN_CAT?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
BrainAK
Mitglied
Beiträge: 18
Registriert: 15.03.2014 19:56

Re: Ausgewählte Kategorien ausgeben

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Ausgewählte Kategorien ausgeben

Beitrag von Miriam »

Und die SQL Query sieht jetzt wie aus?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“