[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • addPrioFeld - Fehler?
Seite 1 von 1

addPrioFeld - Fehler?

Verfasst: 17. Jun 2013, 15:18
von Meusi
Hallo Leute,

ich komm bei eine Sache nicht weiter, bzw werde nicht schlau:

Ich hab via rex_form wieder ein Formular erstellt und diesmal mit addPrioField gearbeitet.

Code: Alles auswählen

$field = $form->addPrioField('sort', $form->getParam('sort'));
		$field->setLabel('Position');
		$field->setLabelField('name');
		$field->setWhereCondition('`rubric` = "'.$form->sql->getValue('rubric').'"');
DB Struktur: id, name, rubric, sort(prio)
Es soll alle anzeigen von der gleichen Rubrik (ist nur im EditMode sichtbar ;)).

Es tut auch alles wunderbar funktionieren. Jedoch Wenn ich z.B. 2 Einträge hab mit

#1: id=1, name=Name1, rubric=2, sort=1
#2: id=2, name=Name2, rubric=2, sort=2

und die nummer 2 auf "Am Anfang" setze.. setzt er mir sort automatisch auf 1 (was richtig ist) jedoch setzt er die nummer 1 nicht auf sort=2

Was dann beim erneuten editieren zum folgenden Problem führt:

Code: Alles auswählen

[query] => SELECT name,sort FROM rex_2_material WHERE 1=1 AND (`rubric` = "2") AND (sort!=1) ORDER BY sort
    [counter] => 0
    [rows] => 0
Er findet keine weiteren Einträge ;)

Was hab ich falsch gemacht, oder ist das wirklich ein Bug von Redaxo ;)?

REDAXOVERSION : 4.5

Re: addPrioFeld - Fehler?

Verfasst: 18. Jun 2013, 09:52
von Meusi
Da ich keinen Fehler bei mir gefunden hab, hab ich einfach eine Lösung gefunden, dieses Problem zu umgehen.

Code: Alles auswählen

function material_ext_save($params) {
	
	$id = rex_request('id', 'int');
	
	foreach($params['form']->getSaveElements() as $fieldsetName => $fieldsetElements) {
    	foreach($fieldsetElements as $element){

			 if($element->getFieldName() == 'sort') {
				$sort = $element->getSaveValue();
				break; 
			 }
      		 
		}
	}
	
	material::SavePrioFix('material', $id, $sort); 
	
}
// Nachdem Speichern ausgeführt
rex_register_extension('REX_FORM_SAVED', 'material_ext_save');
dazu folgende Methode

Code: Alles auswählen

public static function SavePrioFix($table, $id, $sort) {
		
		// Diese SQL Zeile wird nicht gebraucht, da diese Funktion erst nach dem Speichern ausgeführt wird!
		// $sql->setQuery("UPDATE ".self::getTable($table)." SET sort = ".$sort." WHERE id =".$id);
		
		$new_sort = $sort+1;
		
		// Alle Ausgeben die einen gleichen oder größeren Sort haben als der gespeicherte
		// Gespeicherte nicht miteinbeziehen
		$sql = rex_sql::factory();
		$sql->setQuery('SELECT id FROM '.self::getTable($table).' WHERE id != '.$id.' AND `sort` >= '.$sort);
		for ($i = 1; $i <= $sql->getRows(); $i++) {
			
			$save = rex_sql::factory();
			$save->setQuery("UPDATE ".self::getTable($table)." SET `sort` = ".$new_sort." WHERE id =".$sql->getValue('id'));
			
			$sql->next();
			$new_sort++;	
		}
			
	}
Vielleicht habt ihr ne leichtere Lösung den Post von Sort rauszubekommen :) Aber für die Leute die auch damit probleme haben, müsste das reichen :)