serialize order bekijken
Ik heb een sortable list gemaakt en nu wil ik deze volgorde opslaan in de database. De volgende code gebruik ik, hoe maak die ik die zo dat hij gaat opslaan?
Het zou voor mij al goed zijn als ik kan zien wat de rank nu is, het opslaan lukt me dan nog wel waarschijnlijk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
require_once('../inc/database.php');
class Menu_Rank
{
public $_db;
public $o;
public $menu;
function __construct()
{
$this->_db = new Database();
$this->parse_rule($this->o);
}
function parse_rule($o)
{
if ($o == true)
{
$this->save_menu_items();
}
else
{
$this->parse_menu_items();
}
}
function parse_menu_items()
{
$query = 'SELECT * FROM menu ORDER BY rank';
if ($this->_db->query($query))
{
echo '<ul id="menu_list" class="sortable-list">';
while($row = $this->_db->fetchAssoc())
{
echo '<li id='.$row['id'].'>'.$row['name_dutch'].'</li>';
}
echo '</ul>';
?>
require_once('../inc/database.php');
class Menu_Rank
{
public $_db;
public $o;
public $menu;
function __construct()
{
$this->_db = new Database();
$this->parse_rule($this->o);
}
function parse_rule($o)
{
if ($o == true)
{
$this->save_menu_items();
}
else
{
$this->parse_menu_items();
}
}
function parse_menu_items()
{
$query = 'SELECT * FROM menu ORDER BY rank';
if ($this->_db->query($query))
{
echo '<ul id="menu_list" class="sortable-list">';
while($row = $this->_db->fetchAssoc())
{
echo '<li id='.$row['id'].'>'.$row['name_dutch'].'</li>';
}
echo '</ul>';
?>
<script type="text/javascript">
Sortable.create('menu_list');
</script>
Gewijzigd op 08/06/2010 11:09:28 door John Cena
Sortable.create( ) kent de parameter: onUpdate
Bijv:
<script type="text/javascript">
Sortable.create( 'menu_list' , onUpdate: function( ) {
alert( Sortable.serialize( 'menu_list' ) );
}
);
</script>
Als dat werkt is in plaats van de alert een stuk script te schrijven dat het opslaan initialiseert. Denk hier bijv. aan Ajax.Request
Gebruik trouwens inderdaad prototype en scriptacolous
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
Sortable.create( 'menu_list' , onUpdate: function( ) {
alert( Sortable.serialize( 'menu_list' ) );
}
);
</script>
Gewijzigd op 08/06/2010 12:24:22 door John Cena
Gewijzigd op 08/06/2010 12:27:53 door Peter Dorn
Zo werkt het nog niet helaas
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
<script type="text/javascript">
Sortable.create('menu_list', onUpdate: function() {
alert( Sortable.serialize('menu_list'))
}
);
</script>
?>
<script type="text/javascript">
Sortable.create('menu_list', onUpdate: function() {
alert( Sortable.serialize('menu_list'))
}
);
</script>
?>
Gewijzigd op 08/06/2010 12:29:57 door John Cena
Sorry, had nog een foutje gemaakt ;-) Alle parameters komen ook altijd tussen { en } te staan:
<script type="text/javascript">
Sortable.create('menu_list', { onUpdate: function() {
alert( Sortable.serialize('menu_list'))
} } );
</script>
Gewijzigd op 08/06/2010 20:35:36 door Tom Beuckelaere
Enig idee hoe dan met PHP dat in de database ga gooien?
Hmm zie nu dat de alert wel wat karig is met info, als dat alles is wat uit menu_list komt heb ik nog vrij weinig geloof ik.
Je zou even via kijken via dat adres?
Gewijzigd op 08/06/2010 13:52:09 door John Cena
Je ingrediënten:
- Ajax.Request met een paar parameters, o.a.: Sortiable.serialize en mogelijk de functie escape.
- Een PHP script die je Ajax request uitleest d.m.v. $_GET of $_POST, afhankelijk van de method gebruikt in de Request.
- Een script of class die verbinding maakt naar een SQL database
- En de query die alles update in je database
Suc6!
Chilion Fryslan op 08/06/2010 13:45:06:
Hmm zie nu dat de alert wel wat karig is met info, als dat alles is wat uit menu_list komt heb ik nog vrij weinig geloof ik.
Je zou even via kijken via dat adres?
Je zou even via kijken via dat adres?
In de alert krijg je alle items in je sortable te zien, op volgorde zoals dat jij ze hebt gezet, en is opgebouwd als een array:
menu_items[]=9&menu_items[]=5&menu_items[]=3
de ID's 9, 5 en 3 staan in dit geval voor de ID's die jij hebt gegeven aan de LI tags. Door deze string dus als parameter mee te sturen aan een Ajax Request krijg je in je $_GET of $_POST een PHP Array met alle ID's op volgorde. Precies dat wat jij nodig hebt!
Gewijzigd op 08/06/2010 20:39:16 door Tom Beuckelaere
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
<script type="text/javascript">
function updateOrder()
{
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list')
};
new Ajax.Request('index.php?p=menu&o=true', options);
}
Sortable.create('menu_list', { onUpdate : updateOrder });
</script>
?>
<script type="text/javascript">
function updateOrder()
{
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list')
};
new Ajax.Request('index.php?p=menu&o=true', options);
}
Sortable.create('menu_list', { onUpdate : updateOrder });
</script>
?>
Hierin geef ik dus aan dat hij naar index.php?p=menu&o=true moet gaan.
Dat doet hij niet, waarschijnlijk doe ik dus iets fout. Maar wat?
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list'),
onComplete: function( req ) { alert( req.responseText ) }
};
Volgens mij moet hij dat wel doen :P
hier gaat hij de juiste methode pakken:
Code (php)
Hier de gekozen methode:
Hier de code van het script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
<script type="text/javascript">
function updateOrder()
{
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list'),
onComplete: function( req ) { alert( req.responseText ) }
};
new Ajax.Request('index.php?p=menu&o=true', options);
}
Sortable.create('menu_list', { onUpdate : updateOrder });
</script>
?>
<script type="text/javascript">
function updateOrder()
{
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list'),
onComplete: function( req ) { alert( req.responseText ) }
};
new Ajax.Request('index.php?p=menu&o=true', options);
}
Sortable.create('menu_list', { onUpdate : updateOrder });
</script>
?>
Edit:
Lees net je class opnieuw. Waar zet je $this->o ?
Gewijzigd op 08/06/2010 14:23:58 door Peter Dorn
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
require_once('../inc/database.php');
class Menu_Rank
{
public $_db;
public $o;
public $menu;
function __construct()
{
$this->_db = new Database();
$this->parse_rule($this->o);
}
function parse_rule($o)
{
if ($o == true)
{
$this->save_menu_items();
}
else
{
$this->parse_menu_items();
}
}
function parse_menu_items()
{
$query = 'SELECT * FROM menu ORDER BY rank';
if ($this->_db->query($query))
{
$menu = array();
echo '<ul id="menu_list" class="sortable-list">';
while($row = $this->_db->fetchAssoc())
{
echo '<li id=item_'.$row['id'].'>'.$row['name_dutch'].'</li>';
}
echo '</ul>';
?>
require_once('../inc/database.php');
class Menu_Rank
{
public $_db;
public $o;
public $menu;
function __construct()
{
$this->_db = new Database();
$this->parse_rule($this->o);
}
function parse_rule($o)
{
if ($o == true)
{
$this->save_menu_items();
}
else
{
$this->parse_menu_items();
}
}
function parse_menu_items()
{
$query = 'SELECT * FROM menu ORDER BY rank';
if ($this->_db->query($query))
{
$menu = array();
echo '<ul id="menu_list" class="sortable-list">';
while($row = $this->_db->fetchAssoc())
{
echo '<li id=item_'.$row['id'].'>'.$row['name_dutch'].'</li>';
}
echo '</ul>';
?>
<script type="text/javascript">
function updateOrder()
{
var options = {
method : 'post',
parameters : Sortable.serialize('menu_list'),
onComplete: function( req ) { alert( req.responseText ) }
};
new Ajax.Request('index.php?p=menu&o=true', options);
}
Sortable.create('menu_list', { onUpdate : updateOrder });
</script>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
}
}
function save_menu_items()
{
print 'hoi';
}
}
?>
}
}
function save_menu_items()
{
print 'hoi';
}
}
?>
Gewijzigd op 08/06/2010 14:28:06 door John Cena
Want in de URL die je mij hebt gestuurd zie ik in de broncode bijvoorbeeld ook een HTML en BODY tag staan...
Vermoedelijk is er ergens een bovenliggen class die deze pagina aanroept. Hierin zal hoogst waarschijnlijk de variable $o van de class Menu_Rank geset worden. Zo niet dan is dat je fout, zo wel dan is de vraag wat er fout gaat.
Ik begin ook langzaam het vermoeden te krijgen dat je de rest van het systeem niet zelf hebt geschreven maar ergens van internet hebt geplukt. Op zich natuurlijk niets mis mee, maar dan mag je ook zelf wel even wat meer moeite doen om dit probleem op te lossen, want die indruk geef je op het moment niet echt!
Daarnaast, als je kijkt in deze regel:
Zie je daar de var meegegeven worden.
Daarnaast heb je gelijk dat ik de GET nergens in de $o gooi. beetje dom.
Heb de functie construct nu zo aangepast:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function __construct()
{
$this->_db = new Database();
$this->o = (isset($_GET['o'])) ? true : false ;
$this->parse_rule($this->o);
}
?>
function __construct()
{
$this->_db = new Database();
$this->o = (isset($_GET['o'])) ? true : false ;
$this->parse_rule($this->o);
}
?>
Maar, nu krijg ik nog steeds geen 'hoi' als echo. Wat gaat er nu dan verder fout?
Een script van internet jatten is wel een beetje jammer om te doen, is niet wat ik wil, omdat ik er zelf geen reet van snap en dus niks aan kan passen.
Bedankt voor je hulp tot zover!
Je andere probleem met $this->o is nu inderdaad opgelost. Als je goed zoekt in de alert zie je de 'Hoi' nu staan. Nu dus nog zorgen dat de rest niet meer wordt weergegeven en je bent weer een stap verder.
Tsja, hij mag de hele pagina best laten zien, als hij het maar in die div gooit.
Dan kan je door met de volgende stap ;-)