Seite 1 von 1

switches kombinieren

Verfasst: 06.05.2006 10:41
von d23
Hi,

ich suche nach einer Möglichkeit mehrere Switches zu kombinieren. Meine Suche in der KB und den Forum brachte keine zufriedenstellende Lösung.

Es ging um folgenden Codeabschnitt (EzPortal, portal.php portal_body.tpl)

In der portal_body.tpl befindet sich folgender Code:

Code: Alles auswählen

 <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
           <tr>
                <td class="catHead" height="25"><span class="genmed"><b>{L_RECENT_TOPICS}</b></span></td>
           </tr>
           <tr>
                <td class="row1" align="left"><span class="gensmall">
                     <br>
Nur eingeloggte Benutzer sehen alle Beiträge !<br><br>
                <!-- BEGIN recent_topic_row -->
&raquo; <a href="{recent_topic_row.U_TITLE}">{recent_topic_row.L_TITLE}</a><br />
                by <a href="{recent_topic_row.U_POSTER}">{recent_topic_row.S_POSTER}</a> on {recent_topic_row.S_POSTTIME}<br /><br />
                <!-- END recent_topic_row -->
                </span></td>
           </tr>
          </table>
<br />
code is a bissl chaos, scheinbar klappt da was mitm übertragen von putty in browser nicht.

dieser abschnitt soll nur registrierten und eingeloggten usern angezeigt werden, meine versuche mit <!-- BEGIN switch_user_logged_in --> und dem zugehörigen <!-- END switch_user_logged_in --> brachten keinen erfolg.

wie funktioniert das denn ?

Verfasst: 06.05.2006 12:32
von S2B

Code: Alles auswählen

$template->assign_block_vars('switch_eins', array());

$template->assign_block_vars('switch_eins.switch_zwei', array());

Code: Alles auswählen

<!-- BEGIN switch_eins -->
  <!-- BEGIN switch_zwei -->

  <!-- END switch_zwei -->
<!-- END switch_eins -->
:wink:

Verfasst: 06.05.2006 13:04
von d23
so, hab das jetzt gemacht:

Code: Alles auswählen

//
// Recent Topics
//
$sql = "SELECT * FROM ". FORUMS_TABLE . " ORDER BY forum_id";
if (!$result = $db->sql_query($sql))
{
        message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
while( $row = $db->sql_fetchrow($result) )
{
        $forum_data[] = $row;
}

$is_auth_ary = array();
$is_auth_ary = auth(AUTH_ALL, AUTH_LIST_ALL, $userdata, $forum_data);

if( $CFG['exceptional_forums'] == '' )
{
        $except_forum_id = '\'start\'';
}
else
{
        $except_forum_id = $CFG['exceptional_forums'];
}

for ($i = 0; $i < count($forum_data); $i++)
{
        if ((!$is_auth_ary[$forum_data[$i]['forum_id']]['auth_read']) or (!$is_auth_ary[$forum_data[$i]['forum_id']]['auth_view']))
        {
                if ($except_forum_id == '\'start\'')
                {
                        $except_forum_id = $forum_data[$i]['forum_id'];
                }
                else
                {
                        $except_forum_id .= ',' . $forum_data[$i]['forum_id'];
                }
        }
}
$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
                FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . USERS_TABLE . " AS u
                WHERE t.forum_id NOT IN (" . $except_forum_id . ")
                        AND t.topic_status <> 2
                        AND p.post_id = t.topic_last_post_id
                        AND p.poster_id = u.user_id
                ORDER BY p.post_id DESC
                LIMIT " . $CFG['number_recent_topics'];
if (!$result = $db->sql_query($sql))
{
        message_die(GENERAL_ERROR, 'Could not query recent topics information', '', __LINE__, __FILE__, $sql);
}
$number_recent_topics = $db->sql_numrows($result);
$recent_topic_row = array();
while ($row = $db->sql_fetchrow($result))
{
        $recent_topic_row[] = $row;
}
for ($i = 0; $i < $number_recent_topics; $i++)
{
        $template->assign_block_vars('recent_topic_row', array(
                'U_TITLE' => append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $recent_topic_row[$i]['post_id']) . '#' .$recent_topic_row[$i]['post_id'],
                'L_TITLE' => $recent_topic_row[$i]['topic_title'],
                'U_POSTER' => append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $recent_topic_row[$i]['user_id']),
                'S_POSTER' => $recent_topic_row[$i]['username'],
                'S_POSTTIME' => create_date($board_config['default_dateformat'], $recent_topic_row[$i]['post_time'], $board_config['board_timezone'])
                )
        );

$template->assign_block_vars('recent_topic_row.switch_user_logged_in', array());
}
//
// END - Recent Topics
//

Code: Alles auswählen

 <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
           <tr>
                <td class="catHead" height="25"><span class="genmed"><b>{L_RECENT_TOPICS}</b></span></td>
           </tr>
           <tr>
                <td class="row1" align="left"><span class="gensmall">
                     <br>
Nur eingeloggte Benutzer sehen alle Beiträge !<br><br>
                 <!-- BEGIN switch_user_logged_in -->
				<!-- BEGIN recent_topic_row -->
&raquo; <a href="{recent_topic_row.U_TITLE}">{recent_topic_row.L_TITLE}</a><br />
                by <a href="{recent_topic_row.U_POSTER}">{recent_topic_row.S_POSTER}</a> on {recent_topic_row.S_POSTTIME}<br /><br />
                <!-- END recent_topic_row -->
				 <!-- END switch_user_logged_in -->
                </span></td>
           </tr>
          </table>
<br />
funktioniert wunderbar, leider zu gut, weil jetzt sehen weder die eingeloggten noch die ausgeloggten benutzer etwas, außer der info, dass nur eingeloggte die anzeige erhalten o_O ich find den fehler nicht ?

Verfasst: 06.05.2006 13:14
von S2B
Dreh mal die beiden switches im Template um. Außerdem solltest du switch_user_logged_in auch nur dann setzen, wenn der Benutzer eingeloggt ist. :wink:

Verfasst: 06.05.2006 13:38
von d23
aua *kopf gegend wand hau* die nacht war zu lange, eindeutig...

moment, ist der user_logged_in_switch etwa falsch ?

nachdem umdrehen zeigt sich gar keine wirkung, es verhält sich alles wie ohne diesen switch, eingeloggte user sehen alle beiträge, gäste nur die, die öffentlich freigegeben sind. eigentlich sollten die gäste ja gar nichts sehen ? o_O

Verfasst: 06.05.2006 15:25
von S2B
Der switch_user_logged_in-Block wird in der page_header.php so deklariert:

Code: Alles auswählen

if ( !$userdata['session_logged_in'] )
{
	$template->assign_block_vars('switch_user_logged_out', array());
}
else
{
	$template->assign_block_vars('switch_user_logged_in', array());
	[...]
}
wenn du ihn jetzt neu deklarierst (xxx.switch_user_logged_in), dann muss natürlich wieder die gleiche Abfrage stattfinden:

Code: Alles auswählen

if ($userdata['session_logged_in'])
{
	$template->assign_block_vars('xxx.switch_user_logged_in', array();
}

Verfasst: 06.05.2006 18:34
von d23
ah jetzt gehts. wunderbar, danke :D

gute nacht ;)