Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [PHP5] portare valore fuori da una classe?

    ciao ragazzi,
    cerco di essere sintetico, ho una classe ControlPanel, nella quale gestisco un certo numero di opzioni tutte nella vaiabile $options.

    ecco il listato

    Codice PHP:
    <?php /*
    class ControlPanel {
        /* Array for Default Options */
        
    var $default_settings = Array(
        
    'option7' => '0',
        );
        var 
    $options;
        function 
    ControlPanel() {
            
    add_action('admin_menu', array(&$this'add_menu'));
            
    add_action('admin_head', array(&$this'admin_head'));
            if (!
    is_array(get_option('customoptions_panel')))
            
    add_option('customoptions_panel'$this->default_settings);
            
    $this->options get_option('customoptions_panel');
        }
        function 
    add_menu() {
            
    add_theme_page('Options Panel''Options Panel'8"customoptions_panel", array(&$this'optionsmenu'));
        }
        
        function 
    optionsmenu() {
            if (
    $_POST['ss_action'] == 'save') {
                
    $this->options["option7"] = $_POST['cp_option'];
                
                
    update_option('customoptions_panel',$this->options);
                echo 
    '<div class="updated fade" id="message">Options have been saved</div>';
        }
        echo 
    '<form action="" method="post" class="themeform">';
            echo 
    '<input type="hidden" id="ss_action" name="ss_action" value="save">';
            print
    '<h4 class="fleft">Select Category for this BLOCK</h4>';
            
            
            
    catlist("option7");
            
    /*
            This will:
            1. generate a select list
            2. the user will choose a category
            3. the choice gets stored under $this->options['option7'] (which was 0 by default, and is now, let's say, 11, the "Movies" category)
            
            The thing works and the categort gets stored, but then I am not able to retrieve this stored information.
            I need it to assign selected="selected" to the currently used category.
            So that, next time, I can see the "Movies" category as the chosen one, and not the first <option> element in the select list.
            The panel would end up ovverwriting the user choice of the "Movies" category with the "Apple Computers" one, because it's the 1st in the list.
            */
            
    echo '<input type="submit" value="Save" name="cp_save" class="dochanges" />';
        echo 
    '</form>';
        }
    }

    // instance of the ControlPanel
    $cpanel = new ControlPanel();

    // the function that I used in the class
    function catlist($target_option) {
        
    $current_cat $cpanel->$options[$target_option]; // in this example, shouldn't $target_option = option7 ???
        
    $cat_obj get_categories('hide_empty=0');
        
    $cat = array();
        print 
    '<select name="'.$target_option.'" id="'.$target_option.'">';
        foreach (
    $cat_obj as $cat) {
            
    $cat_id $cat->cat_ID;
            
    $cat_name $cat->cat_name;
            echo 
    '<option value="'.$cat_id.'"';
            if (
    $current_cat == $cat_id) echo 'selected="selected"';
            echo 
    '>'.$cat_name.'</option>';
        }
        print 
    '</select>';
    }
    ?>
    per far si che la funzione catlist (esterna alla classe) funzioni al 100%, avrei bisogno di accedere alla classe tramite istanza in questo modo:

    $cpanel->$options[$target_option]

    ma per qualche motivo questa cosa al momento non funziona.

    premetto che sono alle prime armi in server-side, quindi potrei aver commesso qualche sciocchezza enorme


    perche se all interno della classe

    Codice PHP:
    $this->options["option7"
    funziona, mentre al di fuori nonostante l'istanza sia stata creata

    Codice PHP:
    $cpanel->$options[$target_option
    invece non funziona?



    Grazie in anticipo,
    se avete anche buone letture in merito all argomento classi specifico, sono molto interessato.

    Ho gia sfogliato quelle di html, non so se la risposta si celava li ma cerco ugualmente qualcosa di approfondito

  2. #2

    Re: [PHP5] portare valore fuori da una classe?

    Originariamente inviato da jockerworks
    Codice PHP:
    $cpanel->$options[$target_option
    Togli il $ prima di options ...

  3. #3
    era un errore di distrazione, nel mio listato non ho $


    e non funziona ugualmente!

  4. #4
    Originariamente inviato da jockerworks
    era un errore di distrazione, nel mio listato non ho $
    e non funziona ugualmente!
    In fase di sviluppo è opportuno abilitare la visualizzazione degli errori.

    Fallo e ti accorgerai immediatamente del problema.

    Se avessi dei dubbi:

    http://www.php.net/manual/en/languag...bles.scope.php

  5. #5
    ciao,

    beh, io l'ho abilitata e ugualmente non funziona.


    alla fine ripeto, non credo sia complicato, sono io che in back-end sono alle prime armi.


    la situazione e' questa

    Codice PHP:
    class ControlPanel {
    var 
    $options

    /*
    tramite il pannello di controllo l'utente imposta una
    serie di opzioni che finisco tutte in $options
    */
    $this->options["nome-opzione"] = $_POST['input_nome-opzione'];

    /*
    con la funzione catlist() mostro una lista di categorie, e siccome ho bisogno
    di associare categorie diverse ad opzioni diverse, passo come parametro
    il nome dell'opzione a cui associare la scelta dell'utente
    */

    catlist(nome-opzione)
    }

    // ora, FUORI dalla classe, definisco la suddetta funzione catlist

    $cpanel = new ControlPanel();
    function 
    catlist($target_option) {
        
    $current_cat $cpanel->options[$target_option];
        echo 
    $current_cat;
        
    $cat_obj get_categories('hide_empty=0');
        
    $cat = array();
        print 
    '<select name="'.$target_option.'" id="'.$target_option.'">';
        foreach (
    $cat_obj as $cat) {
            
    $cat_id $cat->cat_ID;
            
    $cat_name $cat->cat_name;
            echo 
    '<option value="'.$cat_id.'"';
            if (
    $current_cat == $cat_id) echo 'selected="selected"';
            echo 
    '>'.$cat_name.'</option>';
        }
        print 
    '</select>';
    }

    /*
    la domanda rimane:
    e' possibile o no ottenere questa $target_option dall'interno della classe?
    */ 
    se avete bisogno di ulteriori spiegazioni chiedere, magari c'e qualcosa che manca.
    grazie ancora ragazzi, contrariamente al 90% di altri forum italiani questo continua ad essere uno di quelli che frequento con gran piacere

  6. #6
    Originariamente inviato da jockerworks
    beh, io l'ho abilitata e ugualmente non funziona.
    Se hai abilitato la visualizzazione degli errori, allora il PHP DEVE visualizzarti ALMENO un Notice all'interno della funzione catlist() ...

    Per il resto, continuo ad invitarti a leggere la pagina del manuale suggerita.

  7. #7
    ho allegato un screenshot del risultato del listato, e ahime non ci sono warnings di alcun tipo

    ora mi spulcio per bene quella pagina, non avevo notato il secondo link, ti ringrazio.
    Immagini allegate Immagini allegate

  8. #8
    Originariamente inviato da jockerworks
    ho allegato un screenshot del risultato del listato
    Non è che facendo le modifiche hai introdotto un Parse Error?

  9. #9
    come ti diceva filippo, devi abilitare la visualizzazione degli errori! E se pensi di averlo fatto, ricontrolla e assicurati che sia abilitato tramite, ad esempio, un phpinfo()

    La riga
    $current_cat = $cpanel->options[$target_option];

    non potrà mai funzionare perchè $cpanel non esiste nello scope della funzione (scope => ambito) ed è questo l'errore a cui si riferiva filippo (il notice dico)

    se richiami catlist passando 2 parametri, e non uno, e nel primo/secondo che passi gli passi l'instanza di control panel risolvi il problema

    ergo, se quando richiami catlist con option7 fai

    catlist($this, 'option7');

    e poi la funziona la trasformi in

    function catlist($cpanel, $target_option) {

    a parte altri eventuali errori dovrebbe funzionare

    in ogni caso è, secondo me, sbagliato mettere la funzione cosi all'esterno, sarebbe meglio portarla all'interno della classe

    PS: mi sa di wordpress

  10. #10
    @filippo:

    devo sicuramente aver fatto qualche errore, sto guardando proprio ora




    @daniele:

    ho provato la tua soluzione e non funziona ugualmente.

    all inizio avevo incluso la funzione all interno, ma il pannello di controllo (di wordpress, come hai correttamente intuito ) mi diceva:

    Fatal error: Call to undefined function catlist()


    sia che io definissi la funzione prima o dopo il suo utilizzo.


    che macello sto pannello custom di wordpress

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.