Variablenübergabe an Template

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Variablenübergabe an Template

Beitrag von Groovecommander »

Hallo,

ich habe mir ein kleines Script geschrieben, dass die neusten und am meist heruntergeladenen Downloads anzeigt (ja ich weiß, dass gibst schon tausendfach, aber nun gibt es es tausendundeinfach :wink: ).

Mein Problem kommt hier:

Code: Alles auswählen

while ($zeile[neu]=mysql_fetch_array($neuste))
	{ ?><tr>
		<td width="100"><?php echo $zeile[neu]["file_name"];?><br></td>
		</tr>
		<?php 
	}
Hier werden mir nun die 5 neusten Downloads ausgegeben, aber wie kann ich das jetzt in die Template Syntax überführen?

In etwa so ?

Code: Alles auswählen

'neuste'=>$zeile[neu]["file_name"];

Dann {neuste} im Template, funktioniert so nicht.
Zuletzt geändert von Groovecommander am 11.08.2004 13:52, insgesamt 2-mal geändert.
Benutzeravatar
frieder
Mitglied
Beiträge: 836
Registriert: 06.03.2004 21:36
Wohnort: Gifhorn

Beitrag von frieder »

Mit freundlichen Grüßen
Frieder
Ex-1. April Admin von phpBB.de :D
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Beitrag von Groovecommander »

Wenn ich das ganze so schreibe:

Code: Alles auswählen

while ($zeile[neu]=mysql_fetch_array($neuste))
	{ $temp=$zeile[neu]["file_name"];
		 
	}
und im Template dann {temp}, bekomme ich nur ein Ergebnis.
Ich möchte aber alle 5 haben. Wie kann ich das machen, das alle 5 in einer Varibalen gespeichert werden?

Vielen Dank
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Beitrag von Groovecommander »

ok, vielleicht habe ich mich etwas verdrückt ausgekehrt:

Ich habe ein Problem mit dem Ausgeben von Variablen. Ich möchte meine 5 neusten Downloads anzeigen lassen und bekomme aber immer nur ein leeres Template zu sehen.
Bei mir ist es so, das ich eine while-Schleife habe und diese genau 5 Werte ausgibt. Wenn ich das ganze ohne Template mache, sieht es folgendermaßen aus:

Code: Alles auswählen

<?php $neuste=mysql_query("SELECT * FROM pafiledb_files ORDER BY file_time DESC LIMIT $maxfiles");
    if (!$neuste)
        {
        die ("konnte NEUSTE nicht ermitteln");
        }
?>
<tr><td>Die 5 neusten Downloads</td></tr><br><br>
<?php
while ($row[neu]=mysql_fetch_array($neuste))
    { ?><tr>
        <td width="100"><?php echo $row[neu]["file_name"];?><br></td>
        </tr>
        <?php
    }

Wie man sieht, werden mit echo $zeile[neu]["file_name"]; die Ergebnisse aungezeigt (insgesamt 5, habe ich vorher durch $maxfiles definiert).

Nun meine Frage, wie kann ich diese Variable in mein Template einbauen und zwar so, dass alle 5 wiedergegeben werden.

Vielen Dank im voraus.
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Du benutzt bei der Datei aber schon das phpBB-Grundgerüst oder (um $template zu nutzen)?

Code: Alles auswählen

     $template->assign_block_vars('irgendwas', array(
            'NEUESTE' => $row[neu]["file_name"],
     ));
..das müsste innerhalb der while-Schleife platziert und dann mit folgendem in der *.tpl ausgegeben werden.

Code: Alles auswählen

<!-- BEGIN irgendwas -->
   {irgendwas.NEUESTE}
<!-- END irgendwas -->
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Beitrag von Groovecommander »

Vielen Dank erstaml für Deine Antwort. So wie Du es hier beschreibst, habe ich es bereits versucht, aber ohne Erfolg. Mein Template bleibt immer leer. Vielleicht sollte ich noch erwähnen, dass ich eine extra Box für das AWSW Portal erstellt habe und darin soll dann eben der neuste Download erscheinen.

Ich habe inzwischen ein andere Lösung gefunden, wie ich meine neusten Downloads angezeigt bekomme. Aber die ist wirklich icht im Sinne des Erfinders, deshalb suche ich immer noch nach einer (phpBB gerechten) Lösung. Denn meine ist einfach viel zu umständlich :(


Hier meine Lösung (portal.php)

Code: Alles auswählen

//Abfrage der neusten Dateien
$neuste=mysql_query("SELECT * FROM pafiledb_files ORDER BY file_time DESC LIMIT $maxfiles");
	if (!$neuste) 
		{ 
		die ("konnte NEUSTE nicht ermitteln"); 
		}

		$zeile[1][1]=mysql_fetch_array($neuste);
		$zeile[2][1]=mysql_fetch_array($neuste);
		$zeile[3][1]=mysql_fetch_array($neuste);
		$zeile[4][1]=mysql_fetch_array($neuste);
		$zeile[5][1]=mysql_fetch_array($neuste);

//Abfrage der FILE ID der neusten Datein
$fileid_neuste = mysql_query("SELECT * FROM pafiledb_files ORDER BY file_time DESC LIMIT $maxfiles");
if (!$fileid_neuste) 
		{ 
		die ("konnte FILEID_NEUSTE nicht ermitteln"); 
		}
		$zeile[1][5]=mysql_fetch_array($fileid_neuste);
		$zeile[2][5]=mysql_fetch_array($fileid_neuste);
		$zeile[3][5]=mysql_fetch_array($fileid_neuste);
		$zeile[4][5]=mysql_fetch_array($fileid_neuste);
		$zeile[5][5]=mysql_fetch_array($fileid_neuste);
		
$template->assign_block_vars('switch_downloadfetch_active', array(
$template->assign_vars(array(

'NEUSTE1'=> substr($zeile[1][1]["file_name"],0,20),
'NEUSTE2'=> substr($zeile[2][1]["file_name"],0,20),
'NEUSTE3'=> substr($zeile[3][1]["file_name"],0,20),
'NEUSTE4'=> substr($zeile[4][1]["file_name"],0,20),
'NEUSTE5'=> substr($zeile[5][1]["file_name"],0,20),
'FILEID_NEU1'=> $zeile[1][5]["file_id"],
'FILEID_NEU2'=> $zeile[2][5]["file_id"],
'FILEID_NEU3'=> $zeile[3][5]["file_id"],
'FILEID_NEU4'=> $zeile[4][5]["file_id"],
'FILEID_NEU5'=> $zeile[5][5]["file_id"],

// TEMPLATE CODE VARS END
))
));
}
portal_body.tpl

Code: Alles auswählen

<!-- ##### DOWNLAODFETCH START ##### -->
<!-- BEGIN switch_downloadfetch_active -->
<table width="100%" border="0" cellpadding="1" cellspacing="1" class="forumline">
<tr>
<td class="headercell" colspan="2" height="15"><span class="cattitle">
<center>Download Stats</center>
</span></td>
</tr>
<tr>
<td colspan="2" height="1" class="row3"><img src="images/spacer.gif" width="1" height="1" alt="."></td>
</tr>
<!-- 5 neusten Downloads -->
<tr>
	<td class="row1"><span class="gensmall"><b><center>Die 5 neuen</center></b><br>
		<a href="pafiledb/pafiledb.php?action=file&id={FILEID_NEU1}">{NEUSTE1}</a>...<br>
		<a href="pafiledb/pafiledb.php?action=file&id={FILEID_NEU2}">{NEUSTE2}</a>...<br>
		<a href="pafiledb/pafiledb.php?action=file&id={FILEID_NEU3}">{NEUSTE3}</a>...<br>
		<a href="pafiledb/pafiledb.php?action=file&id={FILEID_NEU4}">{NEUSTE4}</a>...<br>
		<a href="pafiledb/pafiledb.php?action=file&id={FILEID_NEU5}">{NEUSTE5}</a>...</span><br><br>
	</td>
</tr>
Nicht wundern, wenn bei den mehrdimesionalen Arrays die Zahlen so wirr durcheinander gewählt sind, aber ich habe mir dann gleich noch (nach Schema F) die meist heruntergeladenen Downloads anzeigen lassen.

Ansonsten würde ich wirklich noch gerne wissen, wie ich das "richtig" mit den Templates mache. Komme halt nicht so ganz klar damit. :x
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Verschoben

Beitrag von Acid »

Verschoben von Coding & Technik nach Modifikationen
switch_downloadfetch_active
Stammt das von der neu angelegten Portalbox?

Wenn ja, dann ist das eine aktive Switchanweisung für´s Template, die dann mit dem von mir geposteten Code verbunden werden müsste.
In der .tpl müsste es dann in etwa so aussehen..

Code: Alles auswählen

<!-- BEGIN switch_downloadfetch_active -->
      <!-- BEGIN irgendwas -->
           {irgendwas.NEUESTE}
      <!-- END irgendwas -->
<!-- END switch_downloadfetch_active -->
..und in der .php dann etwa so..

Code: Alles auswählen

     template->assign_block_vars('switch_downloadfetch_active.irgendwas', array());
     $template->assign_block_vars('irgendwas', array(
            'NEUESTE' => $row[neu]["file_name"],
     ));
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Beitrag von Groovecommander »

Also, ich bin der Sache schon näher...
Mir wird jetzt 5 mal die Box mit jeweils dem neusten Download angezeigt. Ich habe schon einige Varianten ausprobiert, doch leider funktioniert es nicht wirklich.

Mein php code in der portl.php

Code: Alles auswählen

// SWITCH PORTALSTATS START
if( $introportalmod_config['pastats_active'] == "1" )
{
	$maxfiles = 5;
	$neuste=mysql_query("SELECT * FROM pafiledb_files ORDER BY file_time DESC LIMIT $maxfiles");
   	 if (!$neuste)
      	  {
    	    die ("konnte NEUSTE nicht ermitteln");
          }

	while ($zeile[neu]=mysql_fetch_array($neuste))
	{ 
	  $template->assign_block_vars('switch_pastats_active.irgendwas', array());
   	  $template->assign_block_vars('irgendwas', array(
           'NEUESTE' => $zeile[neu]["file_name"], ));
	}

	$template->assign_block_vars('switch_pastats_active', array(
	$template->assign_vars(array(

	// TEMPLATE CODE VARS START
	'PASTATS1' => $lang['pastats1'],
	// TEMPLATE CODE VARS END
	))
	));
}
// SWITCH PORTALSTATS END
und der *.tpl.
<!-- ##### PASTATS START ##### -->
<!-- BEGIN switch_pastats_active -->
<table width="100%" border="0" cellpadding="1" cellspacing="1" style="border-collapse: collapse" class="forumline">
<tr>
<td class="catHead" colspan="2" height="25"><span class="cattitle">
{PASTATS1}:
</span></td>
</tr>
<tr>
<td colspan="2" height="1" class="row3"><img src="images/spacer.gif" width="1" height="1" alt="."></td>
</tr>
<tr>
<td align="center" nowrap="nowrap" class="row1"><span class="gensmall">
<!-- 5 neusten Downloads -->
<!-- BEGIN irgendwas -->
{irgendwas.NEUESTE}
<!-- END irgendwas -->
</span></td>
</tr>
</table>
<!-- END switch_pastats_active -->
<!-- ##### PASTATS END ##### -->
Wie gesagt, ich habe jetzt 5 mal die Box mit dem neusten Download, aber ich wollte ja 5 Downloads in einer Box... :o
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Wenn du testweise echo $zeile[neu][file_name]; innerhalb der while-Schleife ausgibst, werden dir die 5 neuesten Downloads angezeigt?
Groovecommander
Mitglied
Beiträge: 119
Registriert: 26.03.2004 16:39

Beitrag von Groovecommander »

[ externes Bild ]

so siehst dann aus. Man sieht halt die Downloads oberhalb des Portals(sind halt irgendwelche Testdownloads). Oberhalb der Navigation ist dann die Box zu sehen, die die Downloads anzeigen sollte (Header AddonBox:)

portal.php

Code: Alles auswählen

// SWITCH PORTALSTATS START
if( $introportalmod_config['pastats_active'] == "1" )
{
	$maxfiles = 5;
	$neuste=mysql_query("SELECT * FROM pafiledb_files ORDER BY file_time DESC LIMIT $maxfiles");
   	 if (!$neuste)
      	  {
    	    die ("konnte NEUSTE nicht ermitteln");
          }

	while ($zeile[neu]=mysql_fetch_array($neuste))
	{ 
	 echo $zeile[neu][file_name];
		}

	$template->assign_block_vars('switch_pastats_active', array(
	$template->assign_vars(array(

	// TEMPLATE CODE VARS START
	'PASTATS1' => $lang['pastats1'],
	// TEMPLATE CODE VARS END
	))
	));
}
// SWITCH PORTALSTATS END
*.tpl


Code: Alles auswählen

<!-- ##### PASTATS START ##### -->
<!-- BEGIN switch_pastats_active -->
<table width="100%" border="0" cellpadding="1" cellspacing="1" style="border-collapse: collapse" class="forumline">
<tr>
<td class="catHead" colspan="2" height="25"><span class="cattitle">
{PASTATS1}:
</span></td>
</tr>
<tr>
<td colspan="2" height="1" class="row3"><img src="images/spacer.gif" width="1" height="1" alt="."></td>
</tr>
<tr>
<td align="center" nowrap="nowrap" class="row1"><span class="gensmall">
<!-- 5 neusten Downloads -->

      <!-- BEGIN irgendwas -->
           {irgendwas.NEUESTE}
      <!-- END irgendwas -->


<!-- CODE -->
</span></td>
</tr>
</table>
<!-- END switch_pastats_active -->
<!-- ##### PASTATS END ##### -->
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“