• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Sammelthread: Probleme und Erweiterungen zu vBulletin

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
Da wir keinen noch dedizierten Webanwendungsbereich haben und sich die Fragen zu spezifischen Webanwendungen wohl in Grenzen halten, kann ich die Idee, für einzelne bekannte Webanwendungen Sammelthreads zu erstellen, befürworten. Da ich inzwischen einige Erfahrung mit vBulletin habe, dieser Sammelthread.

Um den Thread zu eröffnen, einige Vorschläge für bekannte Probleme in vBulletin 4:




In vBulletin 4.2.1 funktioniert die Generierung von JPEG-Grafiken über GD nicht. Das Problem kommt von einem fehlerhaften imagejpeg()-Aufruf in includes/class_image.php, Zeile 1430:
PHP:
imagejpeg($image, '', $quality);
Die PHP-Dokumentation (http://www.php.net/imagejpeg) besagt, dass als zweites Argument NULL - nicht ein leerer String - erwartet wird, wenn die Grafik ausgegeben werden soll. PHP <= 5.3 hat an dieser Stelle einen leeren String ebenfalls akzeptiert, PHP 5.4 tut das nicht mehr. Ändert man die Zeile zu
PHP:
imagejpeg($image, NULL, $quality);
funktioniert die Generierung von JPEG-Bildern korrekt.




In allen Versionen von vBulletin 4 führen Beiträge mit identischen Timestamps zu Problemen, sofern sich diese über mehrere Seiten erstrecken, da die Queries zum Generieren der Pagination und zur Abfrage des Beitragsinhalts dann unterschiedliche Ergebnisse liefern. Abhilfe schafft das folgende Plugin für showthread_post_start:
PHP:
if (!empty($postid) && $threadedmode == 0 && isset($postinfo)) {
   $getpagenum = $db->query_first('
       SELECT COUNT(*) AS posts
       FROM '.TABLE_PREFIX.'post AS post
       WHERE threadid = '.intval($threadid).' AND visible = 1
       AND ((dateline '.iif(!$postorder, '<', '>').' '.intval($postinfo['dateline']).')
            OR (dateline = '.intval($postinfo['dateline']).' AND 
                postid '.iif(!$postorder, '<=', '>=').' '.intval($postinfo['postid']).'))'
   );
   $vbulletin->GPC['pagenumber'] = ceil($getpagenum['posts'] / $perpage);
   
   $limitlower = ($vbulletin->GPC['pagenumber'] - 1) * $perpage;
   $limitupper = ($vbulletin->GPC['pagenumber']) * $perpage;
}
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
Möchte man extern auf vBulletin zugreifen, zB wenn man eine Wordpress Integration schreibt mit automatischem anlegen von Threads/Posts in bestimmten Forenbereichen, wird man seit Version 4.2.1 auf ein Problem stoßen, da "functions_navigation.php" nicht eingebunden werden kann.

Das liegt daran, daß in "includes/functions.php" bei der Pfadangabe nicht der absolute Pfad (oder zumindest wie in Versionen vor 4.2.1 noch DIR oder ähnliches) angegeben wird, sondern ein Relativer.

Beheben kann man das ganze indem man /*Navbar Stuff*/ wie folgt erweitert:

PHP:
/* Navbar stuff
Dont use DIR here, the Dev scripts dont like it */

//we need the absolute path from an external source
if(VB_AREA == 'External') {
	require_once(CWD . '/includes/functions_navigation.php');
} else {
	require_once('./includes/functions_navigation.php');
}

Natürlich muß man dann von außen "CWD" definieren, aber das muß man in der Regel so oder so tun.
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #3
moep, ich habe das nicht getestet, aber wäre ein chdir('/path/to/vbulletin') vor dem Inkludieren (und ggf. ein chdir() zurück danach) nicht die einfachere Lösung, die zudem ohne Anpassungen an vBulletin selbst auskommt?
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
@Kugelfisch:
Da hast du recht, das geht auch mit nem chdir - jedoch ist es immer doof wenn sich eine Software in dieser Weise bei einem Minor Release ändert...


Mal eine vielleicht etwas dumm klingende Frage:
Aber wie würde ich ein Template einem Add-On/Produkt zuordnen/hinzufügen?

Ich hab bisher erfolgreich ein Add-On erstellt und in dieses auch ein Plugin-In hinzugefügt, jedoch sehe ich momentan nicht wirklich eine Möglichkeit Templates zuzuordnen?
Und wenn ich Templates anpassen möchte - nehme ich an, daß ich das am besten im Installations-Skript mache und per RegEx mir meinen Teil aus den Standard-Templates rausfische? Oder hast du da eine bessere Methode?
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #5
Aber wie würde ich ein Template einem Add-On/Produkt zuordnen/hinzufügen?
Dazu musst du (eine lokale Testinstanz von) vBulletin in den Entwicklermodus versetzen, indem du in includes/config.php
PHP:
$config['Misc']['debug'] = true;
einträgst. Daraufhin kannst du Templates im `MASTER STYLE` anlegen und Add-Ons zuordnen. Ausserdem kannst du dann auch vBulletin-Einstellungen und -Einstellungsgruppen hinzufügen und Add-Ons zuordnen.

Und wenn ich Templates anpassen möchte - nehme ich an, daß ich das am besten im Installations-Skript mache und per RegEx mir meinen Teil aus den Standard-Templates rausfische? Oder hast du da eine bessere Methode?
Diesen Ansatz würde ich vermeiden, denn das führt bei durch den Benutzer bereits angepassten Templates sehr leicht zu Problemen, im ungünstigsten Fall sogar zu Datenverlust. Sinnvoll wäre, Template-Hooks zu nutzen, sofern sie an den passenden Stellen vorhanden sind. Ist das nicht möglich, würde ich den Benutzer darauf hinweisen, dass er die Templates selbst anpassen und dein Markup an für ihn passender Stelle hinzufügen muss.
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
Ich habe mal diese @username Idee von dir genommen und ein Produkt geschrieben, daß inline-Vorschläge macht.
Ich bin noch nicht dahinter gekommen wie ich es einrichten würde, das ganze für User im Profil abschaltbar zu machen, da schaue ich gerade noch.

Anhang anzeigen product-at_username.xml.zip
Anhang anzeigen product-at_username-0.03.zip


Ich würde mich freuen wenn du (oder wer anders) es kritisch anschauen würdest und evtl. feedback dazu gibst - wenn es gefällt kannst du es natürlich auch hier einsetzen :)
 
Zuletzt bearbeitet:

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #7
Das Produkt ist meines Erachtens insgesamt sauber implementiert, einige Verbesserungsvorschläge habe ich jedoch:
  • Verwende für den Cache keine lokalen Dateien. Das führt leicht dazu, dass im (oftmals für jeden Benutzer lesbaren) temporären Verzeichnis Inhalte u.a. interner Foren zu liegen kommen. Sinnvoller wäre meine Erachtens, den vBulletin-Datastore zu nutzen - dieser kann, abhängig von der Konfiguration, in der Datenbank, auf einem Memcached oder im Dateisystem abgelegt werden, standardmässig liegt er in der Datenbank.
  • Verwende den [post]-BBCode anstelle des -BBCodes, dann musst du den Link ni...rden definiert, aber nicht verwendet. [/list]
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
Huhu Kugelfisch,
ich weiß jetzt nicht welche Version du dir angeschaut hast, deswegen beziehe ich mich auf die 0.03.

  • Verwende für den Cache keine lokalen Dateien. Das führt leicht dazu, dass im (oftmals für jeden Benutzer lesbaren) temporären Verzeichnis Inhalte u.a. interner Foren zu liegen kommen. Sinnvoller wäre meine Erachtens, den vBulletin-Datastore zu nutzen - dieser kann, abhängig von der Konfiguration, in der Datenbank, auf einem Memcached oder im Dateisystem abgelegt werden, standardmässig liegt er in der Datenbank.
Dann werde ich mich in den Datastore einlesen - ich wollte eigentlich nur daß ich nicht so viele Datenbankabfragen machen muss, jedes Mal wenn jemand @kug schreibt ^^

  • Verwende den [post]-BBCode anstelle des -BBCodes, dann musst du den Link ni...en Elementen: [ATTACH]2455._xfImport[/ATTACH]
 
Zuletzt bearbeitet:

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #9
Ne Idee wie man hier vorgehen könnte?
Leider bietet vBulletin meines Wissens keine zentrale Überprüfung aller nötigen Rechte. Sehe dir an, wie die Prüfung z.B. in showthread.php gelöst ist, und implementiere sie selbst. Du müsstest korrekterweise überprüfen, ob ein Benutzer Threads, Beiträge oder Beiträge Dritter einsehen darf, ob der Poster in der Harvey/Coventry-Liste steht, etc. Sofern du keine Auszüge aus den Beiträgen anzeigen würdest wäre das weniger wichtig, tust du das, führt eine inkorrekte Überprüfung leicht zu Leaks.

Eine Alternative wäre ggf., die fetch_quotable_posts()-Funktion zu nutzen, um zu bestimmen, welche Beiträge einer Liste von Post-IDs sich vom aktuellen Benutzer zitieren (und daher anzeigen) lassen.


Die Phrasen wurden mir automatisch generiert als ich die 4 Stylevars angelegt habe; hatte nicht überall eine Description eingetragen, deswegen die teils leeren Phrasen.
Stimmt, das hatte ich übersehen.


Ich bastel gerade noch an einer erweiterten Version, die die BBCodes parsed, und dann erst abschneidet - ich muss nur noch meine Abschneide-Funktion fertig schreiben, daß Tags nicht zerstückelt werden.
Dazu würde sich die Plaintext-Variante des BBCode-Parsers anbieten, welche vBulletin auch verwendet, um z.B. E-Mails zu generieren.


Edit: bzw wie würdest du eher vorgehen? Den Text schon vor-abgeschnitten abspeichern, oder komplett übertragen, und dann mit overflow:hidden und hellip "kürzen"?
Ich würde serverseitig den BBCode zu Plaintext parsen und den resultierenden Text nach einer sinnvollen Länge (länger als die maximal angezeigte Zeichenzahl) abschneiden, schliesslich macht es wenig Sinn, für eine 1-Zeilen-Vorschau den gesamten Beitragsinhalt zu übertragen oder zu cachen. Clientseitig kannst du den so generierten Auszug dann bei Bedarf noch weiter kürzen.
 
Zuletzt bearbeitet:

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
Ich habe gerade gemerkt, daß ich die Ersetzung nicht korrekt implementiert hatte, und deswegen bei einem Klick immer meine URL-Ersetzung kam, anstatt die eingerichtete.

Anhang anzeigen product-at_username-0.05.zip

Ich habe das jetzt mit abgespecktem BB-Code Parsing implementiert, einmal wegen den Smileys, aber vor allem wegen den Quotes, wenn ich nur den Plaintext gefetcht hätte, hat man nicht mehr wirklich unterscheiden können wer quoted.

Ich schaue mir die anderen Funktionen da mal genauer an,
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #12
Danke für das Produkt - diese Funktionalität hatte ich im g:b bereits implementieren wollen, allerdings fehlte mir am Ende die Zeit dafür. Einen Verbesserungsvorschlag habe ich allerdings: nutze CKEDITOR.instances.insertText(), statt direkt auf das textarea-Element zuzugreifen. Einerseits ist das eleganter, andererseits versagt dein Weg, wenn der WYSIWYG-Editor verwendet wird.

Darf ich das Produkt daraufhin auch im ngb einsetzen?
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
nutze CKEDITOR.instances.insertText(), statt direkt auf das textarea-Element zuzugreifen. Einerseits ist das eleganter, andererseits versagt dein Weg, wenn der WYSIWYG-Editor verwendet wird.

Oh Gott, ich hätte wissen müssen, daß es so eine Funktion gibt! Tausend Dank! :)

Darf ich das Produkt daraufhin auch im ngb einsetzen?
Selbstredend - ich sag schon Bescheid, wenn ich ein Plugin nicht für die Allgemeinheit zugänglich machen möchte :D


Ach ja - ich wollte noch die Graphik implementieren, die links neben "Zitieren" steht, aber möglichst so, daß das andere Styles nicht kaputt schlägt - ich bin mir nicht sicher, ob ich nicht einfach auf die Ressource zugreifen kann.
UNnnnddd ich habe hier lokal noch ne Version rumliegen die auch tatsächlich den Text verwendet, der von der installierten Sprache kommt - ich lad das gleich mal hoch.


Anhang anzeigen product-at_username-0.06.zip
Anhang anzeigen product-quote_selections-0.02.zip
Anhang anzeigen product-quote_selections-0.03.zip
 
Zuletzt bearbeitet:

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
  • Thread Starter Thread Starter
  • #14
Vielen Dank, ich habe das soeben installiert. Was mir noch aufgefallen ist - es würde sich anbieten, das JavaScript nur auf der newreply-Seite zu laden. Das ist leicht möglich, indem du in deinem Plugin THIS_SCRIPT==='newreply' prüfst. Ausserdem setzt dein Plugin jQuery voraus, was (anders als YUI) nicht in jeder vBulletin-Installation inhärent vorhanden ist - es nachzuladen ist zwar kein Problem, die Voraussetzung sollte aber erwähnt werden.
 

moep

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
8
Ich habe jetzt versucht das @username Produkt so zu erweitern, daß es auch den erweiterten WYSIWYG-Editor verwenden kann.
Ich scheitere momentan jedoch am CKEDITOR - da ich es nicht hin bekomme den Text zu leeren, und danach zu befüllen mit den ersetzten Tags.

Bzw die Ersetzung funktioniert "das erste Mal" - bei jeder weiteren Ersetzung werden linebreaks durch <br> ersetzt.


Evtl. hat jemand anders eine Idee:
Anhang anzeigen product-at_username-0.07.zip
 
Oben