PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Template wird nicht angenommen


pixel-shock
03.07.2008, 23:27
Hallo zusammen,

ich bin grade dabei mir eine kleine SmileyBox mit extra Smileys unter den Editor zu setzen.

Klappt auch alles wunderbar, auch den Editor konnte ich an die Smileys anbinden (Stichwort editorid ;)), ich habe nur ein Problem mit den Smileys an sich.

Ich habe mir jetzt einfach eine Funktion in die "functions_newpost.php" geschrieben, die aus einem Ordner Bilder ausliest und diese dann zu seinem Gesamtstring mit img-Tag zusammensetzt und zurückgibt.
Lieber wäre es mir ehrlich gesagt, indem ich die SmileyKategorie aus der DB auslese, aber das kann ich hinterher auch noch machen - möchte das erstmal so testen ;)


function build_photoshopmenuicons() {
global $iconString;

$iconString = "";
$psicondateipfad = "./images/blub/";
$psiconhandle = opendir($psicondateipfad);

while ($psicons = readdir($psiconhandle)) {
if ($psicons != "." && $psicons != ".." && $psicons != "index.html") {
eval('$iconString .= "'.$psicons.'";');
}
}

return $iconString;
}
In der "newthread.php" wird dann diese Funktion mittels:


$addSmilies= build_addSmilies();
aufgerufen.

Somit sollte ja der String in der Variable $addSmilies stehen.

Als nächstes bin ich in das Template "posticons" gegangen, weil über den Thread- Symbolen die neuen Icons hinsollen.

und habe mit noch ein Fieldset hinzugefügt und dann $addSmilies innerhalb des fieldsets zu stehen, aber in der Ausgabe bleibt alles leer.

Ich habe bestimmt was wichtiges vergesssen, aber ich weiß leider nicht was, deshalb hoffe ich auf eure Hilfe :)

LG & DANKE
Tino

pixel-shock
04.07.2008, 14:20
Sodale, ich hab jetzt nochmal geändert aber es will einfach nicht funzen ;)

Also erstmal in der "functions_newpost.php" diese Funktion hinzugefügt:


function build_photoshopmenuicons() {
global $vbulletin, $stylevar;

($hook = vBulletinHook::fetch_hook('posticons_start')) ? eval($hook) : false;

$symbole = $vbulletin->db->query_read_slave("
SELECT iconid, iconpath, title
FROM " . TABLE_PREFIX . "icon AS symbol
");

while ($symbol = $vbulletin->db->fetch_array($symbole)) {
$symbolid = $symbol['iconid'];
$symbolpfad = $symbol['iconpath'];
$symboltext = $symbol['title'];

($hook = vBulletinHook::fetch_hook('posticon_photoshopmenuicons_bit')) ? eval($hook) : false;

eval('$posticon_photoshopmenuicons_bits .= "' . fetch_template('posticon_photoshopmenuicons_bit') . '";');

}


($hook = vBulletinHook::fetch_hook('posticons_complete')) ? eval($hook) : false;

eval('$photoshopmenuicons = "' . fetch_template('posticons') . '";');
return $photoshopmenuicons;

}


Anschließen ein Template mit dem Namen "posticon_photoshopmenuicons_bit" erzeugt und dem Inhalt:


<img src="$symbolpfad"/>


In der "newthread.php" meine Variable hinzugefügt:


$photoshopmenuicons = build_photoshopmenuicons();


Im Template "posticons" folgendes geadded:


<script type="text/javascript">
function open_close_photoshopmenuicons(divID) {
if (document.getElementById(divID).style.height == "250px") {
document.getElementById(divID).style.height = "0px";
document.getElementById(divID).style.overflow = "hidden";
document.getElementById(divID).style.paddingTop = "0px";
document.getElementById('showphotoshopmenuiconsbutton').value = "Zeige Photoshop Menu Icons";
} else if (document.getElementById(divID).style.height == "0px") {
document.getElementById(divID).style.height = "250px";
document.getElementById(divID).style.overflow = "visible";
document.getElementById(divID).style.paddingTop = "20px";
document.getElementById('showphotoshopmenuiconsbutton').value = "Verstecke Photoshop Menu Icons";
}

}
</script>

<fieldset class="fieldset">
<legend>Photoshop Menu Icons</legend>
<div style="padding:$stylevar[formspacer]px">
<table cellpadding="0" cellspacing="$stylevar[cellspacing]" border="0" width="95%">
<tr>
<td colspan="15"><input type="button" id="showphotoshopmenuiconsbutton" class="button" value="Zeige Photoshop Menu Icons" onclick="open_close_photoshopmenuicons('photoshopmenuicons_container_closed');" /></td>
</tr>
<tr>
<td nowrap="nowrap">
<div id="photoshopmenuicons_container_closed" style="height: 0px; overflow: hidden; padding-top: 0px;">
$photoshopmenuicons
</div>
<script type="text/javascript">
vB_Editor[editorid_icons].init_smilies(fetch_object('photoshopmenuicons_container_closed'));
</script>
</td>

</tr>
</table>
</div>
</fieldset>


Sollte doch eigentlich funktionieren oder nicht?

LG
Tino

pixel-shock
04.07.2008, 15:19
Sodale,

die Abfrage habe ich auch geändert und die funktionier auch, habe sie mal außerhalb von VB getestet:


$symbole = $vbulletin->db->query_read("
SELECT * FROM " . TABLE_PREFIX . "smilie AS psmenuicon
INNER JOIN " . TABLE_PREFIX . "imagecategory
ON psmenuicon.imagecategoryid = " . TABLE_PREFIX . "imagecategory.imagecategoryid
WHERE " . TABLE_PREFIX . "imagecategory.title
LIKE '%Photoshop%'
ORDER BY psmenuicon.title
");
LG
Tino

CandyMan
04.07.2008, 15:54
in posticons Template willst $posticon_photoshopmenuicons_bits aufrufen aber nimmst stattdessen die nicht gefüllte $photoshopmenuicons liegt da eventuell der fehler? Und rufe mal die funktion so auf also ohne variable zu zuweisen und wenn du eine variable nutzt dann solltest du die an der position in template stehen haben wo es ausgeben wird aber mit deiner funktion würdest du es ja 2 mal machen ergo obweder du rufst das template in der funktion nicht auf oder rufst nur rein die funktion auf ohne variable.

P.S: Sowas gehört eigentlich auf vbGO und nicht hier her^^

MfG CandyMan

pixel-shock
04.07.2008, 16:05
Hi CandyMan :)

DANKE für deine Antwort.

Ich habe das mit $photoshopmenuicons auch versucht und das ging nicht, deshalb habe ich das über die _bits probiert, weil VB das mit den posticons auch so macht - aber das ging auch nach hinten los ;)

Das mit der Position der Variable verstehe ich nicht so ganz wenn ich ehrlich sein soll, die steht direkt über der Variable für die PostIcons von VB, also auch da wo sie hin soll - oder verstehe ich dich falsch :)

Ich würde mir auch gerne mal die Variable ausgeben lassen, aber dann bekomme ich immer einen Seitenladefehler "Fehlerhafte Kodierung der Inhalte" :(

LG
Tino

ragtek
04.07.2008, 17:35
Wie versuchst du denn sie ausgeben zu lassen?

pixel-shock
04.07.2008, 17:58
naja mit eval('echo $photoshopmenuicons;');Aber ich habs jetzt auch mal mit eval('print_output("' . fetch_template('posticon_photoshopmenuicons_bit') . '");');probiert und das hat funktioniert, mein Problem ist anscheinend, dass im Template posticons meine Variable leer ist, aber ich weiß nicht warum.

LG
Tino

pixel-shock
04.07.2008, 18:14
Also wenn ich meine while- Schleife in die Funktion von VB schmeiße, die die PostIcons erstellt, dann klappt alles so wie ich will - jetzt habe ich die Vermutung, dass meine Icons irgendwie von den PostIcons überschrieben werden ich denke hierdurch:


($hook = vBulletinHook::fetch_hook('posticons_start')) ? eval($hook) : false;


LG
Tino

pixel-shock
04.07.2008, 22:24
Sodale - die Lösung :)

1.) Templates anlegen:

TEMPLATE "post_photoshopmenuicons":


<script type="text/javascript">
function open_close_photoshopmenuicons(divID) {
if (document.getElementById(divID).style.height == "100%") {
document.getElementById(divID).style.height = "0px";
document.getElementById(divID).style.overflow = "hidden";
document.getElementById(divID).style.paddingTop = "0px";
document.getElementById('showphotoshopmenuiconsbutton').value = "Zeige Photoshop Menu Icons";
} else if (document.getElementById(divID).style.height == "0px") {
document.getElementById(divID).style.height = "100%";
document.getElementById(divID).style.overflow = "visible";
document.getElementById(divID).style.paddingTop = "20px";
document.getElementById('showphotoshopmenuiconsbutton').value = "Verstecke Photoshop Menu Icons";
}

}
</script>

<fieldset class="fieldset">
<legend>Photoshop Menu Icons</legend>
<div style="padding:$stylevar[formspacer]px">
<table cellpadding="0" cellspacing="$stylevar[cellspacing]" border="0" width="95%">
<tr>
<td>
<input type="button" id="showphotoshopmenuiconsbutton" class="button" value="Zeige Photoshop Menu Icons" onclick="open_close_photoshopmenuicons('photoshopmenuicons_container');" />
</td>
</tr>
<tr>
<td>
<div id="photoshopmenuicons_container" style="height:0px; overflow: hidden; padding-top: 0px;">
<table align="center" id="photoshopmenuiconstable" cellpadding="2" cellspacing="0" border="0">
$post_photoshopmenuicons_bit
</table>
</div>
</td>
</tr>
</table>
<script type="text/javascript">
vB_Editor[editorid_icons].init_smilies(fetch_object('photoshopmenuiconstable'));
</script>
</div>
</fieldset>


TEMPLATE "post_photoshopmenuicons_bit“:


<td width="16">
<img src="$symbolpfad" alt="$symboltext" id="photoshopmenuicon_$symbolid"/>
</td>
<td width="210" style="padding-left: 10px;">
$symboltext
</td>


2.) PlugIns anlegen/ hinzufügen:

PLUGIN „Photoshop Menu Icons PlugIn 1” (aktivieren nicht vergessen)


eval('$post_photoshopmenuicons = "' . fetch_template('post_photoshopmenuicons') . '";');
eval('$post_photoshopmenuicons_bit = "' . fetch_template('post_photoshopmenuicons_bit') . '";');


PLUGIN „Photoshop Menu Icons PlugIn 2” (aktivieren nicht vergessen)


$globaltemplates = array_merge($globaltemplates, array('post_photoshopmenuicons'));
$globaltemplates = array_merge($globaltemplates, array('posticon_photoshopmenuicons_bit'));

3.) WYSIWYG Editor ID bekannt machen im TEMPLATE „editor_toolbar_on“

Suchen nach:


<script type="text/javascript">
<!--
vB_Editor['$editorid'] = new vB_Text_Editor('$editorid', $editortype, '$forumid', '$parsesmilie', undefined, '$ajax_extra');
//-->
</script>


Ersetzen durch:


<script type="text/javascript">
<!--
var editorid_icons = '$editorid';

vB_Editor['$editorid'] = new vB_Text_Editor('$editorid', $editortype, '$forumid', '$parsesmilie', undefined, '$ajax_extra');
//-->
</script>


Die Variable „editor_icons“ wird dann im erstellen TEMPLATE „post_photoshopmenuicons“ benutzt, um die Icons für den Editor zu initialisieren

4.) Funktion in der „functions_newpost.php“ hinzufügen:


function construct_photoshopmenuicons() {
global $vbulletin;

$anzahl = 0;

$symbole = $vbulletin->db->query_read("
SELECT " . TABLE_PREFIX . "smilie.smilieid, " . TABLE_PREFIX . "smilie.smilietext, " . TABLE_PREFIX . "smilie.title, " . TABLE_PREFIX . "smilie.smiliepath
FROM " . TABLE_PREFIX . "smilie
INNER JOIN " . TABLE_PREFIX . "imagecategory ON " . TABLE_PREFIX . "smilie.imagecategoryid = " . TABLE_PREFIX . "imagecategory.imagecategoryid
WHERE " . TABLE_PREFIX . "imagecategory.title LIKE '%Photoshop%Icons'
ORDER BY " . TABLE_PREFIX . "smilie.title
");

while ($symbol = $vbulletin->db->fetch_array($symbole)) {
$symbolid = $symbol['smilieid'];
$symbolpfad = $symbol['smiliepath'];
$symboltext = $symbol['title'];

if ($anzahl == 0) {
eval ('$post_photoshopmenuicons_bit.= "<tr>";');
}

eval('$post_photoshopmenuicons_bit.= "' . fetch_template('post_photoshopmenuicons_bit') . '";');
$anzahl++;

if ($anzahl == 3) {
eval ('$post_photoshopmenuicons_bit.= "</tr>";');
$anzahl = 0;
}
}

if ($anzahl != 0) {
eval ('$post_photoshopmenuicons_bit.= "</tr>";');
}

eval('$post_photoshopmenuicons = "' . fetch_template('post_photoshopmenuicons') . '";');

return $post_photoshopmenuicons;

}


7.) Zuweisen der Variable $post_photoshopmenuicons inkl. Funktionsaufruf in gewünschten Seiten wzB. „newpost.php“


[…]
if ($_REQUEST['do'] == 'newthread') {
// ICONS (einzige Veränderung in der PHP)
$post_photoshopmenuicons = construct_photoshopmenuicons();
[…]


6.) TEMPLATE VARIABLE in gewünschten TEMPLATES hinzufügen durch einsetzen von:


$post_photoshopmenuicons


Das wars (zumindest für meine Bedürfnisse - kann natürlich noch mittels Permissions an Userrechte angepasst werden) ;)

LG
Tino