Seite 1 von 1

spoiler-tag wird in Beiträgen aus v2 nicht angewendet

Verfasst: 07.01.2008 12:36
von combuster
Hallo.

Nach der Konvertierung habe ich ein spoiler-Tag (eigene bbcodes -> http://www.lpi-clan.de/viewtopic.php?f=26&t=2766 ) erstellt und das funktioniert auch, wenn man einen neuen beitrag verfasst. Aber wenn in den ganzen konvertierten alten Beiträgen aus dem v2 wird der Tag angezeigt statt geparst.
Ich schätze mal, dass hier halt der entsprechende uid-Eintrag fehlt, oder?
Wenn ich einen solchen Beitrag neu abspeicher (ändern->absenden), dann funktioniert es nämlich.

Wie kann ich das schneller/automatisch für alle alten Posts erledigen?

Verfasst: 07.01.2008 14:38
von 4seven
Hallo combuster,

bau nochmal den alten Spoiler-Tag ein > Cache leeren etc. > Testen

Wenn es dann geht, für den "neuen" Spoiler einen neuen Tag nehmen spoil_ oder spoile etc.)

Dann ist zwar Mischbetrieb, abr wenigstens gehen die Alten noch,
weil alle uid's global ändern, ich bezweifle das das geht.
Zumal die nie gleich sind (oder?)

lg
4seven

Verfasst: 07.01.2008 18:18
von combuster
Hi & Danke für die Antwort.
4seven hat geschrieben: bau nochmal den alten Spoiler-Tag ein > Cache leeren etc. > Testen
Was meinst Du damit? Im v2 hatte ich dafür einen MOD, aber den kann ich ja nicht ohne weiteres ins v3 einbauen. Oder habe ich Dich missverstanden?

und ja, die uid sind nie gleich (deswegen ja auch id)

Verfasst: 07.01.2008 18:49
von 4seven
Hallo combuster,

der alte Mod hat an irgendeiner Stelle im 2er-Board eine gültige Html-Ersetzung für den [spoil]-Tag hinterlegt.
Und diese Html-Übersetzung ins phpbb3 einfügen > Cache komplett leeren etc.
Olympus hat das (html/phpbb)-Rad ja nicht neu erfunden :wink:

lg
4seven

Verfasst: 07.01.2008 18:58
von combuster
Hmm da habe ich viel, weiß aber nicht welchen Teil Du meinst.

Hatte mir damals dies zusammengefrickelt (läuft bei mir eigentlich alles unter "hide" statt "spoiler", aber hier ist spoiler gängiger, weshalb ich nach spoiler fragte. In meinen eigenen bbcodes usw habe ich natürlich hide geschrieben - das Prinzip ist aber ja das selbe)

Code: Alles auswählen

//includes/bbcode.php

$hide_box_count = 0;

//[...]

//prepare_bbcode_template

    $bbcode_tpl['hide_title_open'] = str_replace('{TITLE}', '\\1', $bbcode_tpl['hide_title_open']);

//[...]
//bbencode_second_pass

    // [hide] and [/hide] for block-hide.
    //global $hide_box_count;
    $tmp_hide_open = str_replace('{ID}', 'hide_box', $bbcode_tpl['hide_open']);
    $tmp_hide_open = str_replace('{A_ID}', 'hide_box_link', $tmp_hide_open);
	$text = str_replace("[hide:$uid]", $tmp_hide_open, $text);
	
	$tmp_hide_close = str_replace('{ID}', 'hide_box', $bbcode_tpl['hide_close']);
    $tmp_hide_close = str_replace('{A_ID}', 'hide_box_link', $tmp_hide_close);
	$text = str_replace("[/hide:$uid]", $tmp_hide_close, $text);
    // [hide="TITLE"] for block-hide.
    $tmp_hide_title_open = str_replace('{ID}', 'hide_box', $bbcode_tpl['hide_title_open']);
    $tmp_hide_title_open = str_replace('{A_ID}', 'hide_box_link', $tmp_hide_title_open);
	$text = preg_replace("/\[hide:$uid=\"(.*?)\"\]/si", $tmp_hide_title_open, $text);
    //$hide_box_count++;
    //hide
    $text = insert_hide_ids($text);

//[...]
//bbencode_first_pass

	// [HIDE] and [/HIDE] for posting replies with hide, or just for hiding stuff.
	$text = bbencode_first_pass_pda($text, $uid, '[hide]', '[/hide]', '', false, '');
	$text = bbencode_first_pass_pda($text, $uid, '/\[hide=\\\\"(.*?)\\\\"\]/is', '[/hide]', '', false, '', "[hide:$uid=\\\"\\1\\\"]");

//[...]
// function bbencode_first_pass($text, $uid)

	// [hide] and [/hide] for block-hide.
	$text = preg_replace("#\[hide\](.*?)\[/hide\]#si", "[hide:$uid]\\1[/hide:$uid]", $text);

//[...]
function insert_hide_ids($text)
{
    global $hide_box_count;
    $arr = explode('<!-- HIDE_FUNCTION_BEGIN -->', $text);
    $c = count($arr);
    for ($i = 0; $i<$c; $i++)
    {
        $arr[$i] = preg_replace('/hide_box("|\')/', 'hide_box' . $hide_box_count . '$1', $arr[$i]);
        $arr[$i] = preg_replace('/hide_box_link("|\')/', 'hide_box_link' . $hide_box_count . '$1', $arr[$i]);
        $hide_box_count++;
    }

    return implode('<!-- HIDE_FUNCTION_BEGIN_PARSED -->', $arr);
}
oder meinst Du aus der bbcode.tpl?

Code: Alles auswählen

//[...]
<!-- BEGIN hide_open --><!-- HIDE_FUNCTION_BEGIN --><a id="{A_ID}" href="#" onclick="switch_display('{ID}', 'block'); return false;">Block anzeigen/verstecken</a>
<div style="border:1px solid #000; padding:3px;">
<div style="display:none" id="{ID}"><!-- END hide_open -->
<!-- BEGIN hide_close --></div>
<span style="line-height:2px;">&nbsp;</span><br/>
<noscript><span style="font-weight:bold; color:#f00;">Du musst JavaScript aktivieren, um die Liste anzeigen zu lassen</span></noscript>
</div><!-- HIDE_FUNCTION_END --><!-- END hide_close -->

<!-- BEGIN hide_title_open --><!-- HIDE_FUNCTION_BEGIN --><a id="{A_ID}" href="#" onclick="switch_display('{ID}', 'block'); return false;">{TITLE}</a>
<div style="border:1px solid #000; padding:3px;">
<div style="display:none" id="{ID}"><!-- END hide_open -->

//[...]

Verfasst: 07.01.2008 21:03
von 4seven
Hallo combuster,

ich meine den zweiten aus der bbcode.tpl, wobei es da wesentlich einfachere gibt. Wird nicht leicht werden, den zu portieren. ich hoffe es geht :roll:

Code: Alles auswählen

<a id="{A_ID}" href="#" onclick="switch_display('{ID}', 'block'); return false;">Block anzeigen/verstecken</a>
<div style="border:1px solid #000; padding:3px;">
<div style="display:none" id="{ID}"><!-- END hide_open -->
<!-- BEGIN hide_close --></div>
<span style="line-height:2px;">&nbsp;</span><br/>
<noscript><span style="font-weight:bold; color:#f00;">Du musst JavaScript aktivieren, um die Liste anzeigen zu lassen</span></noscript> 
<a id="{A_ID}" href="#" onclick="switch_display('{ID}', 'block'); return false;">{TITLE}</a>
<div style="border:1px solid #000; padding:3px;">
<div style="display:none" id="{ID}">
Wir haben {A_ID}, {ID} und {TITLE}, die müssten sinnvoll ersetzt werden mit {TEXT1} usw.
Da hab ich nicht viel Hoffnung.

Wenn es nicht geht, hilft wohl nur ein globaler SQL-Befehl, der besagt:
Öffne einmal alle "Posts mit Spoiler" zum editieren und speicher sie wieder ab.

P.S. mir ist noch was eingefallen. Möglicherweise könnte folgendes funktionieren:

- Mach eine Daten + SQL-Sicherung des 2er Forums.
- Bau den alten Spoilermod im 2er aus
und einen anderen ein, der ohne A_ID, ID usw arbeitet.
- Mein Favorit ist der aus der BBCodeBox 5.0.1.c
- Baue aber nur die Anteile des Mods ein, der den Tag [spoil][/spoil] betrifft
- posting_body.tpl komplett auslassen, da es nur ein Frontend zum Code ist :wink:
Wichtig > Benenne die Anteile vor dem Einbau um . Also alle [spoil]{Was_auch_immer_für_ein_code}[/spoil] in [hide]{Was_auch_immer_für_ein_code}[/hide].

Teste, ob es dann im 2er funktioniert. Wenn ja, dann wird es mit an Sicherheit grenzender Warscheinlichkeit auch nach dem konvertieren gehen (bei mir ging es mit dem bbcodebox-spoil-code)


lg
4seven

Verfasst: 10.01.2008 13:08
von combuster
also ich habe es bisher nicht ausprobiert, weil ich nicht die Zeit für den Aufwand für das von Dir beschriebene hatte.

Ein Problem sehe ich aber noch und zwar, dass ich die Tags auch verschachteln können möchten, bzw sie im alten Board sehr oft auch verschachtelt vorkommen, also z.B.:

[hide]
hallo
[hide="psst"]psst[/hide]
[/hide]

Daher warte ich lieber noch ab, bis ich einen passenden MOD fürs V3 habe, sodass ich weiß, wie ich überhaupt konvertieren will.
Diesen Thread hier hatte ich dennoch erstellt, weil ich es interessant fand, dass auch die nicht verschachtelten Tags nicht funktionierten.

(s. auch: [SUCHE] Verschachteln eigener BBCodes)

Danke für die Hilfestellung.