Hallo, lieber Forumbenutzer. Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen Möglichkeiten der Kommunikation ist das Forum ein wenig eingeschlafen und weniger Nutzer benutzen das Forum aktiv (trotzdem lohnt es sich evtl. hier nach Lösungen zu suchen oder seine Frage zu stellen).

Wir empfehlen, für deine Fragen/Probleme aktuell (zusätzlich) Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: http://redaxo.org/slack/
Meusi
Beiträge: 158
Registriert: 18. Mär 2009, 16:18

addPrioFeld - Fehler?

17. Jun 2013, 15:18

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
Folgende Threads stehen offen:

Meusi
Beiträge: 158
Registriert: 18. Mär 2009, 16:18

Re: addPrioFeld - Fehler?

18. Jun 2013, 09:52

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 :)
Folgende Threads stehen offen:

Zurück zu „Sonstiges“