Switch's "verschachteln"?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Ich vermute, dass das Problem in der Verschachtelung liegt. Da gab's auch schon mal 'nen Beitrag dazu...
Wenn du ihn nicht findest, meld dich nochmals - dann suche ich auch mal.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Edit: Für die Suche:

Statt:

Code: Alles auswählen

if ($mode == 'newtopic' || ( $mode == 'editpost' && $post_info['topic_location_enable'] && $post_data['first_post'])) 
{ 
        $template->assign_vars(array( 
                'ZIP' => $zip, 
                'CITY' => $city, 
                'L_ZIP' => $lang['ZIP'], 
                'L_CITY' => $lang['City']) 
        ); 
        $map_mod_installed = ( (defined("MAP_MOD_MAP_TABLE") && defined("MAP_MOD_CONFIG_TABLE") ) ) ? true : false; 
        if ($map_mod_installed) 
        { 
            $template->assign_vars(array( 
                    'L_FIND_PLACE' => $lang['map_find_place'], 
                    'U_FIND_PLACE' => append_sid("map_search.$phpEx"), 
                    'LONGITUDE' => $longitude, 
                    'LATITUDE' => $latitude, 
                    'L_LONGITUDE' => $lang['Longitude'], 
                    'L_LATITUDE' => $lang['Latitude']) 
            ); 
            $template->assign_block_vars('switch_map_mod_installed', array()); 
        } 
        $template->assign_block_vars('switch_topic_location', array()); 
}
Einfach nur:

Code: Alles auswählen

if ($mode == 'newtopic' || ( $mode == 'editpost' && $post_info['topic_location_enable'] && $post_data['first_post'])) 
{ 
        $template->assign_vars(array( 
                'ZIP' => $zip, 
                'CITY' => $city, 
                'L_ZIP' => $lang['ZIP'], 
                'L_CITY' => $lang['City']) 
        ); 
        $map_mod_installed = ( (defined("MAP_MOD_MAP_TABLE") && defined("MAP_MOD_CONFIG_TABLE") ) ) ? true : false; 
        $template->assign_block_vars('switch_topic_location', array());
        if ($map_mod_installed) 
        { 
            $template->assign_vars(array( 
                    'L_FIND_PLACE' => $lang['map_find_place'], 
                    'U_FIND_PLACE' => append_sid("map_search.$phpEx"), 
                    'LONGITUDE' => $longitude, 
                    'LATITUDE' => $latitude, 
                    'L_LONGITUDE' => $lang['Longitude'], 
                    'L_LATITUDE' => $lang['Latitude']) 
            ); 
        } 
        $template->assign_block_vars('switch_topic_location.switch_map_mod_installed', array());
}
Dann funktionierts...

Hier gibt's ne sehr gute Anleitung dazu

Edit 2: Noch 'nen Fehler gefunden...
Zuletzt geändert von D@ve am 04.09.2004 20:35, insgesamt 1-mal geändert.
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Oder hier: KB:template_syntax
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Pyramide hat geschrieben:
Oder hier: <a href="/doku/kb/artikel.php?artikel=template_syntax" title="Eine Einführung in die Syntax der phpBB-Templates" target="_blank" class="postlink">Template-Syntax von phpBB</a>
Ich weiß, aber daraus bin ich nicht schlau geworden und werde es auch jetzt, wo ich es verstande nicht wirklich (so sorry).

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
knalltrauma
Mitglied
Beiträge: 150
Registriert: 06.05.2004 17:14

Beitrag von knalltrauma »

Mhhh...also ich schnall das nicht :cry:

Hier mal mein Code aus 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());
	}

}

// Add no-cache control for cookies if they are set
//$c_no_cache = (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_sid']) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_data'])) ? 'no-cache="set-cookie", ' : '';

// Work around for "current" Apache 2 + PHP module which seems to not
// cope with private cache control setting
if (!empty($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache/2'))
{
	header ('Cache-Control: no-cache, pre-check=0, post-check=0');
}
else
{
	header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
}
header ('Expires: 0');
header ('Pragma: no-cache');

	//
	//Nickpagelink zeigen?
	//
	if ( $userdata['session_logged_in'] )
	{
		//Nickpage vorhanden?
		$sql = "SELECT COUNT(uid) AS zaehle FROM ".NICKPAGE_TABLE." WHERE uid='".$userdata['user_id']."'";
		if( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Konnte Querrie nicht ausf¸hren!', '', __LINE__, __FILE__, $sql);
		}
		$row = $db->sql_fetchrow($result);
		//Konfiguration (ab wieviel posts...)
		$sql = "SELECT anzahl_posts FROM ".NICKPAGECONFIG_TABLE;
		if( !($result2 = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Konnte Querrie nicht ausf¸hren!', '', __LINE__, __FILE__, $sql);
		}
		$row2 = $db->sql_fetchrow($result2);
		if($row['zaehle'] == "1" OR $row2['anzahl_posts'] <= $userdata['user_posts'])
		{
			$template->assign_block_vars('Shownickpagebutton',array(
			'U_NICKPAGE' => append_sid('nickpage.'.$phpEx.'?admin='.$userdata['username']),
			));
		}
	}
Wo und wie muss ich nun einen neuen Switch einbauen, damit ich diese wie vorne beim 1. Posting beschrieben verschachteln kann?

Viele liebe Grüsse,
Knalltrauma
---------------------------------
=Es lebe die Liebe!=
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Das kommt auf den Switch an und wie Dein Template aussieht.

Hier mal allgemein gehaltener Code:

Code: Alles auswählen

//hier muss die Bedingung rein, bei der der INNERE Switch-Block gesetzt wird
if ($aeußerer_switch)
{
    //hier die Template Platzhalter für den ÄUSSEREN Block definieren
    $template->assign_vars(array(

                'VAR_AUSSEN' => $var_aussen,
                'L_VAR_AUSSEN' => $lang['var_aussen'])
    );
    //Hier werden die Variablen des ÄUSSEREN Blocks zugewiesen
    template->assign_block_vars('switch_outer_block', array());

    //hier muss die Bedingung rein, bei der der INNERE Switch-Block gesetzt wird
    if ($innerer_switch)
    {
        //hier die Template Platzhalter für den INNEREN Block definieren
        $template->assign_vars(array(

                    'VAR_AUSSEN' => $var_aussen,
                    'L_VAR_AUSSEN' => $lang['var_aussen'])
        );
    }
    //Hier werden die Variablen des INNEREN Blocks zugewiesen
    $template->assign_block_vars('switch_outer_block.switch_inner_block', array());
}
There are only 10 types of people in the world: Those who understand binary, and those who don't
knalltrauma
Mitglied
Beiträge: 150
Registriert: 06.05.2004 17:14

Beitrag von knalltrauma »

Hy D@ve...

Mhhh... ich krieg das einfach nicht zum laufen :cry: Ich würde einfach gerne in den Switch "switch_user_logged_in" noch den Switch "switch_show_nickpage" einbauen. Also dass ein User der eingeloggt ist, auch auf seine Nickpage zugreiffen kann :wink:

Müsste ich das dann so machen?

Anstatt:

Code: Alles auswählen

if ( !$userdata['session_logged_in'] ) 
{ 
   $template->assign_block_vars('switch_user_logged_out', array()); 
}
Neu:

Code: Alles auswählen

if ( !$userdata['session_logged_in'] ) 
{ 
   $template->assign_block_vars('switch_user_logged_out.switch_show_nickpage', array()); 
}
Ich blick da nicht mehr durch bei all diesen Switchs :roll: :D
---------------------------------
=Es lebe die Liebe!=
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Nein, Du musst zwei If-Abfragen machen. Ein switch-Block ist nichts anderes als eine if-Anweisung. Zu jedem Block im Template muss im Prinzip eine if-Anweisung im Quellcode stehen. Weiß nicht ob Deine Auflösung dazu ausreicht hier mal Gegenüberstellung von php-Code und entsprechendem HTML-Code:

Code: Alles auswählen

if ($aeusserer_switch)                                                                <!--BEGIN switch_outer_block-->
{                                                                                     <br>
    $template->assign_vars(array(                                                     <h1>Irgendwelche Variablen:</h1>
                                                                                      <br>
                'VAR_AUSSEN' => $var_aussen,                                          <a href="{VAR_AUSSEN"}">{L_VAR_AUSSEN}</a><br>
                'L_VAR_AUSSEN' => $lang['var_aussen'])                                <br>
    );                                                                                <br>
    template->assign_block_vars('switch_outer_block', array());                       <br>
    if ($innerer_switch)                                                                  <!--BEGIN switch_inner_block-->
    {                                                                                     <br>
        $template->assign_vars(array(                                                     <h1>Irgendwelche anderen Variablen:</h1>
                    'VAR_AUSSEN' => $var_aussen,                                          <b>{L_VAR_INNEN"}</b>:{VAR_INNEN}</a><br>
                    'L_VAR_AUSSEN' => $lang['var_aussen'])                                <br>
        );                                                                                <br>
    }                                                                                     <!--END switch_inner_block-->
    $template->assign_block_vars('switch_outer_block.switch_inner_block', array());   <br>
}                                                                                     <!--BEGIN switch_outer_block-->

Hier sicherheitshalber noch mal als Image
http://www.2sound.de/files/switch_scheme.gif

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
bedee
Mitglied
Beiträge: 29
Registriert: 21.07.2004 14:13

wieder mal verschachtelte switches:

Beitrag von bedee »

hi, seit langem hab ich wieder das prob. mit den verschachtelten switches

nun bin ich in der posting_body.tpl unterwegs (das was ihr seht, wenn ihr mir auf diese frage eine antwort bastelt :lol: ) - da gibts unter diesem feld in dem ich gerade schreibe die checkboxen

...
bbcode deaktivieren
smilies deaktivieren
benachrichtigt mich, wenn eine antwort geschrieben wurde
...

einige dieser checkboxen möchte ich nur dem moderator sichtbar machen, also einen
<!-- switch mod_loged_in --> einbauen, nur hab ich wieder das problem, das durch das verschachteln der marker nix mehr funkt - d.h. der inhalt zwischen meinem marker nicht geparst wird -
<!-- BEGIN switch_moderator_logged_in -->
<td class="row1" valign="top"><span class="gen"><b>{L_OPTIONS}</b></span><br /><span class="gensmall">{HTML_STATUS}<br />{BBCODE_STATUS}<br />{SMILIES_STATUS}</span></td>
<td class="row2"><span class="gen"> </span>



<table cellspacing="0" cellpadding="1" border="0">
<!-- BEGIN switch_html_checkbox -->
<tr>
<td>
<input type="checkbox" name="disable_html" {S_HTML_CHECKED} />
</td>
<td><span class="gen">{L_DISABLE_HTML}</span></td>
</tr>
<!-- END switch_html_checkbox -->
<!-- BEGIN switch_bbcode_checkbox -->

<tr>
<td>
<input type="checkbox" name="disable_bbcode" {S_BBCODE_CHECKED} />
</td>
<td><span class="gen">{L_DISABLE_BBCODE}</span></td>
</tr>
<!-- END switch_bbcode_checkbox -->
<!-- BEGIN switch_smilies_checkbox -->

<tr>
<td>
<input type="checkbox" name="disable_smilies" {S_SMILIES_CHECKED} />
</td>
<td><span class="gen">{L_DISABLE_SMILIES}</span></td>
</tr>
<!-- END switch_smilies_checkbox -->
<!-- BEGIN switch_signature_checkbox -->
<tr>
<td>
<input type="checkbox" name="attach_sig" {S_SIGNATURE_CHECKED} />
</td>
<td><span class="gen">{L_ATTACH_SIGNATURE}</span></td>
</tr>
<!-- END switch_signature_checkbox -->
<!-- BEGIN switch_notify_checkbox -->

<tr>
<td>
<input type="checkbox" name="notify" {S_NOTIFY_CHECKED} />
</td>
<td><span class="gen">{L_NOTIFY_ON_REPLY}</span></td>
</tr>
<!-- END switch_notify_checkbox -->
<!-- BEGIN switch_delete_checkbox -->

<tr>
<td>
<input type="checkbox" name="delete" />
</td>
<td><span class="gen">{L_DELETE_POST}</span></td>
</tr>
<!-- END switch_delete_checkbox -->
<!-- BEGIN switch_type_toggle -->

<tr>
<td></td>
<td><span class="gen">{S_TYPE_TOGGLE}</span></td>
</tr>
<!-- END switch_type_toggle -->
</table>
<!-- END switch_moderator_logged_in -->
wie müsst das nun in der posting_body.tpl und der zugehörigen posting.php aussehen, damit das auch tickt?

besten dank für eure mithilfe

bedee
Benutzeravatar
Leuchte
Ehemaliges Teammitglied
Beiträge: 9179
Registriert: 26.05.2003 14:57
Wohnort: Duisburg
Kontaktdaten:

Beitrag von Leuchte »

Seh ich jetzt erst, aber falls mal einer die selbe Frage hat :D
knalltrauma hat geschrieben:Hy D@ve...

Mhhh... ich krieg das einfach nicht zum laufen :cry: Ich würde einfach gerne in den Switch "switch_user_logged_in" noch den Switch "switch_show_nickpage" einbauen. Also dass ein User der eingeloggt ist, auch auf seine Nickpage zugreiffen kann :wink:
Das passiert sowieso, auch ohne zusätzlichen Switch.

@bedee, die posting_body.tpl so wie sie da ist.
Die posting.php wiefolgt ändern - Finde

Code: Alles auswählen

$template->assign_block_vars('switch_html_checkbox', array());
Ersetzen mit

Code: Alles auswählen

$template->assign_block_vars('switch_moderator_logged_in.switch_html_checkbox', array());
Finde

Code: Alles auswählen

$template->assign_block_vars('switch_bbcode_checkbox', array());
Ersetzen mit

Code: Alles auswählen

$template->assign_block_vars('switch_moderator_logged_in.switch_bbcode_checkbox', array());
So veränderst du auch die anderen switches. Such einfach nach switch_smilies_checkbox usw.
Antworten

Zurück zu „Coding & Technik“