php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.01.2005, 19:07  
Gast
 
Beiträge: n/a
Standard nach oben && nach unten verschieben realisieren

Hallo!
Ich habe ein Problem:
Es geht um Inhaltsverarbeitung (CMS).
Der Inhalt wird in Kategorien gespeichert.
Klappt auch alles. Nur soll der User die Möglichkeit bekommen die Anzeigerheienfolge der Kategorien zu verändern.
Die Kategorien werden jeweils in einer MySQL Tabelle gespeichert.
Dabei ist zu beachten das verschachtelung der Kategorien möglich ist sprich:
Code:
Home (root Kategorie)
->Unternehmen
   ->Irgendwas
      ->Unterkategorie
      ->Nochwas
      ->undnochwat
   ->Unternehmensziele
->Produkte
   ->Produktsparte I
   ->Produktsparte II
...
Wie kann ich das jetzt realisieren, dass ich die sortierungsreihenfolge vom User verändern kann (mit nach oben/untent verschieben Links)
sprich:
Code:
...
->Produkte
   ->Produktsparte I
   ->Produktsparte II
   ->Produktsparte III
   ->Produktsparte IV
   ->Produktsparte V
...
wenn man jetzt Produktsparte III nach oben verschieben kann das es im Endeffekt dann etwa so aussieht:
Code:
...
->Produkte
   ->Produktsparte I
   ->Produktsparte III
   ->Produktsparte II
   ->Produktsparte IV
...
Die Datenbank mit den Kategorien sieht folgendermaßen aus:
Code:
CREATE TABLE `ewm_categories` (
  `id` int(11) NOT NULL auto_increment,
  `cat_name` text NOT NULL,
  `superior_cat` int(11) NOT NULL default '1',
  `superior_order_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
id: ist klar...
cat_name: Kategorie Name
superior_cat: id der übergeordneten Kategorie

dann hab ich mir überlegt das man das man diese Auflistundsart vllt. irgendwie mit superior_order_id ordnen kann... aber wie?

Also ich steh im Moment etwas auf dem Schlauch wie ich sowas realisieren kann.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.01.2005, 20:20  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

Hab sowas ähnliches mit Menüpunkten gemacht, damit ich schnell die Reihenfolge selbiger ändern kann. Dazu hab ich diesen eine "positon"-Spalte verpasst, und im admin Menue kann man in etwa so eine Funktion aufrufen:

Code:
function itemMove($direction){ // Item eine Position hoch oder runterschieben
		// $sign und $ext_funct definieren, ob die benachbarte Positionsnummer, 
		// mit der getauscht werden soll, ober- oder unterhalb liegt (up | down)
		// @act_pos und @new_pos müssen vor dem Aufruf gesetzt worden sein.
		if($direction == "up"){
			$ext_func 	= "MAX";
			$sign 		= "<";
		}
		elseif($direction == "down"){
			$ext_func 	= "MIN";
			$sign 		= ">";
		}
		else{
			die("Falscher Aufruf von AdminEditItems::itemMove().");
		}
		
		// Aktuelle Position-Nummer des ausgewählten MenüItems ermitteln sowie die Menüzugehörigkeit
		if(method_exists($this, "itemMoveSetParameters")){
			$this->itemMoveSetParameters($ext_func, $sign);
		}
		else{
			// Aktuelle Position-Nummer des ausgewählten MenüItems ermitteln sowie die Menüzugehörigkeit
			$sql 		= "SELECT @act_pos := position FROM {$this->table} WHERE id={$this->item_id}";
			$result		= $this->dbQuery($sql);
	
			// Position des Nachbarn ermitteln (je nach up | down das darüber oder darunter gelegene MenuItem)
			$sql 		= "SELECT @new_pos := {$ext_func}(position) FROM {$this->table} WHERE position {$sign} @act_pos";
			$result 	= $this->dbQuery($sql);
		}

		// Die beiden Positionnummern tauschen	
		$sql 		= "UPDATE {$this->table} SET position = @act_pos WHERE position = @new_pos";
		
		$result		= $this->dbQuery($sql);
		$sql 		= "UPDATE {$this->table} SET position = @new_pos WHERE id = {$this->item_id}";					
		$result 	= $this->dbQuery($sql);
	}
Vielleicht hilft Dir das ja, bei mir geht alles einwandfrei,
Grüße


// EDIT: Sorri ist etwas wirr, weil noch einige Sachen auisshalb der Funktion definiert werden müssen, aber hoffe das Prinzip ist klar
bicpi ist offline   Mit Zitat antworten
Alt 22.01.2005, 20:36  
Gast
 
Beiträge: n/a
Standard

Öhm vieleicht hilft mir das etwas
könntest du mir sagen was das @act_pos := macht?

Zitat:
Code:
$sql       = "SELECT @new_pos := {$ext_func}(position) FROM {$this->table} WHERE position {$sign} @act_pos";
  Mit Zitat antworten
Alt 22.01.2005, 21:01  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

Man kann in SQL Variablen speichern, die solange gültig sind wie die Verbindung steht, also das laufende Script meistens, das @ ist sozusagen das Pendant zu $. und die Definition erfolgt mit Doppelpunkt. So kann man sich sparen, das Ergebnis einer Abfrage über PHP zu verarbeiten, wenn man es eh nur für eine weitere Abfrage braucht.
Also im Prinzip vertausche ich die Positionsnummern der Menüpunkte, er wird dadurch hoch oder runtergeschoben. Das kann man dann öfter machen, bis er an der gewünschten Position ist
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Alt 26.01.2005, 09:26  
Gast
 
Beiträge: n/a
Standard

bei kleinen Sachen lohnt sich zb. eine nestedSet Speicherung der Daten.

Die Grundlagen:
http://www.develnet.org/Tech/StatusQuo
http://ffm.junetz.de/members/reeg/dev/DSP/node92.html
http://ffm.junetz.de/members/reeg/DSP/node10.html

PEAR Packet:
http://pear.php.net/package/DB_NestedSet

Ist eine der Besten Speicherarten für Bäume in relationalen Datenbanken.
Sonst kann ich dir XQDB (http://xqdb.sourceforge.net/ oder http://sourceforge.net/projects/xqdb/) empfehlen. XML basierte Speicherung mit Xquery als Abfragesprache. Doch eher über deinen Nutzen.
  Mit Zitat antworten
Alt 26.01.2005, 12:18  
Erfahrener Benutzer
 
Registriert seit: 19.11.2003
Beiträge: 172
BastianX75
Standard

Hi,

da der User ja die Reihenfolge für sich ändern können soll, bringt das ändern der Reihenfolge ewm_categories vermutlich recht wenig, da dadurch, durch jeden User die Reihenfolge zentral geändert wird. Sprich es gibt nur eine Reihen folge.

Du solltest also in deiner User-Tabelle ein Feld mit der Reihenfolge erstellen, nach der du dann die Einträge sortiertst.
__________________
Schönen Gruß
Sebastian

Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie braucht.
BastianX75 ist offline   Mit Zitat antworten
Alt 26.01.2005, 20:35  
Gast
 
Beiträge: n/a
Standard

Zitat:
da der User ja die Reihenfolge für sich ändern können soll, bringt das ändern der Reihenfolge ewm_categories vermutlich recht wenig, da dadurch, durch jeden User die Reihenfolge zentral geändert wird. Sprich es gibt nur eine Reihen folge.
Hier handelt es sich um ein Missverständnis:
Der einzige der das ändern darf sind User die sich in das Content Management System einloggen können und die erforderlichen Rechte besitzen.
Ich habe das problem bereits selber gelöst


@mefistulo:
Danke
  Mit Zitat antworten
Alt 26.01.2005, 21:26  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Du-weisst-schon-wer
Ich habe das problem bereits selber gelöst
mit den oben genannten links?
imported_Ben ist offline   Mit Zitat antworten
Alt 26.01.2005, 22:22  
Gast
 
Beiträge: n/a
Standard

Nein auf der Basis von bicpi's Lösung
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dateien verschieben per php PHP Tipps 2004 4 02.01.2010 15:26
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
nested set dbmodell subtrees verschieben raffnix Datenbanken 12 08.06.2008 13:27
Wie Freundesnetzwerk realisieren? becks123 PHP-Fortgeschrittene 17 25.04.2008 13:57
Ordner inkl. aller Unterordner und Dateien verschieben? BartTheDevil89 PHP Tipps 2008 6 14.02.2008 08:45
Felder verschieben mit phpmyadmin? tayke Datenbanken 4 12.12.2007 22:03
Wie Powersuche realisieren? becks123 Datenbanken 1 25.06.2007 11:38
Datenbankeintrag 1 Zeile nach oben verschieben Danie PHP Tipps 2006 2 08.07.2006 00:03
Wieso verschieben sich diese Tabellen? Chr!s HTML, Usability und Barrierefreiheit 3 29.09.2005 17:41
[Erledigt] Firefox springt bei Skripten mit session_start nach oben Off-Topic Diskussionen 18 02.08.2005 12:20
SQL Tabelle - Spalten verschieben - PHPMyAdmin Datenbanken 6 12.07.2005 17:00
Layer auf x-Achse verschieben php1 HTML, Usability und Barrierefreiheit 2 24.06.2005 16:08
Datei verschieben Calli PHP Tipps 2004-2 2 15.12.2004 14:27
*.dat Datei auslesen von unten nach oben! CHRIS PHP Tipps 2004-2 12 30.11.2004 14:15
DB Ausgabe in eigenem Templatesystem realisieren Corvin PHP-Fortgeschrittene 25 06.09.2004 18:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php nach oben, html tabelle nach unten verschieben, php verzeichnis nach oben, php \nach oben\, nach oben php, tabelle nach unten verschieben html, seite nach oben php, php seite nach oben, tabelle nach oben verschieben html, http://www.php.de/php-fortgeschrittene/16513-nach-oben-amp-amp-nach-unten-verschieben-realisieren.html, nach oben link php, mysql datensätze per up and down verschieben, javascript select verschieben hoch runter, phpmyadmin felder reihenfolge, php ein verzeichnis nach oben, nested sets nach oben verschieben, geht php von oben nach unten, zeile nach unten verschieben javascript, html tabelle nach oben verschieben, php tabelle nach unten verschieben

Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.