Seite 1 von 2
Funktionen verschachteln?
Verfasst: Di 29.Mär, 2005 22:47
von shadowrider
ist es irgendwie möglich, zwei Funktionen folgender Art zu verschachteln, also erst soll die switch_user_logged_in, dann die last_seen_row greifen?
Code: Alles auswählen
<!-- BEGIN switch_user_logged_in -->
<!-- BEGIN last_seen_row -->
Verfasst: Di 29.Mär, 2005 23:19
von oxpus
Dann musst Du in der entsprechenden PHP-Datei in der Übergabe an das Template ebenso handeln. Also so:
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in', array(...
$template->assign_block_vars('switch_user_logged_in.last_seen_row', array(...
Ein Platzhalter in der tpl-Datei würde dann so lauten:
Und vergiss nicht, beide Switche wieder mit END zu beenden. Und das in umgekehrter Reihenfolge!
Verfasst: Di 29.Mär, 2005 23:26
von shadowrider
aaah ja - das ist ne Nummer zu groß für mich, da würd ich dich vermutlich solange löchern bis du am Ende jede Zeile gecoded hast, lassen wir das mal lieber, danke
Verfasst: Di 29.Mär, 2005 23:30
von oxpus
Noch einfacher kann man das nicht erklären.
Ich jedenfalls nicht. Sorry...
Verfasst: Mi 30.Mär, 2005 12:25
von AmigaLink
Ich versuchs mal.
Ein switch wird ja mittels
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in', array() );
definiert.
Wenn du nun einen weiteren switch nutzen möchtest der innerhalb dieses switches zum einsatz kommt, dann musst du ihn nach dem erstem definieren und ausserdem den ersten mit angeben. Wobei die beiden switchnamen mit einem punkt voneinander getrennt werden.
Also so:
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in.last_seen_row', array() );
Der einsatz im template ist dann so:
Code: Alles auswählen
<!-- BEGIN switch_user_logged_in -->
HTML-Code
<!-- BEGIN last_seen_row -->
HTML-Code
<!-- END switch_user_logged_in -->
<!-- END last_seen_row -->
Solltest du innerhalb des block-arrays noch Platzhalter definieren.
Zum Beispiel so:
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in.last_seen_row', array(
'LAST_SEEN' => $last_seen,
'L_LAST_SEEN' => $lang('last_seen')
));
Dann muss beim einsatz des Platzhalters, der name des switches mit angegeben werden. Wobei auch hier wieder ein punkt zur trennung eingesetzt wird.
Also so:
Code: Alles auswählen
<!-- BEGIN switch_user_logged_in -->
<table border="0" cellpadding="3" cellspacing="1" width="100%" class="forumline">
<tr>
<th class="thHead" colspan="2" height="25" valign="middle">Onlinedaten</th>
</tr>
<!-- BEGIN last_seen_row -->
<tr>
<td class="row1"><span class="gen">{switch_user_logged_in.last_seen_row.L_LAST_SEEN}: </span></td>
</tr>
<tr>
<td class="row2"><span class="gen">{switch_user_logged_in.last_seen_row.LAST_SEEN}</span></td>
</tr>
<!-- END last_seen_row -->
</table>
<!-- END switch_user_logged_in -->
Verfasst: Do 31.Mär, 2005 00:50
von shadowrider
vielen dank mal für die Mühe.
aber als ich das hier in der portal.php gemacht habe:
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in.last_seen_row', array(
'L_LSEEN_USERNAME' => $user_online_link,
'L_LSEEN_TIME' => create_date($board_config['default_dateformat'], $row['user_lastvisit'], $board_config['board_timezone'])));
}
hat es mir das ganze Portal zerschossen (übergroße Tabellen, mehrfach die gleichen Tabellen usw., totales Chaos
Verfasst: Do 31.Mär, 2005 02:47
von AmigaLink
hat es mir das ganze Portal zerschossen (übergroße Tabellen, mehrfach die gleichen Tabellen usw., totales Chaos
Ein zeichen dafür das mit der definition des switchs was nicht stimmt (reihenfolge). Wo und wann wird 'switch_user_logged_in' definiert???
Verfasst: Do 31.Mär, 2005 04:17
von shadowrider
in der page_header.php:
Code: Alles auswählen
// Login box?
//
if ( !$userdata['session_logged_in'] )
{
$template->assign_block_vars('switch_user_logged_out', array());
}
else
{
$template->assign_block_vars('switch_user_logged_in', array());
if ( !empty($userdata['user_popup_pm']) )
{
$template->assign_block_vars('switch_enable_pm_popup', array());
}
if ( $userdata['user_absence'] == TRUE )
{
$template->assign_block_vars('switch_absence', array());
}
}
Verfasst: Do 31.Mär, 2005 08:11
von oxpus
Aha. Dann brauchst Du in Deinem Switch diese nicht mit einbinden, sondern nur in der TPL als "Klammer" um Deinen Block verwenden.
Du musst nur sicherstellen, daß Dein Switch nach dem includieren der page_header.php erstellt wird.
Verfasst: Do 31.Mär, 2005 08:18
von shadowrider
wenn ich den um den Block klammere, dann wird dieser teil überhaupt nicht angezeigt, weder bei login noch bei logout (die Klammermethode hattest du mir mal verklickert, funktioniert bei allen anderen Stellen auch problemlos, nur hier eben nicht
Verfasst: Do 31.Mär, 2005 08:32
von oxpus
Du darfst dann hier ja auch nicht
Code: Alles auswählen
$template->assign_block_vars('switch_user_logged_in.last_seen_row', array(
verwenden, sondern
Ist dieser Block leer, kommt keine Anzeige.
Und nur die Titelzeile der Tabelle, bzw. auch evtl. vorhandenen Tabellenfuß, würde ich mit dem Switch "switch_user_logged_in" versehen.
Dann aber auch jede Sprachvariable mit $lang['...'] in den Block "last_seen_row" packen.
Verfasst: Fr 20.Okt, 2006 15:44
von Udo
Ich schließe mich jetzt bei dem Thema einfach mal mit an.
Ich habe von einer Portalbox zusätzliche BEGIN und END Bereiche gesetzt. Mit diesen besteht die Möglichkeit die Box über das ACP ein- bzw auszuschalten. Das funktioniert auch ohne Probleme, nur wird der Inhalt der Box nicht mehr angezeigt.
Aus den Beitägen vorher werde ich nicht schlau bzw schafft das keine Abhilfe.
Hier mal der Code aus der portal_body.tpl
Code: Alles auswählen
<!-- BEGIN switch_topposter -->
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<th>{L_TOP_MEMBERS}</th>
</tr>
<tr>
<td class="row1" align="left">
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<!-- BEGIN most_posts -->
<tr>
<td valign="top" align="center"><img src="templates/{T_NAME}/images/orion/icons/pfeil.png"></td>
<td valign="top" align="left"><span class="gensmall"><a href="{most_posts.U_VIEWPROFILE}" class="genmed">{most_posts.USERNAME}</a> <b>::</b> {most_posts.POSTS} {L_POSTS}<br></span></td>
</tr>
<!-- END most_posts -->
</table>
</td>
</tr>
</table>
<br>
<!-- END switch_topposter -->
Und der entsprechende aus der portal.php
Code: Alles auswählen
///
// Show Portalbox (yes/no)
//
if ( $board_config['statistik_enable'] == '1' )
{
$template->assign_block_vars('switch_statistik',array());
}
if ( $board_config['topposter_enable'] == '1' )
{
$template->assign_block_vars('switch_topposter',array());
}
if ( $board_config['themen_enable'] == '1' )
{
$template->assign_block_vars('switch_themen',array());
}
if ( $board_config['search_enable'] == '1' )
{
$template->assign_block_vars('switch_search',array());
}
if ( $board_config['syndication_enable'] == '1' )
{
$template->assign_block_vars('switch_syndication',array());
}
if ( $board_config['birthday_enable'] == '1' )
{
$template->assign_block_vars('switch_birthday',array());
}
if ( $board_config['termine_enable'] == '1' )
{
$template->assign_block_vars('switch_termine',array());
}
if ( $board_config['counter_enable'] == '1' )
{
$template->assign_block_vars('switch_counter',array());
}
if ( $board_config['chat_enable'] == '1' )
{
$template->assign_block_vars('switch_chat',array());
}
if ( $board_config['poll_enable'] == '1' )
{
$template->assign_block_vars('switch_poll',array());
}
if ( $board_config['qlink_enable'] == '1' )
{
$template->assign_block_vars('switch_qlink',array());
}
Udo
Verfasst: Fr 20.Okt, 2006 16:03
von oxpus
Du erstellst so einen verschachtelten Switch, den Du dann auch im Script so angeben musst. Sonst wird eben nichts umgesetzt.
Sie auch:
http://www.oxpus.de/viewtopic.php?t=2642
Verfasst: Fr 20.Okt, 2006 16:33
von Udo
Naja, aber da versteh ich nur Bahnhof
Edit: So ich hab jetzt nach deiner 2. Anleitung mal das geändert ( soweit in damit zurecht kam ) und ändern tut sich da nichts.
portal.php
Code: Alles auswählen
//
// Show Topposterbox (yes/no)
//
$template->assign_block_vars('switch_topposter', array());
if ($board_config['topposter_enable'] == '1' )
{
$template->assign_block_vars('switch_topposter.most_posts', array(
'U_VIEWPROFILE' => $u_viewprofile,
'USERNAME' => $username,
'POSTS' => $posts,
'L_POSTS' => $lang['posts'])
);
}
portal_body.tpl
Code: Alles auswählen
<!-- BEGIN switch_topposter -->
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<th>{L_TOP_MEMBERS}</th>
</tr>
<tr>
<td class="row1" align="left">
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<!-- BEGIN most_posts -->
<tr>
<td valign="top" align="center"><img src="templates/{T_NAME}/images/orion/icons/pfeil.png"></td>
<td valign="top" align="left"><span class="gensmall"><a href="{switch_topposter.most_posts.U_VIEWPROFILE}" class="genmed">{switch_topposter.most_posts.USERNAME}</a> <b>::</b> {switch_topposter.most_posts.POSTS} {L_POSTS}<br></span></td>
</tr>
<!-- END most_posts -->
</table>
</td>
</tr>
</table>
<br>
<!-- END switch_topposter -->
Udo
Verfasst: Sa 21.Okt, 2006 00:33
von oxpus
Naja, hier brauchst Du den "äusseren" Switch nun wirklich nicht. Der ist hier absolut fehl am Platz.
Verfasst: Sa 21.Okt, 2006 09:59
von Udo
[quote="oxpus";p="65436"]Naja, hier brauchst Du den "äusseren" Switch nun wirklich nicht. Der ist hier absolut fehl am Platz.[/quote]
Doch da wird der schon genötigt, sonst kann diese Box halt nicht über das ACP aus- bzw eingeshaltet werden.
Verfasst: Sa 21.Okt, 2006 11:07
von oxpus
Du hast mich scheinbar falsch verstanden:
Code: Alles auswählen
$template->assign_block_vars('switch_topposter', array());
Das ist der äussere Switch, der pur ohne eine Bedingung erstellt wird.
Und das hier ist die Bedingung, die auf die Angaben vom ACP reagiert.
Also ist der äussere Switch nicht nötig!
Verfasst: Sa 21.Okt, 2006 11:41
von Udo
Und wie müssten denn die beiden Codestellen aussehen damit das funktioniert ?
Udo
Verfasst: Sa 21.Okt, 2006 13:06
von oxpus
Öh, jetzt hab ich gesehen, was Du willst...
Wo ist denn dieser Block enthalten?
So wie der aufgebaut ist, muss dieser ja in einer Schleife laufen, oder ist es nur ein User, der angezeigt werden soll?
Verfasst: Sa 21.Okt, 2006 13:20
von Udo
Die Box ist die ganz normale Topposter Box von CBack Orion v2.3.5
Mit dem Mod sollen insgesamt 12 Portalboxen über das ACP ein- und ausschaltet werden können.
Das funktioniert alles auch einwandfrei.
Das Problem sind halt die Portalboxen welche eine switch Funktion beinhalten. Dort wird dann der Inhalt nicht angezeigt.
Top Poster,
Letzte Themen,
Statistik/Termine,
Chat,
Umfrage,
Q-Links,
Ich kann dir auch gerne die install.txt mal zukommen lassen
Udo
Verfasst: Sa 21.Okt, 2006 17:46
von oxpus
Ja, häng die mal an, dann schau ich mal, ob ich auf die Schnelle da was zaubern kann...
Verfasst: Sa 21.Okt, 2006 18:00
von Udo
Hier ist sie. Laß dir aber Zeit.
Bin sowieso noch mit der linken Boardnavigation beschäfftigt.
Und danke schonmal im Voraus.
Udo
Verfasst: Sa 21.Okt, 2006 21:39
von oxpus
Also für die eine Box sollte der Code für die portal.php
Code: Alles auswählen
//
// Top Posters MOD
//
if ($board_config['topposter_enable'] == '1' )
{
$template->assign_block_vars('switch_topposter', array(
'L_POSTS' => $lang['posts'])
);
$sql = "SELECT user_id, username, user_posts
FROM " . USERS_TABLE . "
WHERE user_id <> " . ANONYMOUS . "
ORDER BY user_posts DESC
LIMIT 5";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain top posters forums information', '', __LINE__, __FILE__, $sql);
}
while ($row = $db->sql_fetchrow($result))
{
$user_id=$row['user_id'];
$template->assign_block_vars("switch_topposter.most_posts", array(
'USERNAME' => $row['username'],
'POSTS' => $row['user_posts'],
'U_VIEWPROFILE' => append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id"))
);
}
//
// END: Top Posters MOD
//
und das Template
Code: Alles auswählen
<!-- BEGIN switch_topposter -->
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<th>{L_TOP_MEMBERS}</th>
</tr>
<tr>
<td class="row1" align="left">
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<!-- BEGIN most_posts -->
<tr>
<td valign="top" align="center"><img src="templates/{T_NAME}/images/orion/icons/pfeil.png"></td>
<td valign="top" align="left"><span class="gensmall"><a href="{switch_topposter.most_posts.U_VIEWPROFILE}" class="genmed">{switch_topposter.most_posts.USERNAME}</a> <b>::</b> {switch_topposter.most_posts.POSTS} {switch_topposter.L_POSTS}<br></span></td>
</tr>
<!-- END most_posts -->
</table>
</td>
</tr>
</table>
<br>
<!-- END switch_topposter -->
lauten...
Verfasst: Sa 21.Okt, 2006 22:08
von Udo
Danke, jetzt erhalte ich nur leider folgende Fehlermeldung:
Parse error: parse error, unexpected $ in /home/www/htdocs/rurportal.de/orion/portal.php on line 1249
Die Zeile gibt es leider nur nicht
Edit: Hab den Fehler gefunden und jetzt funktioniert es
Habe soweit das mit den anderen Boxen auch geschafft.
Nur die Chatbox, Umfragebox und Q-Linksbox wollen nicht.
Udo
Verfasst: So 22.Okt, 2006 01:48
von oxpus
Die gehen auch, musst Dir nur Zeit dafür nehmen.
Das Prinzip ist jedenfalls immer das gleiche.