Seite 2 von 2

Verfasst: 15.10.2006 12:44
von Reiner
CatZe hat geschrieben:schau Dir mal im Code an, wie der "delete" Button in dem viewpost.php realisiert wurde.. so muesste es auch mit deinem funktionieren
Da habe ich schon geschaut, aber das wird etwas komlipzierter realisiert. Da spielt auch die posting.php noch mit und nicht nur die posting_body.tpl.

Verfasst: 15.10.2006 12:45
von CatZe
naja, die posting.php ist der php Part, die posting_body.tpl der html Part

Verfasst: 15.10.2006 12:57
von Reiner
CatZe hat geschrieben:naja, die posting.php ist der php Part, die posting_body.tpl der html Part
Klar, nur kenne ich mich da dann nicht mehr aus. Simple Abfragen und Umbauten sind ja kein Ding, aber sobald es daran geht, Variablen zu definieren und zu übergeben, werde ich vermutlich mehr kaputt machen als es mir lieb ist :wink:

Es war halt meine Hoffung, daß das in der Art gehen müsste, wie Du sie schon angedeutet hast.

Vielleicht hat ja noch jemand eine Idee? :)

Verfasst: 15.10.2006 14:55
von gn#36
Nur durch Bearbeitung des Templates wird diese Änderung nicht funktionieren fürchte ich. phpBB 2 ist nicht in der Lage in Templates PHP Code auszuführen, dieser muss in den Steuerdateien stehen, in diesem Fall also posting.php. Eine Änderung hier ist aber nicht so schwierig. Du müsstest nicht einmal zwingend neue Variablen anlegen sofern du die Sprache auch "hardcoded" ertragen kannst. Dann muss nämlich nur die Abfrage in die posting.php und du baust einen

Code: Alles auswählen

<!-- BEGIN switch_user_is_admin_or_mod --> xxx <!-- END switch_user_is_admin_or_mod -->
um den HTML Code des Buttons herum, dieser wird dann von der Abfrage ein oder ausgeschaltet.

in der Datei ist eine Zeile

Code: Alles auswählen

$template->pparse('body');
Davor müsstest du die PHP Abfrage platzieren:

Code: Alles auswählen

if($userdata['user_level'] == ADMIN || $is_auth['auth_mod'])
{
$template->assign_block_vars('switch_user_is_admin_or_mod',array());
}
Dann wird im Falle eines Admins oder Mods eben dieser Block im Template gezeigt. Jetzt muss in diesem Block nur noch der passende HTML Code stehen, der die Buttons darstellt und der Scriptcode der sie zum Leben erweckt. Das kannst du dir aber bei den schon vorhandenen Buttons abschauen.
Ach so: Wichtig ist, dass die Switch Blöcke im Template in eigenen Zeilen stehen und nicht wie oben dargestellt mit anderem Zeugs in der gleichen Zeile. Das ein END Block die letzte Anweisung in einem Template ist ist ebenfalls zu vermeiden, mindestens ein Leerzeichen sollte noch kommen...
Wichtig: Alle Dateien vor der Änderung sichern! Ich habe das nicht getestet und übernehme keine Garantie!

Verfasst: 15.10.2006 15:39
von Reiner
@gn#36

Ich habe die beiden Änderungen mal eingebaut....

Die Abfrage in der posting.php funktioniert (Das habe ich mit einem print_r Statement überprüft). Ich musst eallerdings das Keyword 'Admin' durch eine '1' ersetzen. In der Variable 'user_level' steht für den Admin eine '1'.

Allerdings funktioniert der Schalter im tpl nicht. Der Button wird nie angezeigt (Ausser ich baue den Schalter aus. D.h. prinzipiell ist der Code für den Button wohl richtig).
Der Code im Template sieht so aus:

Code: Alles auswählen

<!-- BEGIN switch_user_is_admin_or_mod -->
          <input type="button" class="button" name="imageupload"  value="Archiv" onClick="window.open('{U_GALLERY2}?g2_itemId=726', 'Archiv');" onMouseOver="helpline('h')" />
<!-- END switch_user_is_admin_or_mod -->
edit:
Hat niemand eine Idee, warum dieser switch nicht funktionieren könnte?

Verfasst: 15.10.2006 23:30
von gn#36
Die Konstante ADMIN sollte eigentlich als 1 in der constants.php definiert sein und sollte daher ebenfalls verwendbar sein (ich halte das für besser, da man genau sehen kann was abgefragt wird wenn man in den Code schaut. Eine 1 ist da sicher nichtssagender).

Bei mir funktioniert der Code genau so wie ich ihn gepostet habe einwandfrei, inklusive Switch. (auch mit genau dem Switch den du gepostet hast)
Stelle also sicher dass du die codeabfrage VOR dem pparse platziert hast und dass im Template die BEGIN und END Anweisungen eine komplett eigene Zeile bekommen mit keinem sonstigen Inhalt (Leerzeichen ausgenommen). Wenn das nicht klappt weiß ich nicht was falsch sein könnte.

Verfasst: 16.10.2006 15:52
von Reiner
Ahh.. o.k. ... Das mit der Admin-Konstanten wusste ich nicht (Wieder was gelernt :wink: )

Zum Problem... Ich verzweifel langsam.... Das ist doch eigentlich derart einfach, daß man doch jedes Problem sehen sollte :roll:
Ich habe jetzt schon den Namen des switch geändert und per copy&paste überall neu eingefügt, um irgendwelche dummen Fehler zu vermeiden.
Die Begin und END Zeile im template liegen definitiv alleine in ihren Zeilen.
Der Button funktioniert wenn ich meinen Switch entferne.
Andere Switches funktionieren in dem template.

So sieht das letzte Ende meiner posting.php aus (Die Variable wird also vor dem parse definiert):

Code: Alles auswählen

//
// Topic review
//
if( $mode == 'reply' && $is_auth['auth_read'] )
{
	require($phpbb_root_path . 'includes/topic_review.'.$phpEx);
	topic_review($topic_id, true);

	$template->assign_block_vars('switch_inline_mode', array());
	$template->assign_var_from_handle('TOPIC_REVIEW_BOX', 'reviewbody');
}


if ($userdata['user_level'] == 1 || $is_auth['auth_mod'])
{

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

}

$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
Und so sieht der switch mit etwas mehr Umgebung in meinem posting_body.tpl aus:

Code: Alles auswählen

<td colspan="9" nowrap="nowrap" align="right">
				
            <span class="genmed">

            <!-- BEGIN switch_show_archiv_button --> 
          <input type="button" class="button" name="imageupload"  value="MOD-Archiv" onClick="window.open('{U_GALLERY2}?g2_itemId=726', 'MOD-Archiv');" onMouseOver="helpline('h')" />
            <!-- END switch_show_archiv_button --> 

                
        <input type="button" class="button" name="imageupload" value="NP Bilderserver" onClick="window.open('{U_GALLERY2}', 'Bildupload');" onMouseOver="helpline('h')" />
        <input type="button" class="button" name="g2image" value="Bild einbinden" onClick="g2ic_open('post', 'message');" onMouseOver="helpline('g')" />

				</span>
			</td>

Verfasst: 16.10.2006 21:32
von gn#36
Tja, sieht eigentlich richtig aus. Das einzige was ich mir vorstellen könnte wäre dass sich dieser Block im Template in einem anderen Block befindet. Dann müsste der Aufruf etwas anders aussehen:

Code: Alles auswählen

$template->assign_block_vars('anderer_block.innerer_block',array());

Verfasst: 17.10.2006 15:38
von Reiner
Hallo,

wollte das gestern schon schreiben, aber da hing das Board hier irgendwie....

Ich habe das Problem gefunden!
Ichhatte den Code per Copy&paste aus dem Forum hier in meine posting_body.tpl kopiert.
Anscheinend haben sich da auch irgendwelche Zeichen mitkopiert, die in meinem Editor nicht sichtbar waren.
Habe dann mal sämtliche "Leerzeichen" und Zeilenumbrüche zwischen den drei Zeilen entfernt und im Editor neu eingefügt. Seither klappt es :!:

Danke für die Hilfe, jetzt habe ich genau das, was ich wollte :)