Hallo,
ich versuche aktuell eine User-startseite so aufzubauen, dass die Informationsquellen in Form von Newsfeeds als, vom User selbst sortierbare Widgets erscheinen. Das Sortieren stellt an sich kein Problem da aber das Speichern...
Hier mal mein Code:
Aufgebaut ist das ganze Optisch etwa so:
[0] [1] [2]
[3] [4] [5]
Wenn ich nun Div #4 zwischen #0 und #1 schiebe wird der Index von #4 zu 1 aber der Index der Anderen ändert sich nicht. Somit habe ich zwar nun die Divs in dieser Reihenfolge stehen:
[0] [4] [1]
[2] [3] [5]
aber nach einem Neuladen der Seite stehen sie so:
[0] [1] [4]
[2] [3] [5]
Das Problem ergibt sich, da das Auslesen aus der Datenbank ja Zeile für Zeile geschieht und trotz der Sortierung nach Index steht #1 nunmal weiter oben in der Liste als #4. Ich habe hier einige Lösungsansätze durchprobiert und habe es auch geschafft, das Problem zu beheben wenn man die divs nur um eine Stelle verschiebt aber sobald man sie um mehr stellen verschiebt bekomme ich es nicht hin.
Nun habe ich überlegt ob es vielleicht möglich ist die gesammte Liste (div name und div id) an mein php script zu übergeben statt nur die von einem. Leider habe ich hierzu noch keinen wirklichen Lösungsansatz gefunden...
Kann mir jemand weiterhelfen?
ich versuche aktuell eine User-startseite so aufzubauen, dass die Informationsquellen in Form von Newsfeeds als, vom User selbst sortierbare Widgets erscheinen. Das Sortieren stellt an sich kein Problem da aber das Speichern...
Hier mal mein Code:
Code:
!~ indexSuccess.php
$(function() {
$( "#sortable" ).sortable({
stop: function(evt, ui) {
alert("New position: " + ui.item.index()); /* Ausgabe des Index zu Testzwecken */
alert("Item Attribute: " + ui.item.attr('id')); /* Ausgabe der ID zu Testzwecken */
$.ajax({
type: 'post',
url: 'myhome/widgets',
data: {
widgetid: $("#sortable div.widget").index(ui.item),
widgetname: ui.item.attr('id')
},
success: function(msg) {
alert("Eintrag erfolgreich: \n" + msg);
}
});
}
}).disableSelection();
});
</script>
<div id="sortable" class="twelve columns">
<?php
foreach($widgets as $widgetform) {
echo "<div id='" . $widgetform['name'] . "' class='four columns widget'>";
echo "! - " . $widgetform['name'] . " - " . $widgetform['widgetid'] . " - !";
echo "<p class='ui-state-default short'>" . $widgetform['content'] . "</p>";
echo "</div>";
}
?>
</div>
Code:
!~actions.class.php
public function executeWidgets() {
$this->user_id = '00000001';
//Widgets
$widgetid = $_POST['widgetid'];
$widgetname = $_POST['widgetname'];
$watch = Doctrine::getTable('widgets')
->findOneByName($widgetname);
$watchid = $watch['widgetid'];
try {
$updatewidget = Doctrine::getTable('widgets')
// ->findOneById($this->user_id)
// ->createQuery()
// ->where("user_id = ?", $this->user_id)
// ->addwhere("widgetname = ?", $widgetname);
->findOneByName($widgetname);
$updatewidget->setWidgetid($widgetid);
$updatewidget->save();
echo json_encode(array("state" => "OK"));
} catch (Exception $e) {
echo json_encode(array("state" => "ERROR widget Table"));
}
//Alle WidgetIds updaten
// $widgetname = $_POST['widgetname'];
$o = '1';
if($watchid < $widgetid) {
$widgetna = $widgetname + $o;
try {
$updatewidgets = Doctrine::getTable('widgets')
->findOneByName($widgetna);
$rechner = $updatewidgets['widgetid'];
$result = $rechner - $o;
$updatewidgets->setWidgetid($result);
$updatewidgets->save();
echo json_encode(array("state" => "OK"));
} catch (Exception $e) {
echo json_encode(array("state" => "ERROR widget update"));
}
}
if($watchid > $widgetid) {
$widgetna = $widgetname - $o;
try {
$updatewidget = Doctrine::getTable('widgets')
->findOneByName($widgetna);
$rechner = $updatewidget['widgetid'];
$result = $rechner + $o;
$updatewidget->setWidgetid($result);
$updatewidget->save();
echo json_encode(array("state" => "OK"));
} catch (Exception $e) {
echo json_encode(array("state" => "ERROR widget update"));
}
}
}
Aufgebaut ist das ganze Optisch etwa so:
[0] [1] [2]
[3] [4] [5]
Wenn ich nun Div #4 zwischen #0 und #1 schiebe wird der Index von #4 zu 1 aber der Index der Anderen ändert sich nicht. Somit habe ich zwar nun die Divs in dieser Reihenfolge stehen:
[0] [4] [1]
[2] [3] [5]
aber nach einem Neuladen der Seite stehen sie so:
[0] [1] [4]
[2] [3] [5]
Das Problem ergibt sich, da das Auslesen aus der Datenbank ja Zeile für Zeile geschieht und trotz der Sortierung nach Index steht #1 nunmal weiter oben in der Liste als #4. Ich habe hier einige Lösungsansätze durchprobiert und habe es auch geschafft, das Problem zu beheben wenn man die divs nur um eine Stelle verschiebt aber sobald man sie um mehr stellen verschiebt bekomme ich es nicht hin.
Nun habe ich überlegt ob es vielleicht möglich ist die gesammte Liste (div name und div id) an mein php script zu übergeben statt nur die von einem. Leider habe ich hierzu noch keinen wirklichen Lösungsansatz gefunden...
Kann mir jemand weiterhelfen?