Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.27 veröffentlicht (22.06.21)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Parse Error im Pluginscript
#1
Hallo Community

Da ich ja einen Link zum YouTube Channel in einem Profil anzeigen lassen habe, möchte ich es mit einem Plugin für andere Nutzer vereinfachen. Jedoch gibt es Probleme. Es gibt immer nur "Parse error: syntax error, unexpected T_STRING in /var/syscp/webs/gamenews/forum/inc/plugins/ytprofile.php on line 42." aus.

Code:
Code:
<?php

if(!defined("IN_MYBB"))
{
  die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

$plugins->add_hook("datahandler_user_update", "ytprofile_update");

function ytprofile_info()
{
  return array(
        "name"            => "YouTube Channel im Profil",
        "description"    => "Erlaubt im Profil einen Link zum YouTube Channel anzugeben",
        "website"        => "http://falkenauge.kilu.de",
        "author"        => "Daniel Gatti",
        "authorsite"    => "http://falkenauge.kilu.de",
        "version"        => "1.0",
        "guid"            => "6cf34b98912ceb938211f8873f83cef1",
        "compatibility" => "14*",
  );
}

function ytprofile_activate()
{
  global $db;
  
  /* TODO: Should the possibility be added to disable ytprofile from admin cp? */
  $db->query("ALTER TABLE ".TABLE_PREFIX."users  ADD ytprofile VARCHAR(50) unsigned NOT NULL AFTER website");
  
  /* TODO: Language support? */
  require_once MYBB_ROOT."inc/adminfunctions_templates.php";

  /* Insert fields into usercp for editing */
  find_replace_templatesets('usercp_profile','#{\$user\[\'website\'\]\}\" /\></td>#',
         '{$user[\'website\']}" /></td>
</tr>
<tr>
<td colspan="3"><span class="smalltext">YouTube Channel:</span></td>
</tr>
<tr>
<td><input type="text" class="textbox" name="YouTube Channel" size="25" maxlength="75" value="{$user['ytprofile']}" /></td>
</tr>');

  /* Insert fields into member profile */
  find_replace_templatesets('member_profile','#{\$memprofile\[\'website\'\]\}</a></td>#',
        '{$memprofile[\'website\']}</a></td>
</tr>
<tr>
<td class="trow1"><strong>YouTube Channel</strong></td>
<td class="trow1"><a href="http://www.youtube.com/user/{$memprofile['ytprofile']}" target="_blank">{$memprofile['ytprofile']}</a></td>
</tr>');
}

function ytprofile_deactivate()
{
  global $db;

  $db->query("ALTER TABLE ".TABLE_PREFIX."users DROP COLUMN ytprofile");

  require_once MYBB_ROOT."inc/adminfunctions_templates.php";

  find_replace_templatesets('usercp_profile',
      preg_quote('#{$user[\'website\']}" /></td>
</tr>
<tr>
<td colspan="3"><span class="smalltext">YouTube Channel:</span></td>
</tr>
<tr>
<td><input type="text" class="textbox" name="YouTube Channel" size="25" maxlength="75" value="{$user['ytprofile']}" /></td>
</tr>#'),
      '{$user[\'website\']}" /></td>',0);

   find_replace_templatesets('member_profile',
        preg_quote('#{$memprofile[\'website\']}</a></td>
</tr>
<tr>
<td class="trow1"><strong>YouTube Channel</strong></td>
<td class="trow1"><a href="http://www.youtube.com/user/{$memprofile['ytprofile']}" target="_blank">{$memprofile['ytprofile']}</a></td>
</tr>#'),
      '{$memprofile[\'website\']}</a></td>',0);
}

function ytprofile_update($ytprofile)
{
  global $mybb;

  if (isset($mybb->input['ytprofile']))
   {
      $ytprofile->user_update_data['ytprofile'] = $mybb->input['ytprofile'];
   }
}

Ich habe zur Hilfe ein ähnliches Plugin genommen. Funktioniert ja leider nicht, ich hoffe, ihr könnt mir helfen.

Für die dies interessieren:
Skype schrieb:[04:52:47] Robert: immer ruhig bleiben, sonst wird das nix
[04:54:13] Maverick: Naja, ich poste jetzt eh grade im MyBB Coder Forum
[04:54:37] Robert: schnell verstärkung holen ^^
[04:55:22] Maverick: Richtig^^
Zitieren
#2
Ich weiß nicht, ob das hier in der Ansicht nur falsch dargestellt wurde, aber in der Zeile 35 gibt es diesen Ausdruck "\$user\[\'website\'\]". Danach hast Du einen Backslash gesetzt. Nimm den mal raus.

Vielleicht ist es besser, den Code als php-File hier anzuhängen.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#3
{$user['ytprofile']} fehlen die \ vor den '

bei anderen auch

die anderen \ sind unnötig

Sowas würde ich nicht von hand escapen sondern mit einem Script.

Sofern es in PHP keine bessere Möglichkeit gibt, solche Strings zu basteln. Unter Python kann man das mit '''string''' oder """string""" schreiben, bei PHP kenn ich sowas nicht, aber PHP könnte man die ob_ Funktionen dazu missbrauchen.
Zitieren
#4
Ah danke, der Eror ist weg und wird jetzt korrekt im Plugin-Manager angezeigt.

Wenn noch etwas ist, werde ich mich nochmal melden.
Zitieren
#5
Ok, funzt zwar, aber im Template "usercp_profile" werden keine Änderungen vorgenommen. In "member_profile" aber schon. Im Script ist der Code eigentlich richtig hinterlegt. Ich lasse euch mal drin schnuppern.

Code:
<?php

if(!defined("IN_MYBB"))
{
  die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

$plugins->add_hook("datahandler_user_update", "ytprofile_update");

function ytprofile_info()
{
  return array(
        "name"            => "YouTube Channel im Profil",
        "description"    => "Erlaubt im Profil den Namen eines YouTube Channels anzugeben, der dann als Direktlink angezeigt wird.",
        "website"        => "http://falkenauge.kilu.de",
        "author"        => "Daniel Gatti",
        "authorsite"    => "http://falkenauge.kilu.de",
        "version"        => "1.0",
        "guid"            => "6cf34b98912ceb938211f8873f83cef1",
        "compatibility" => "14*",
  );
}

function ytprofile_activate()
{
  global $db;
  
  /* TODO: Should the possibility be added to disable ytprofile from admin cp? */
  $db->query("ALTER TABLE ".TABLE_PREFIX."users  ADD ytprofile VARCHAR(50) NOT NULL AFTER website");
  
  /* TODO: Language support? */
  require_once MYBB_ROOT."inc/adminfunctions_templates.php";

  /* Insert fields into usercp for editing */
  find_replace_templatesets('usercp_profile','#{$user[\'website\']}" /></td>#',
        '{$user[\'website\']}" /></td>
</tr>
<tr>
<td colspan="3"><span class="smalltext">YouTube Channel:</span></td>
</tr>
<tr>
<td><input type="text" class="textbox" name="YouTube Channel" size="25" maxlength="50" value="{$user[\'ytprofile\']}" /></td>
</tr>');

  /* Insert fields into member profile */
  find_replace_templatesets('member_profile','#{$memprofile[\'website\']}</a></td>#',
        '{$memprofile[\'website\']}</a></td>
</tr>
<tr>
<td class="trow1"><strong>YouTube Channel</strong></td>
<td class="trow1"><a href="http://www.youtube.com/user/{$memprofile[\'ytprofile\']}" target="_blank">{$memprofile[\'ytprofile\']}</a></td>
</tr>');
}

function ytprofile_deactivate()
{
  global $db;

  $db->query("ALTER TABLE ".TABLE_PREFIX."users DROP COLUMN ytprofile");

  require_once MYBB_ROOT."inc/adminfunctions_templates.php";

  find_replace_templatesets('usercp_profile',
      preg_quote('#{$user[\'website\']}" /></td>
</tr>
<tr>
<td colspan="3"><span class="smalltext">YouTube Channel:</span></td>
</tr>
<tr>
<td><input type="text" class="textbox" name="YouTube Channel" size="25" maxlength="50" value="{$user[\'ytprofile\']}" /></td>
</tr>#'),
      '{$user[\'website\']}" /></td>',0);

   find_replace_templatesets('member_profile',
        preg_quote('#{$memprofile[\'website\']}</a></td>
</tr>
<tr>
<td class="trow1"><strong>YouTube Channel</strong></td>
<td class="trow1"><a href="http://www.youtube.com/user/{$memprofile[\'ytprofile\']}" target="_blank">{$memprofile[\'ytprofile\']}</a></td>
</tr>#'),
      '{$memprofile[\'website\']}</a></td>',0);
}

function ytprofile_update($ytprofile)
{
  global $mybb;

  if (isset($mybb->input['ytprofile']))
   {
      $ytprofile->user_update_data['ytprofile'] = $mybb->input['ytprofile'];
   }
}
Zitieren
#6
Ich bin der Meinung, Du müsstest bei ytprofile_activate() die Variablen escapen:
Code:
find_replace_templatesets('usercp_profile','#{$user[\'website\']}" /></td>#',
        '{\$user[\'website\']}" /></td>
</tr>
<tr>
<td colspan="3"><span class="smalltext">YouTube Channel:</span></td>
</tr>
<tr>
<td><input type="text" class="textbox" name="YouTube Channel" size="25" maxlength="50" value="{\$user[\'ytprofile\']}" /></td>
</tr>');

  /* Insert fields into member profile */
  find_replace_templatesets('member_profile','#{\$memprofile[\'website\']}</a></td>#',
        '{\$memprofile[\'website\']}</a></td>
</tr>
<tr>
<td class="trow1"><strong>YouTube Channel</strong></td>
<td class="trow1"><a href="http://www.youtube.com/user/{\$memprofile[\'ytprofile\']}" target="_blank">{\$memprofile[\'ytprofile\']}</a></td>
</tr>');
}
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#7
Funktioniert auch nicht, keine Änderungen im Template....
Zitieren
#8
Ich habe das jetzt mal ausprobiert und eine Datei angehängt. Damit hat es nun bei mir funktioniert.

Die Templateersetzung habe ich mit preg_quote umgesetzt. Des weiteren gibt es im Template member_profile gar keine Variable $memprofile['website']. Diese wird in der member.php verwendet um daraus die Variable $website zu erstellen. Das habe ich in der Datei entsprechend berücksichtigt.

Hoffe, das hilft Dir weiter.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#9
Das einzigste Problem ist einfach noch, dass nix im Feld gespeichert wird. Total komisch...
Zitieren
#10
Komisch ist das eigentlich nicht. Es werden bislang ja mehr oder weniger nur Templates geändert. Es wird ja z.B. noch ein Platz in der DB benötigt, in der die Daten gespeichert und wieder abgerufen werden können.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren