Seite 1 von 2

Komische Ausgabe im Script

Verfasst: 24.12.2008 20:11
von fragz
HiHo,

Ich Arbeite gerade an einer kleinen Page und nutze eine Standalone Version der phpbb3 Template Engine und komme nicht weiter. Unzwar würde ich gerne Download Ketegorien erstellen.
Soweit klappt auch alles. 2 Tabellen erstellt

Einmal cat mit ID und title für die kategorie und einmal download mit CAT_ID (zum zuweisen der Kategorie) titel und autor

Mein Code schaut folgendermassen aus

Code: Alles auswählen

$sql = 'SELECT u.ID, u.title, t.CAT_ID, t.title FROM
    download_cat AS u,
    download AS t WHERE u.ID=t.CAT_ID';

$result = db_query($sql);
while ($row = mysql_fetch_assoc($result)) {
$template->assign_block_vars('download', array(
        'ID'        => $row['CAT_ID'],
        'TITLE'     => $row['title'],
    ));

} 
und im template habe ich

Code: Alles auswählen

<!-- BEGIN download -->
{download.ID} {download.TITLE}<br />
    <!-- END download -->
Die Ausgabe ist

1 - Topsite Mod

3 - Uservideo Mod

1 - topsite2
Es sollte aber lauten
1 - Topsite Mod
topsite2
3 - Uservideo Mod
1 und 3 sind jeweils die Kategorien. Topsite Mod und topsite haben jeweils als CAT_ID die 1 eingetragen.
Was ist daran falsch. Was habe ich falsch gemacht den er holt sich nur die Daten aus der download tabelle

Verfasst: 24.12.2008 23:52
von piero
zur reihenfolge: die daten werden so ausgegeben wie sie in der datenbank stehen...
um sie zu sortieren kannst du in sqlcode ORDER BY benutzen...

Code: Alles auswählen

$sql = 'SELECT u.ID, u.title, t.CAT_ID, t.title FROM
    download_cat AS u,
    download AS t WHERE u.ID=t.CAT_ID ORDER BY t.CAT_ID, t.title DESC'; 
damit wird zuerst nach der kategorie sortiert und dann nach titel sortiert...


damit die 1 vor "topsite2" verschwindet, müsstest du was in php machen..

Verfasst: 25.12.2008 15:14
von fragz
HiHo,

Thx, jetzt werden die nach Kategorie auf gelistet aber leider och nicht so wie ich es gerne hätte.

phpBB2
topsite

phpBB2
topsite2

orion
topsite3
lauten soll es
phpBB2
-----topsite
-----topsite2

orion
-----topsite3
Ich habe bereits einiges versucht aber nix scheint zu klappen

Verfasst: 27.12.2008 16:36
von piero
moment mal...

du speicherst das:
phpBB2
...
orion
...
mit dem zusammen:
-----topsite
-----topsite2
...
-----topsite3
in der gleichen tabelle oder ohne unterscheidung ab? (unterschiede kann man zB mit einem speziellen feld setzen... aber besser ist eine zweite tabelle)

Verfasst: 27.12.2008 17:33
von fragz
HiHo,

Nene, die Kategorien und DL's werden in 2 Tabellen gespeichert

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS download_cat (
  ID mediumint(8) unsigned NOT NULL auto_increment,
  title varchar(100) collate utf8_bin NOT NULL default '',
  PRIMARY KEY  (ID)
)

CREATE TABLE IF NOT EXISTS `download` (
  `ID` mediumint(8) unsigned NOT NULL auto_increment,  <<< ID des Download
  `CAT_ID` mediumint(8) unsigned NOT NULL,  <<< ID der Kategorie
  `dl_title` varchar(100) collate utf8_bin NOT NULL default '',
  `inhalte` TEXT collate utf8_bin NOT NULL default '',
  `autor` varchar(100) collate utf8_bin NOT NULL default '',
  PRIMARY KEY  (`ID`)
)
Ich habe das jetzt so hinbekommen das ich die Kateorien als Link habe und erst beim Klick auf die jeweilige Kategorie werden die dazu gehörigen dl angezeigt. Leider ist dies nicht das was ich will.

Wie gesagt, die Ausgabe ist
phpBB2
topsipte

phpBB2
topsipte2

orion
topsite3
Gerne hätte ich es so
phpBB2
-----topsite
-----topsite2

orion
-----topsite3
Hier mal die ganze sql abfrage

Code: Alles auswählen

$sql = 'SELECT u.ID, u.title, t.CAT_ID, t.dl_title FROM
    download_cat AS u,
    download AS t WHERE u.ID=t.CAT_ID ORDER BY t.CAT_ID, u.ID DESC';

$result = db_query($sql);
while ($row = mysql_fetch_assoc($result)) {
$template->assign_block_vars('download', array(
        'CAT_TITLE'        => $row['dl_title'],
        'TITLE'     => $row['title'],
    ));
}

Verfasst: 28.12.2008 02:39
von piero
versuchs mal mit dem (ungetestet)

Code: Alles auswählen


$sql = 'SELECT ID, title FROM download_cat ORDER BY ID DESC';
$result = db_query($sql);

$download = array();
while ($row = mysql_fetch_assoc($result)) {
$download[$row['ID']] = array(
	'TITLE'	=> $row['title']
    );
}

$sql = 'SELECT title, CAT_ID FROM download ORDER BY ID DESC';
$result = db_query($sql);


while ($row = mysql_fetch_assoc($result)) {
$download[$row['CAT_ID']] = array(
	'SITE' => array($row['title'])
    );
}

$template->assign_vars(array(
    'download' => $download
));
die abfragen kann man sicher noch optimieren....

und das kommt ins template: (auch ungetestet)

Code: Alles auswählen

<!-- BEGIN download -->
{download.TITLE}<br />
<!-- BEGIN download.SITE -->
-------- {download.SITE.TITLE} <br />
<!-- END download.SITE -->

<!-- END download -->

falls das nicht geht probier das mal aus:

Code: Alles auswählen

<!-- BEGIN download -->
{download.TITLE}<br />
<!-- BEGIN SITE -->
-------- {SITE.TITLE} <br />
<!-- END SITE -->

<!-- END download -->

laut diesem beitrag wäre das richtig

Verfasst: 28.12.2008 11:40
von fragz
HiHo,

Ne leider nicht, die erste Variante bringt nen Fehler
Parse error: syntax error, unexpected '=' in xxxxxxxxx\include\template.php(128) : eval()'d code on line 5
und der 2 code gibt garnix aus

Re: Komische Ausgabe im Script

Verfasst: 01.01.2009 07:03
von fragz
HiHo,

Ich kann es doch nicht sein lassen :D Ihr kennt das sicherlich

Ok, jetzt werden die Kategorien ausgegeben, aber nur die Kategorien ohne die Dazu gehörigen Downloads. Wie kann ich dies ändern?
Hier nochmal mein Code

Code: Alles auswählen

$sql = 'select ID, title from download_cat';
$result = db_query($sql);
while ($row = mysql_fetch_assoc($result)) {
$template->assign_block_vars('cat', array(
        'CAT_TITLE'        => $row['title'],
    ));
    
    }
    
    $sql1 = 'select CAT_ID, dl_title from download where CAT_ID = ID';
    $result1 = db_query($sql1);
    while ($row1 = mysql_fetch_assoc($result1)) {
$template->assign_block_vars('download', array(
        'DL_TITLE'     => $row1['dl_title'],
    ));
} 

Code: Alles auswählen

<!-- BEGIN cat -->
{cat.CAT_TITLE}
    <!-- END cat -->
    <!-- BEGIN download -->
{download.DL_TITLE}
<!-- END download -->

Re: Komische Ausgabe im Script

Verfasst: 12.01.2009 23:43
von fragz
Vorsichtig push

Re: Komische Ausgabe im Script

Verfasst: 13.01.2009 00:01
von tas2580
Versuch mal

Code: Alles auswählen

$sql = 'select CAT_ID, dl_title from download';
$result = db_query($sql);
for ($i = 0; $row = $db->sql_fetchrow($result); $i++)
{
    $dl[$i]['CAT_ID'] = $row['CAT_ID'];
    $dl[$i]['dl_title'] = $row['dl_title'];
} 


$sql = 'select ID, title from download_cat';
$result = db_query($sql);
while ($row = mysql_fetch_assoc($result)) 
{
    $template->assign_block_vars('cat', array(
            'CAT_TITLE'        => $row['title'],
    ));
    for ($i = 0; isset($dl[$i]['CAT_ID']); $i++)
    {
        if($dl[$i]['CAT_ID'] == $row['ID'])
        {
            $template->assign_block_vars('cat.download', array(
                    'DL_TITLE'     => $dl[$i]['dl_title'],
            ));
        }
    }
} 

Code: Alles auswählen

<!-- BEGIN cat -->
	{cat.CAT_TITLE}
    <!-- BEGIN download -->
		{download.DL_TITLE}
	<!-- END download -->
<!-- END cat -->
Ich hab es zwar nicht getestet, aber so ungefähr müsste es funktionieren.

Du solltest übrigens SQL Abfragen nicht verschachteln, also in der while-Schleife der ersten Abfrage eine weitere Abfrage machen da das sehr schnell ziemlich Datenbanklastig werden kann.

Gruß Tobi