serialize order bekijken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Advanced Mendix Developer Order Management Systeme

Advanced Mendix Developer Order Management Systemen (NL) Den Haag HBO/WO IT Professional "Als Advanced Mendix Developer impact maken op de groeiende e-commerce markt? Je doet dit bij PostNL door met je DevOps team onze Mendix applicaties verder te ontwikkelen, waarbij je complexe logistieke business processen vertaalt naar applicaties die ons primaire proces ondersteunen". Wat ga je doen? PostNL wordt een postal tech company We nemen de ontwikkeling van onze IT applicaties in eigen hand door onze eigen software-ontwikkel-capability op te zetten. Als Advanced Mendix Developer ben je onderdeel van een multidisciplinair, agile werkend Business-IT-team. Samen met dit team bouw je onze logistieke IT-applicaties verder

Bekijk vacature »

John Cena

John Cena

08/06/2010 11:08:24
Quote Anchor link
Hoi.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
                   ?>

<script type="text/javascript">
Sortable.create('menu_list');
</script>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
                
             
          
        }
    }
    
}
Gewijzigd op 08/06/2010 11:09:28 door John Cena
 
PHP hulp

PHP hulp

08/05/2021 13:06:52
 

08/06/2010 11:36:44
Quote Anchor link
Je wilt dus een sortable lijstje opslaan in de database zoals het gesorteerd is? Misschien is het dan even handig om aan te geven welk sortable ding je gebruikt. Volgens mij niet die van jQuery.
 
Peter Dorn

Peter Dorn

08/06/2010 12:11:07
Quote Anchor link
Zo te zien wordt er gebruik gemaakt van prototype + scriptaculous.

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
 
John Cena

John Cena

08/06/2010 12:24:05
Quote Anchor link
Hmm, als ik jou code gebruik krijg ik de lijst etc wel, alleen kan ik niet meer dragn-n-droppn

Gebruik trouwens inderdaad prototype en scriptacolous

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
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='.$row['id'].'>'.$row['name_dutch'].'</li>';
                }

                   echo '</ul>';
                   ?>


<script type="text/javascript">
Sortable.create( 'menu_list' , onUpdate: function( ) {
alert( Sortable.serialize( 'menu_list' ) );
}
);
</script>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
          
        }
?>
Gewijzigd op 08/06/2010 12:24:22 door John Cena
 
Peter Dorn

Peter Dorn

08/06/2010 12:26:27
Quote Anchor link
Hmm, misschien dat die ; op het eind van de alert regel daar niet thuishoort ;-) Haal die 's weg?
Gewijzigd op 08/06/2010 12:27:53 door Peter Dorn
 
John Cena

John Cena

08/06/2010 12:29:17
Quote Anchor link
Dit is wat ik nu als code heb:
Zo werkt het nog niet helaas
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
<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
 
Peter Dorn

Peter Dorn

08/06/2010 12:39:19
Quote Anchor link
Heb je ook een online voorbeeld?

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
 
John Cena

John Cena

08/06/2010 13:45:06
Quote Anchor link
Dankje, ik kan weer sorteren, krijg nu ook een lijst in een alert.
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
 
Peter Dorn

Peter Dorn

08/06/2010 13:54:48
Quote Anchor link
Eerst een Ajax request naar een PHP script, waar vervolgens een SQL query wordt uitgevoerd ;-) Ik zou natuurlijk een script voor je kunnen schrijven maar het is veel leuker om zoiets zelf te maken ;-)

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?


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
 
John Cena

John Cena

08/06/2010 14:06:56
Quote Anchor link
Hmm, ik heb nu dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>

                    ?>


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?
 
Peter Dorn

Peter Dorn

08/06/2010 14:12:09
Quote Anchor link
Hoe weet je dat hij dat niet doet? De pagina geeft sowieso geen JavaScript fouten, maar je hebt ook nergens een alert of check om te kijken wat hij wel of niet doet:

var options = {
method : 'post',
parameters : Sortable.serialize('menu_list'),
onComplete: function( req ) { alert( req.responseText ) }
};
 
John Cena

John Cena

08/06/2010 14:20:12
Quote Anchor link
Hmm, ik krijg wel wat terug, maar niet wat ik in mijn methode (waar hij heen gaat) echo...

Volgens mij moet hij dat wel doen :P

hier gaat hij de juiste methode pakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function parse_rule($o)
    {

        if ($o == true)
        {

            $this->save_menu_items();
        }

        
        else
        {
            $this->parse_menu_items();
        }
    }
?>


Hier de gekozen methode:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function save_menu_items()
    {

        echo 'hoi';
        
        
    }
?>

Hier de code van het script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>

?>
 
Peter Dorn

Peter Dorn

08/06/2010 14:22:34
Quote Anchor link
Ik zie je nergens spreken over een script dat $_GET[ 'o' ] == 'true' opvangt om vervolgens jou methode 'parse_rule' op te roepen en de rest van het script te cancelen.

Edit:
Lees net je class opnieuw. Waar zet je $this->o ?
Gewijzigd op 08/06/2010 14:23:58 door Peter Dorn
 
John Cena

John Cena

08/06/2010 14:27:42
Quote Anchor link
De hele pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
                   ?>

<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)
PHP script in nieuw venster Selecteer het PHP script
1
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';
        
        
    }
    
}


?>
Gewijzigd op 08/06/2010 14:28:06 door John Cena
 
Peter Dorn

Peter Dorn

08/06/2010 14:31:36
Quote Anchor link
Dat id de hele pagina, maar niet het volledige script ;-)
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!
 
John Cena

John Cena

08/06/2010 14:42:00
Quote Anchor link
Ik heb de rest van het systeem wel geschreven hoor. ;-)
Daarnaast, als je kijkt in deze regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 new Ajax.Request('index.php?p=menu&o=true', options);
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
        
    }

?>


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!
 
Peter Dorn

Peter Dorn

08/06/2010 14:47:05
Quote Anchor link
Je class Menu_Rank wordt al in een dusdanig laat stadium aangeroepen dat je binnen de class achteraf niet meer kan afvangen of zaken als de HEAD en BODY nog moeten worden ge-output. In een bovenliggend script moet je sowieso afvangen dat als een bepaalde parameter is meegegeven, zoals $_POST[ 'ajax' ] of iets in die trend, dat alle 'normale' content wordt ge-skipped.

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.
 
John Cena

John Cena

08/06/2010 15:55:02
Quote Anchor link
Tsja, hij mag de hele pagina best laten zien, als hij het maar in die div gooit.
 
Peter Dorn

Peter Dorn

08/06/2010 16:07:27
Quote Anchor link
Dan kan je door met de volgende stap ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.