Eigenes Prefix-System

Alice

Erfahrenes Mitglied
Hallo. :)

Ich möchte für mein Forum (vBulletin) ein eigenes Prefix-System erstellen, da mir das vBulletin eigene System nicht zusagt.

Ich weiss jedoch nicht wo und wie ich genaz anfangen soll.

Ich habe mir gedacht ich mache das z.B. so:
Beim verfassen eines Beitrages kann man zwischen verschiedenen Optionen wählen.

Option 1: Windows
Option 2: Linux
Option 3: iOS

Je nach auswahl öffnet sich dann ein weiteres Auswahlmenü:

Option 1: XP
Option 2: Vista
Option 3: 7

Je nach auswahl öffnet sich dann ein weiteres Auswahlmenü:

Option 1: Service Pack 1
Option 2: Service Pack 2
Option 3: Service Pack 3

Diese Präfix soll dann mit in den Thread-Titel eingefügt werden oder besser wie das Originale Präfix-System eine eigene "Spalte" bekommen. Das ist aber erst einmal egal.

Am Ende soll das z.B. folgendes ausgegeben werden:

Windows XP Service Pack 1
oder
Windows
oder
Windows XP

Ich möchte also ein "bewegliches Präfix-System" erstellen und kein starres wie bei vBulletin.

Hat jemand eine Idee oder einen Ansatz für mich?
 
- Die möglichen Prefixe in eine Adjacency Tree in die DB speichern (SQL-Beispiel: MySQL Hierarchie Baum (Adjacency Tree) auslesen)

- mittels Ajax (ev. mit JQuery umsetzen) auf die Auswahl des ersten Prefix reagieren. Dito auf den Zweiten etc.

- Zum Dantanstz musst du dank des Trees nur die ID des letzten Prefix. Die anderen sind problemlos von diesem ableitbar (Siehe Link unter Punkt 1)
 
Das mit dem Prefix habe ich schon mal am laufen gehabt, dummerweise wird es (wenn du es im AdminCP eintröägst, von irgendwo innerhalb der Foren-Software ein Cache gelöscht, wird dieser Cache nicht gelöscht, erscheint das neue Prefix nur als defektes Prefix im Frontend und sieht gar nicht schön aus

Pro Prefix wird ein Plaintext und ein HTML-Tag in die Datenbank eingefügt.

Die Klasse ist ca. 4 Jahre alt und ich habe keine Ahnung, ob die noch wirklich Funktioniert (hab mein VB entsorgt, nachdem VBSeo nur noch Müll gemacht hat)

PHP:
<?php
/********************************************************************************************************************
 * @package     : kundenbereich {__PRODUKT_VERSION__}
 * @file        : class.vb.php
 * @encoding    : UTF-8
 * @version     : {__PRODUKT_VERSION__}
 * @date        : 10.11.2007 - 19:15:02
 * @author      : breaker
 * *******************************************************************************************************************/

defined ('_JEXEC') or die ('Restricted access');

/**
 * schnittstelle zum vbulletin-forum, worueber prefixe eingefuegt,
 * geloescht und bearbeitet werden koennen
 */
class vbulletin
{
	private static	$instance				= null;

	public function getVBInstance($options)
	{
		if (self::$instance == null)
		{
			self::$instance = new vbulletin($options);
		}
		return self::$instance;
	}

	protected function __construct($options)
	{
		$this->db_vb =& JDatabase::getInstance($options);
		$this->time = time();
	}

	/**
	 * neues prefix ins vbulletin eintragen und den cache aktualisieren,
	 * damit es auch aktiv wird
	 */
	public function prefix_add($n_name)
	{
		// name vorbehandeln
		$new_name = self::prepare_name($n_name);

		// pruefen, ob es dieses netzwerk schon gibt
		$this->db_vb->setQuery("SELECT displayorder FROM prefix WHERE prefixid = '" . $new_name . "'");
		$this->db_vb->query();

		// falls es das netzwerk noch nicht gibt, ist das ergebnis false
		// also weiter machen ;-)
		if ($this->db_vb->loadAssoc() == false)
		{
			$this->db_vb->setQuery("SELECT displayorder FROM prefix ORDER BY displayorder DESC");
			$this->db_vb->query();
			$res2 = $this->db_vb->loadAssoc();

			// display-order im vbulletin erweitern
			$new_order = $res2['displayoder'] + 10;

			// prefixe fuer plain und html erstellen und leerzeichen am anfang und ende des namens entfernen
			$prefix1 = 'prefix_' . $new_name . '_title_plain';
			$prefix2 = 'prefix_' . $new_name . '_title_rich';

			// style erstellen, welches im vbulletin fuer die prefixe genutzt werden
			$htm = '<font class="promo">' . $new_name . '</font>';

			// neue display-order schreiben
			$this->db_vb->setQuery("INSERT INTO prefix
				(prefixid, prefixsetid, displayorder, options)
					VALUES
						('" . $new_name . "', '01', $new_order, 0)");
			$this->db_vb->query();

			// prefix fuer die plain-ansicht schreiben
			$this->db_vb->setQuery("INSERT INTO phrase
				(languageid, varname, fieldname, text, product, username, dateline, importphraseid)
					VALUES
						(0, '" . strip_tags($prefix1) . "', 'global', '" . $new_name . "', 'vbulletin', 'breaker', '" . $this->time . "', 0)");
			$this->db_vb->query();

			// prefix fuer die html-ansicht schreiben
			$this->db_vb->setQuery("INSERT INTO phrase
				(languageid, varname, fieldname, text, product, username, dateline, importphraseid)
					VALUES
						(0, '" . strip_tags($prefix2) . "', 'global', '" . addslashes($htm) . "', 'vbulletin', 'breaker', '" . $this->time . "', 0)");
			$this->db_vb->query();
		}
	}

	/**
	 * bestehendes prefix aus der vbulletin-datenbank loeschen und cache aktualisieren
	 * @param	string			$n_name			name des prefixes, welches geloescht werden soll
	 */
	public function prefix_del($n_name)
	{
		// name vorbehandeln
		$new_name = self::prepare_name($n_name);

		$this->db_vb->setQuery("SELECT
			displayorder FROM prefix
				WHERE prefixid = '" . $new_name . "'");
		$this->db_vb->query();
		if ($this->db_vb->loadAssoc() != false)
		{
			$prefix1 = 'prefix_' . $new_name . '_title_plain';
			$prefix2 = 'prefix_' . $new_name . '_title_rich';

			$this->db_vb->setQuery("DELETE
				FROM prefix WHERE prefixid = '" . $new_name . "'");
			$this->db_vb->query();

			$this->db_vb->setQuery("DELETE
				FROM phrase WHERE varname = '" . strip_tags($prefix1) . "'
					OR varname = '" . strip_tags($prefix2) . "'");
			$this->db_vb->query();
		}
	}

	public function prefix_edit($n_name, $n_name_old)
	{
//		echo '$n_name: ' . $n_name . '<br />$n_name_old: ' . $n_name_old . '<br />';
//		die();
		// namen vorbehandeln
		$new_name = self::prepare_name($n_name);
		$new_name_old = self::prepare_name($n_name_old);

		$prefix1 = 'prefix_' . $new_name . '_title_plain';
		$prefix2 = 'prefix_' . $new_name . '_title_rich';
		$htm = '<font class="promo">' . $new_name . '</font>';

		$this->db_vb->setQuery("SELECT
			displayorder FROM prefix WHERE prefixid = '" . $new_name . "'");
		$this->db_vb->query();

		if ($this->db_vb->loadAssoc() != false)
		{
			$this->db_vb->setQuery("SELECT
				displayoder FROM prefix ORDER BY displayorder DESC");
			$this->db_vb->query();
			$res1 = $this->db_vb->loadAssoc();

			$new_order = $res1['displayoder'] + 10;
			$this->db_vb->setQuery("INSERT INTO prefix
				(prefixid, prefixsetid, displayorder, options)
					VALUES
						('" . $new_name . "', '01', $new_order, 0)");
			$this->db_vb->query();

			$this->db_vb->setQuery("INSERT INTO phrase
				(languageid, varname, fieldname, text, product, username, dateline, importphraseid)
					VALUES
						(0, '" . strip_tags($prefix1) . "', 'global', '" . $new_name . "', 'vbulletin', 'breaker', '" . $this->time . "', 0)");
			$this->db_vb->query();

			$this->db_vb->setQuery("INSERT INTO phrase
				(languageid, varname, fieldname, text, product, username, dateline, importphraseid)
					VALUES
						(0, '" . strip_tags($prefix2) . "', 'global', '" . addslashes($htm) . "', 'vbulletin', 'breaker', '" . $this->time . "', 0)");
			$this->db_vb->query();
		}
		else
		{
			$prefix1_old = 'prefix_' . $new_name_old . '_title_plain';
			$prefix2_old = 'prefix_' . $new_name_old . '_title_rich';
			$this->db_vb->setQuery("UPDATE
				prefix SET prefixid = '" . $new_name . "' WHERE prefixid = '" . $new_name_old . "'");
			$this->db_vb->query();

			$this->db_vb->setQuery("UPDATE
				phrase SET varname = '" . strip_tags($prefix1) . "', text = '" . $new_name . "' WHERE varname = '" . strip_tags($prefix1_old) . "'");
			$this->db_vb->query();

			$this->db_vb->setQuery("UPDATE
				phrase SET varname = '" . strip_tags($prefix2) . "', text = '" . addslashes($htm) . "' WHERE varname = '" . strip_tags($prefix2_old) . "'");
			$this->db_vb->query();
		}
	}

	/**
	 * namen des netzwerkes escapen, leerzeichen am anfang und ende entfernen und html entfernen
	 * @param	string		$n_name				name des netzwerkes
	 * @return	string		$c					name des netzwerkes zum einfuegen in die datenbank
	 */
	protected function prepare_name($n_name)
	{
		$a = trim($n_name);
		$b = strip_tags($a);
		$c = addslashes($b);

		unset ($a, $b);
		return $c;
	}
}

?>
 
Zurück