Seite 1 von 2

Template Block ausblenden

Verfasst: 01.10.2008 08:58
von Slup
Moin,

Habe mal wieder ein Problem. Unzwar binde ich einige Teile in meinem Board über switch ein.
Soweit klappt auch alles aber wie mache ich es das nur gerade der HTML Block angezeigt wird der aufrerufen worden ist?

Hier mal mein Code

Code: Alles auswählen

switch ($mode) {
			case 'spon_site':
			include("{$phpbb_root_path}includes/functions_sporn.$phpEx");
				$sql = 'SELECT * 
		FROM '.SPORN_TABLE.' ORDER BY sporn';
	 $result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
	$template->assign_block_vars('gan', array(
			'gan'					=> $row['gan'],
		));
		
	}
			break;

			default:
				
	$sql = 'SELECT * 
		FROM '.SPORN_TABLE.' ORDER BY sporn';
	 $result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
	$template->assign_block_vars('sporn', array(
			'sporn'					=> $row['sporn'],
		));
		
	}

Code: Alles auswählen

[color=red]########## case 'spon_site':  [/color]          
    <table class="table1" cellspacing="1">
	<thead>
	<tr>
		<th class="trank"><strong>{L_GAN}</strong></th>
	</tr>
	</thead>
	<tbody>
					

	<tr class="bg1">
    <!-- BEGIN gan -->
		<td>{gan.sporn}</td>
    <!-- END topsite -->
	</tr>
		
		
	</tbody>
	</table>
    [color=red]######## case 'spon_site': ###########[/color]
    
    [color=red]##############  default #################[/color]
	<table class="table1" cellspacing="1">
	<thead>
	<tr>
		<th class="trank"><strong>{L_SPORN}</strong></th>
	</tr>
	</thead>
	<tbody>
					

	<tr class="bg1">
    <!-- BEGIN sporn -->
		<td>{sporn.sporn}</td>
    <!-- END topsite -->
	</tr>
		
		
	</tbody>
	</table>
    [color=red] ##############  default #################[/color]
Jetzt hätte ich gerne das der teil mit dem case sporn_site angezeigt wird der aufgerufen wird und der default teilsoll ausgeblendet werden und eben anders herum.

Wie bekomme ich das hin?

Verfasst: 01.10.2008 09:46
von Miriam
Wir reden aber nicht von phpBB3, oder?

Verfasst: 01.10.2008 14:00
von Slup
HiHo,

Äh doch. Vieleicht was das ein bischen komisch beschrieben.

Aus allen switsch anweisungen steht der html code in einer einzigen Datei.

Jenachdem ob case 'spon_site oder default aufgerufen wird soll auch nur dieser Block angeiegt werden.

Immoment ist es nämlich so das wenn ich http://localhost/sporn/sporn.php?mode=spon_site aufrufe, das auch der default Block noch angezeit wird

Verfasst: 01.10.2008 16:38
von Miriam
Wirf mal einen Blick in die Datei Docs/coding-guidelines.htm in Deinem phpBB3 Ordner. Speziell der Abschnitt styling und Abschnitt templating.

Verfasst: 01.10.2008 17:13
von Slup
Ah Thx,

Wenn ich das jetzt richtig verstanden habe ist <!-- IF xxxxxxx --> dafür zuständig.

Jetzt ist die Frage woher kommt xxxxxxx? Ich kann leider nur auf die deutschen coding-guidelines zugreifen da ich kaum ein wort English versteh und dort ist es nicht beschrieben. Kommtt da spon_site rein oder was muss ort hin?

Verfasst: 01.10.2008 21:53
von fragz
HiHo,

Also ich kämpfe auch noch damit aber ich vermute mal das dies mit der switch abfrage komplizierter ist.
Versuch mal anstatt des Switch ne if abfrage.
Aber warten wa nochmal ein bschen, vieleicht ist ja jemand so Nett und erklärt uns das an einem kleinen Beispiel.

EDIT: Hau mal unter default: folgendes rein

Code: Alles auswählen

if (defined('DEFAULT'))
	{
und vor dem break; Im template packst die ganzen Tabellen zwichen

Code: Alles auswählen

<!-- IF DEFAULT -->

<!-- ENDIF -->

Verfasst: 01.10.2008 23:04
von gn#36
Solange du ein wenig php beherrscht ist das eigentlich recht einfach. Du kannst in den Templates jede beliebige Variable abfragen die du im PHP Teil per $template->assign_vars() oder $template->assign_block_vars() gesetzt hast. Die IF Abfrage im Template funktioniert dann wie bei PHP, ist die Bedingung true, dann wird der folgende Teil ausgegeben, ansonsten nicht.

Hilfreich ist da auch das "alte" Template System, bis auf wenige Ausnahmen funktioniert das so nämlich immer noch: KB:template_system, KB:template_syntax

Verfasst: 02.10.2008 10:25
von Slup
HiHo,

Ein wenig PHP und HTML kann ich aber so ganz blicke ich da nicht durch.
Hier mal Testweise mein Code, was habe ich dort vergessen oder falsch gemacht den es klappt nicht.

Code: Alles auswählen

$sql = "SELECT * 
			FROM " .  SPORN_TABLE ."
		WHERE sporn_id = " . $user->data['user_id'] . "
	";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result)

if ($row['sporn'id'] == 1] {
    $sporn_out = 'text';
}

$template->assign_block_vars(array(
         'S_SPORN'               => $sporn_out,
      )); 

Code: Alles auswählen

<!-- IF S_SPORN -->
    text
<!-- ENDIF -->

Verfasst: 02.10.2008 11:45
von 4seven
erstmal so

Code: Alles auswählen

$row['sporn_id']
und nicht so

Code: Alles auswählen

$row['sporn'id']
:wink:

Slup hat geschrieben:

Code: Alles auswählen

$template->assign_block_vars(array(
         'S_SPORN'               => $sporn_out,
      )); 

du solltest dem switch irgendwas anbieten, was true oder false werden kann (1 oder halt 0)

also

Code: Alles auswählen

$template->assign_block_vars(array(
         'S_SPORN'               => ($row['sporn_id']) == 1,
      )); 
oder

Code: Alles auswählen

$template->assign_block_vars(array(
         'S_SPORN'               => (($row['sporn_id']) == 1),
      )); 

falls es ein bool feld ist (radio:yes/no)
gehts auch so

Code: Alles auswählen

$template->assign_block_vars(array(
         'S_SPORN'               => ($row['sporn_id']) ? true : false,
      )); 
und das

Code: Alles auswählen

if ($row['sporn'id'] == 1] {
    $sporn_out = 'text';
} 
funktioniert so nicht. wenn dann so:

Code: Alles auswählen

if (($row['sporn'id']) == 1) {
    $sporn_out = 'text';
} 

Verfasst: 02.10.2008 14:51
von gn#36
assign_block_vars funktioniert nur, wenn du auch einen Block angibst zu dem die Variablen gehoeren sollen. (Ist dazu gedacht einen Teil sehr oft mit unterschiedlichen Daten auszugeben, z.B. die Posts werden damit ausgegeben) Wenn du das nicht hast, dann nimm assign_vars.