da ich nicht so richtig weiss wohin damit, hau ichs mal hier rein.
wie der titel schon sagt, gehts um verschachtelte templates.
folgender hintergrund:
- es existiert eine struktur auf artikel-/templatebasis
- bislang werden die artikel auf einer seite untereinander dargestellt
- 1-n artikel = seiteninhalt
soweit so gut. nun möchte ich als add-on eine möglichkeit einfügen,
2-x artikel in einem template nebeneinader darzustellen. der aufbau der
seite sähe dann so aus:
*artikel1*
*artikel2* | *artikel3*
*tabelle*
*artikel*
zu diesem zweck hab ich folgendes gecodet (versuchsweise)
das ganze berücksichtigt im moment noch nicht, dass auf einer seite
mehrfach verschachtelte templates auftauchen können, wäre aber auch
kein problem.
nun zu meinen fragen:
- ist das generell ein schlauer ansatz, das so ^^ anzugehen?
- lässt sich der code noch optimieren?
wie der titel schon sagt, gehts um verschachtelte templates.
folgender hintergrund:
- es existiert eine struktur auf artikel-/templatebasis
- bislang werden die artikel auf einer seite untereinander dargestellt
- 1-n artikel = seiteninhalt
soweit so gut. nun möchte ich als add-on eine möglichkeit einfügen,
2-x artikel in einem template nebeneinader darzustellen. der aufbau der
seite sähe dann so aus:
*artikel1*
*artikel2* | *artikel3*
*tabelle*
*artikel*
zu diesem zweck hab ich folgendes gecodet (versuchsweise)
PHP-Code:
<pre>
<?
/*
CREATE TABLE artikel (
id int(11) NOT NULL auto_increment,
menuid int(11) NOT NULL default '0',
pos tinyint(4) NOT NULL default '0',
typ varchar(10) NOT NULL default '',
tpl tinyint(4) NOT NULL default '0',
text varchar(30) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM;
#
# Daten für Tabelle `artikel`
#
INSERT INTO artikel VALUES (1, 1, 1, 'art', 101, '1.artikel');
INSERT INTO artikel VALUES (2, 1, 5, 'tab', 0, 'tabelle');
INSERT INTO artikel VALUES (3, 1, 3, 'art', 102, '2.artikel');
INSERT INTO artikel VALUES (4, 1, 4, 'art', 105, '3.artikel');
INSERT INTO artikel VALUES (5, 2, 1, 'art', 101, '1.artikelmenu2');
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `schachtel`
#
CREATE TABLE schachtel (
sid int(11) NOT NULL default '0',
menuid int(11) NOT NULL default '0',
artid int(11) NOT NULL default '0',
spos tinyint(4) NOT NULL default '0',
stpl tinyint(4) NOT NULL default '0',
PRIMARY KEY (sid),
UNIQUE KEY artid (artid),
KEY sid (sid)
) TYPE=MyISAM;
#
# Daten für Tabelle `schachtel`
#
INSERT INTO schachtel VALUES (1, 1, 4, 1, 127);
INSERT INTO schachtel VALUES (2, 1, 1, 1, 127);
*/
$conn = mysql_connect($server, $user, $pass);
$select = mysql_select_db($dbank,$conn);
$menuid = 1;
// artikel und schachtel sind über die artikel-id verbunden
$result = mysql_query("select a.*, s.*
FROM artikel a LEFT JOIN schachtel s ON a.id = s.artid
WHERE a.menuid=".$menuid." ",$conn) or die(mysql_error());
while($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
$ausgabe[] = $row;
if(!empty($row['spos'])) // hilfsarray zur sortierung aufbauen
{
$sorter[] = array($row['id'],$row['spos'],"s"); // die position aus schachtel toppt die
} // position aus artikel
else
{
$sorter[] = array($row['id'],$row['pos'],"n");
}
}
foreach($sorter as $v) {$s0[]=$v[1]; $s1[]=$v[0]; } // sortierschlüssel erstellen
print_r($sorter); // ausgabe unsortiert
array_multisort($s0, SORT_ASC, SORT_REGULAR, $s1, SORT_ASC, SORT_REGULAR,$sorter);
print_r($sorter); // ausgabe sortiert nach position und
// (falls doppelte spos) nach artikelid
// innerhalb von spos
/* ab hier gehen beide arrays in eine funktion und basteln die seite
in der reihenfolge, wie $sorter die position einzelner artikel vorgibt */
?>
</pre>
mehrfach verschachtelte templates auftauchen können, wäre aber auch
kein problem.
nun zu meinen fragen:
- ist das generell ein schlauer ansatz, das so ^^ anzugehen?
- lässt sich der code noch optimieren?
Kommentar