Statt Custom BBCode ein Ersatz-Bild parsen - Wie?
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Statt Custom BBCode ein Ersatz-Bild parsen - Wie?
Hallo,
mit dem Plugin Vereinfachtes Verbieten und Erlauben der BBCodes habe ich es schon geschafft, das Benutzen und damit Posten von BBCodes und Custom-BBCodes für Gäste, User und Gruppen zu restriktieren.
In dem Snippet No_Pics_4_Guests habe ich ferner realisiert, das für Gäste statt dem tatsächlich geposteten Bild ein Ersatz-Bild angezeigt wird. Klappt auch super und zuverlässig, da der [img]-Tag dem Include-System (bbcode.php) bekannt ist.
So, nun mein Problem, an dem ich schon einige Tage hänge und nicht weiterkomme:
Wie erreiche ich das für einen Custom-BBCode, also selbst angelegten, wie [youtube], der dem Include-System vom phpbb3 auf php-Ebene (zumindest erstmal) nicht bekannt ist ?
Ich bin mir ziemlich sicher, das es die message_parser.php oder bbcode.php ist, wo man ansetzen müsste, aber ich bin hier auf sql/php-Ebene know-how technisch an der Grenze angelangt. Mit der Bitte um Hilfe.
lg
4seven
mit dem Plugin Vereinfachtes Verbieten und Erlauben der BBCodes habe ich es schon geschafft, das Benutzen und damit Posten von BBCodes und Custom-BBCodes für Gäste, User und Gruppen zu restriktieren.
In dem Snippet No_Pics_4_Guests habe ich ferner realisiert, das für Gäste statt dem tatsächlich geposteten Bild ein Ersatz-Bild angezeigt wird. Klappt auch super und zuverlässig, da der [img]-Tag dem Include-System (bbcode.php) bekannt ist.
So, nun mein Problem, an dem ich schon einige Tage hänge und nicht weiterkomme:
Wie erreiche ich das für einen Custom-BBCode, also selbst angelegten, wie [youtube], der dem Include-System vom phpbb3 auf php-Ebene (zumindest erstmal) nicht bekannt ist ?
Ich bin mir ziemlich sicher, das es die message_parser.php oder bbcode.php ist, wo man ansetzen müsste, aber ich bin hier auf sql/php-Ebene know-how technisch an der Grenze angelangt. Mit der Bitte um Hilfe.
lg
4seven
- djchrisnet
- Mitglied
- Beiträge: 1275
- Registriert: 29.06.2007 15:52
- Wohnort: Elmshorn
- Kontaktdaten:
Code: Alles auswählen
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
WHERE ' . $db->sql_in_set('bbcode_id', $sql);
$result = $db->sql_query($sql, 3600);
Code: Alles auswählen
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
WHERE ' . $db->sql_in_set('bbcode_id', $sql) . "
AND bbcode_tag != 'youtube'";
$result = $db->sql_query($sql, 3600);
Der Tip war schonmal Gold wert, Danke
Sieht jetzt in der bbcode.php so aus***
Resultat > http://sekuro.se.funpic.de/phpbb3/viewt ... &f=13&t=16
youtube wird nicht geparst, sondern im Klartext ausgeworfen.
Schonmal ein Zwischenschritt
Jetzt hänge ich an der Stelle, das statt des non-parsing ein Ersatzbild ausgeworfen wird
***

Sieht jetzt in der bbcode.php so aus***
Resultat > http://sekuro.se.funpic.de/phpbb3/viewt ... &f=13&t=16
youtube wird nicht geparst, sondern im Klartext ausgeworfen.
Schonmal ein Zwischenschritt
Jetzt hänge ich an der Stelle, das statt des non-parsing ein Ersatzbild ausgeworfen wird

***
Code: Alles auswählen
if (sizeof($sql))
{
global $db;
if ($user->data['user_id'] == ANONYMOUS)
{
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
WHERE ' . $db->sql_in_set('bbcode_id', $sql) . "
AND bbcode_tag != 'youtube'";
$result = $db->sql_query($sql, 3600);
while ($row = $db->sql_fetchrow($result))
{
// To circumvent replacing newlines with <br /> for the generated html,
// we use carriage returns here. They are later changed back to newlines
$row['bbcode_tpl'] = str_replace("\n", "\r", $row['bbcode_tpl']);
$row['second_pass_replace'] = str_replace("\n", "\r", $row['second_pass_replace']);
$rowset[$row['bbcode_id']] = $row;
}
$db->sql_freeresult($result);
}
else
{
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
WHERE ' . $db->sql_in_set('bbcode_id', $sql);
$result = $db->sql_query($sql, 3600);
while ($row = $db->sql_fetchrow($result))
{
// To circumvent replacing newlines with <br /> for the generated html,
// we use carriage returns here. They are later changed back to newlines
$row['bbcode_tpl'] = str_replace("\n", "\r", $row['bbcode_tpl']);
$row['second_pass_replace'] = str_replace("\n", "\r", $row['second_pass_replace']);
$rowset[$row['bbcode_id']] = $row;
}
$db->sql_freeresult($result);
}}
Hallo 4seven,
für die Custom BBCodes ist die funktions_display.php verantwortlich, hier die entsprechende Stelle:
Du könntest hier z.B. über eine zusätzliche Spalte in der Tabelle phpbb3_bbcodes die Berechtigungen mit verarbeiten. Dann könnte man noch im ACP eine zusätzliche Abfrage einbauen, welche Gruppe diesen BBCode verwenden darf. In dieser Funktion kannst du auch die Reihenfolge der Anzeige (ORDER BY bbcode_tag) festlegen.
Gruß Helmut
für die Custom BBCodes ist die funktions_display.php verantwortlich, hier die entsprechende Stelle:
Code: Alles auswählen
function display_custom_bbcodes()
{
global $db, $template;
// Start counting from 22 for the bbcode ids (every bbcode takes two ids - opening/closing)
$num_predefined_bbcodes = 22;
$sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline
FROM ' . BBCODES_TABLE . '
WHERE display_on_posting = 1
ORDER BY bbcode_tag';
$result = $db->sql_query($sql);
$i = 0;
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('custom_tags', array(
'BBCODE_NAME' => "'[{$row['bbcode_tag']}]', '[/" . str_replace('=', '', $row['bbcode_tag']) . "]'",
'BBCODE_ID' => $num_predefined_bbcodes + ($i * 2),
'BBCODE_TAG' => $row['bbcode_tag'],
'BBCODE_HELPLINE' => $row['bbcode_helpline'],
'A_BBCODE_HELPLINE' => str_replace(array('&', '"', "'", '<', '>'), array('&', '"', "\'", '<', '>'), $row['bbcode_helpline']),
));
$i++;
}
$db->sql_freeresult($result);
}
Gruß Helmut

Ich bin nicht ganz dicht.... na und.
Wow, danke für die Info
Ich denke mal, das hilft (hoffe ich). Mit ACP-Modulen basteln bin ich allerdings (noch) nicht firm.
Ferner wüßte ich jetzt nicht, wie man die von dir genannte Verarbeitung da einfügt.
Vielleicht finde ich mal die Zeit, mich da einzufummeln
thx
4seven

Ich denke mal, das hilft (hoffe ich). Mit ACP-Modulen basteln bin ich allerdings (noch) nicht firm.
Ferner wüßte ich jetzt nicht, wie man die von dir genannte Verarbeitung da einfügt.
Vielleicht finde ich mal die Zeit, mich da einzufummeln

thx
4seven
Zuletzt geändert von 4seven am 24.03.2008 00:38, insgesamt 1-mal geändert.
Hallo 4seven,
ich habe in ein paar freien Minuten die Sortierung für die BBCodes ins ACP eingebaut. Ich brauchte nur am Anfang etwas bis ich das raus hatte, wie es mit den UP/DOWN Buttons geht. Hier nun die Anleitung:
1. Öffne die includes/acp/acp_bbcodes.php und finde darin
Füge danach ein:
Finde darin
Füge danach ein
Finde darin
und ersetze mit folgendem
Finde darin
und ersetze mit folgendem
2. Öffne die adm/style/acp_bbcodes.html und finde darin
und ersetze mit folgendem
3. Öffne die includes/functions_display.php und finde darin
finde ein paar Zeilen später
und ersetze es mit folgendem
4. Führe folgende Anweisung in phpAyAdmin aus
So, das wars damit müsste ich alles beschrieben haben. Mit dieser Erweiterung können die selbst erstellten BBCodes im ACP sortiert werden. Diese Reihenfolge wird auch beim Posting im Forum so angezeigt.
[EDIT]
Wichtiger Hinweis!
Ich hatte noch was vergessen zu schreiben und zwar müssen in der neuen mit phpMyAdmin erzeugten Spalte die bbcode_id 1:1 für jeden BBCode in die bbcode_order übertragen werden, sonst geht es nicht.
@Dr.Death, bantu, gn#36
Ihr könnt die Anleitung gerne ins phpBB 3.0: Snippets übernehmen oder vielleicht auch einen Mod daraus machen. Schaut es euch noch einmal an, ob ich etwas vergessen habe.
Gruß Helmut
P.S. Vielleicht hat jemand noch etwas Lust und macht noch eine Erweiterung für die Gruppenauswahl (Berechtigungen) für jeden BBCode dazu.
ich habe in ein paar freien Minuten die Sortierung für die BBCodes ins ACP eingebaut. Ich brauchte nur am Anfang etwas bis ich das raus hatte, wie es mit den UP/DOWN Buttons geht. Hier nun die Anleitung:
1. Öffne die includes/acp/acp_bbcodes.php und finde darin
Code: Alles auswählen
$sql_ary['bbcode_id'] = (int) $bbcode_id;
Code: Alles auswählen
$sql_ary['bbcode_order'] = (int) $bbcode_id;
Code: Alles auswählen
case 'delete':
$sql = 'SELECT bbcode_tag
FROM ' . BBCODES_TABLE . "
WHERE bbcode_id = $bbcode_id";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row)
{
if (confirm_box(true))
{
$db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id");
$cache->destroy('sql', BBCODES_TABLE);
add_log('admin', 'LOG_BBCODE_DELETE', $row['bbcode_tag']);
}
else
{
confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
'bbcode' => $bbcode_id,
'i' => $id,
'mode' => $mode,
'action' => $action))
);
}
}
break;
Code: Alles auswählen
//BBCode sort
case 'move_up':
case 'move_down':
// Get current order id...
$sql = 'SELECT bbcode_order as current_order
FROM ' . BBCODES_TABLE . "
WHERE bbcode_id = $bbcode_id";
$result = $db->sql_query($sql);
$current_order = (int) $db->sql_fetchfield('current_order');
$db->sql_freeresult($result);
if ($current_order == 0 && $action == 'move_up')
{
break;
}
// on move_down, switch position with next order_id...
// on move_up, switch position with previous order_id...
$switch_order_id = ($action == 'move_down') ? $current_order + 1 : $current_order - 1;
//
$sql = 'UPDATE ' . BBCODES_TABLE . "
SET bbcode_order = $current_order
WHERE bbcode_order = $switch_order_id
AND bbcode_id <> $bbcode_id";
$db->sql_query($sql);
// Only update the other entry too if the previous entry got updated
if ($db->sql_affectedrows())
{
$sql = 'UPDATE ' . BBCODES_TABLE . "
SET bbcode_order = $switch_order_id
WHERE bbcode_order = $current_order
AND bbcode_id = $bbcode_id";
$db->sql_query($sql);
}
break;
//-----------
Code: Alles auswählen
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
ORDER BY bbcode_tag';
$result = $db->sql_query($sql);
Code: Alles auswählen
$sql = 'SELECT *
FROM ' . BBCODES_TABLE . '
ORDER BY bbcode_order';
$result = $db->sql_query($sql);
Code: Alles auswählen
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('bbcodes', array(
'BBCODE_TAG' => $row['bbcode_tag'],
'U_EDIT' => $this->u_action . '&action=edit&bbcode=' . $row['bbcode_id'],
'U_DELETE' => $this->u_action . '&action=delete&bbcode=' . $row['bbcode_id'])
);
}
$db->sql_freeresult($result);
Code: Alles auswählen
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('bbcodes', array(
'BBCODE_TAG' => $row['bbcode_tag'],
'U_EDIT' => $this->u_action . '&action=edit&bbcode=' . $row['bbcode_id'],
'U_DELETE' => $this->u_action . '&action=delete&bbcode=' . $row['bbcode_id'],
'U_MOVE_UP' => $this->u_action . '&action=move_up&bbcode=' . $row['bbcode_id'],
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&bbcode=' . $row['bbcode_id'])
);
}
$db->sql_freeresult($result);
2. Öffne die adm/style/acp_bbcodes.html und finde darin
Code: Alles auswählen
<!-- BEGIN bbcodes -->
<!-- IF bbcodes.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<td style="text-align: center;">{bbcodes.BBCODE_TAG}</td>
<td style="text-align: right; width: 40px;"><a href="{bbcodes.U_EDIT}">{ICON_EDIT}</a> <a href="{bbcodes.U_DELETE}">{ICON_DELETE}</a></td>
</tr>
<!-- END bbcodes -->
Code: Alles auswählen
<!-- BEGIN bbcodes -->
<!-- IF bbcodes.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<td style="text-align: center;">{bbcodes.BBCODE_TAG}</td>
<td style="text-align: right; white-space: nowrap;">
<!-- IF bbcodes.S_FIRST_ROW -->{ICON_MOVE_UP_DISABLED}<!-- ELSE --><a href="{bbcodes.U_MOVE_UP}">{ICON_MOVE_UP}</a><!-- ENDIF -->
<!-- IF bbcodes.S_LAST_ROW -->{ICON_MOVE_DOWN_DISABLED}<!-- ELSE --><a href="{bbcodes.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a><!-- ENDIF -->
<a href="{bbcodes.U_EDIT}">{ICON_EDIT}</a> <a href="{bbcodes.U_DELETE}">{ICON_DELETE}</a></a>
</td>
</tr>
<!-- END bbcodes -->
3. Öffne die includes/functions_display.php und finde darin
Code: Alles auswählen
function display_custom_bbcodes()
Code: Alles auswählen
$sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline
FROM ' . BBCODES_TABLE . '
WHERE display_on_posting = 1
ORDER BY bbcode_tag';
$result = $db->sql_query($sql);
Code: Alles auswählen
$sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline
FROM ' . BBCODES_TABLE . '
WHERE display_on_posting = 1
ORDER BY bbcode_order';
$result = $db->sql_query($sql);
4. Führe folgende Anweisung in phpAyAdmin aus
Code: Alles auswählen
ALTER TABLE `phpbb3_bbcodes` ADD `bbcode_order` MEDIUMINT( 8 ) UNSIGNED NOT NULL DEFAULT '0';
[EDIT]
Wichtiger Hinweis!
Ich hatte noch was vergessen zu schreiben und zwar müssen in der neuen mit phpMyAdmin erzeugten Spalte die bbcode_id 1:1 für jeden BBCode in die bbcode_order übertragen werden, sonst geht es nicht.
@Dr.Death, bantu, gn#36
Ihr könnt die Anleitung gerne ins phpBB 3.0: Snippets übernehmen oder vielleicht auch einen Mod daraus machen. Schaut es euch noch einmal an, ob ich etwas vergessen habe.
Gruß Helmut

P.S. Vielleicht hat jemand noch etwas Lust und macht noch eine Erweiterung für die Gruppenauswahl (Berechtigungen) für jeden BBCode dazu.

Zuletzt geändert von Helmut am 26.03.2008 12:16, insgesamt 1-mal geändert.
Ich bin nicht ganz dicht.... na und.