Visualizzazione risultati 1 fino 6 di 6

Discussione: Plugin Maker: Come modificare un form affinché salvi sia nel database che in un file?

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Super Moderatore
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,552

    Red face Plugin Maker: Come modificare un form affinché salvi sia nel database che in un file?

    Citazione Originalmente inviato da Premessa
    So che è un argomento che può avere a che fare sia con html che con php, ma trattandosi di un plugin di wordpress e nel dubbio tra le varie categorie ho postato qui così qualche smenettone di WordPress magari saprà darmi qualche consiglio
    Il mio plugin (my custom css) salva su database e da lì ricava il codice per presentarlo direttamente nel sorgente della pagina.

    Questo però causa (o può causare) un aumento del peso della pagina e dunque riduce leggermente le prestazioni del sito. Così pensavo di salvare il contenuto "anche" su file e incorporarlo nella pagina tramite @import. Dico "anche" perché dal pannello admin di wordpress dovrei comunque rivederlo caricandolo dal database... Così facendo il browser degli utenti lo caricherebbero in cache e avremmo i sorgenti meno "lunghi" nel caso di tanto codice e un miglioramento delle prestazioni (fin qui penso che siam d'accordo).
    -
    Insomma, pensavo di modificare questo form per mantenere il salvataggio sul database aggiungendolo anche su file (magari aggiungendo un *time così da non avere poi problemi con la cache degli utenti però)

    Voi cosa mi consigliate di fare? :)
    Codice PHP:
    <div class="wrap">
    <h2><?php _e('My Custom CSS Options','mccss'); ?></h2>
    <form method="post" action="options.php">
    <?php settings_fields( 'mccss_settings' ); ?>
    <p><?php _e('Custom CSS Code:','mccss'); ?> <input type="submit" class="button-secondary" value="<?php _e('Save','mccss'); ?>" style="font-size: 20px; height: 35px; position: fixed; top: 35px; right: 15px; z-index: 5;" /></p>
    <textarea name="my_custom_css" id="my_custom_css" dir="ltr" style="width:100%;height:350px;"><?php echo get_option('my_custom_css'); ?></textarea>
    <script language="javascript">var editor = CodeMirror.fromTextArea(document.getElementById("my_custom_css"), { lineNumbers: true });</script>
    <p>
    <input type="submit" class="button-primary" value="<?php _e('Save','mccss'); ?>" />
    <input type="button" class="button-secondary" value="Top^" onclick="self.scrollTo(0, 0); return false;" style="float: right;" />
    </p>
    </form>
    </div>
    > Codice completo: http://plugins.trac.wordpress.org/br...custom-css.php
    Ultima modifica di darkwolf : 08-03-2013 alle ore 13.08.50
    » Salvatore Noschese - L'AltroWeb | Seguimi su: facebook | twitter | Google+
    # Che aspetti? Unisciti alla community! Tanti nuovi gruppi ti aspettano


  2. #2
    Guest

    Predefinito

    puoi agganciarti all'hook di update_option_option-name e fargli salvare il CSS su di un file in automatico ogni volta che viene salvata l'opzione.

  3. #3
    L'avatar di darkwolf
    darkwolf non è connesso Super Moderatore
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,552

    Predefinito

    Nick, perdonami, ma in base a quei sorgenti sapresti darmi un indizio (a tempo libero, ovvio)? :)
    -
    Mentre per il problema della cache pensavo che posso risolverla semplicemente tramite filemtime
    Codice PHP:
    style.css?' . filemtime('style.css') . '
    Ultima modifica di darkwolf : 11-03-2013 alle ore 18.02.56
    » Salvatore Noschese - L'AltroWeb | Seguimi su: facebook | twitter | Google+
    # Che aspetti? Unisciti alla community! Tanti nuovi gruppi ti aspettano


  4. #4
    Guest

    Predefinito

    dovresti fare una nuova funzione richiamata durante l'aggiornamento dell'opzione sul database mediante

    Codice PHP:
    add_action('update_option_option-name','my_func', 10, 2);
    dove option-name è il nome dell'opzione in cui salvi il CSS sul db.
    Questa funzione non dovrà fare alto che prendere il nuovo valore dell'opzione e salvarlo su file.

    Codice PHP:
    function my_func($oldvalue, $_newvalue) {
    $path = 'percorso-file';
    file_put_contents($path, $_newvalue);
    return;
    }
    Per approfondire, guarda la funzione update_option che si trova in wp-includes/option.php.

    Il codice puoi aggiungerlo in coda al plugin, tanto è indipendente dal resto.

  5. #5
    L'avatar di darkwolf
    darkwolf non è connesso Super Moderatore
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,552

    Predefinito

    Grazie mille nick :)
    Non ho capito sola cosa rappresentano "$oldvalue, $_newvalue" - ora faccio qualche prova in locale/leggo un po' e vedo cosa ottengo
    -
    Edit, ok, credo di esserci arrivato! Rappresenta un confronto fra quanto c'era prima e quanto verrà inserito adesso (in effetti il nome era piuttosto indicativo) :P :D

    -

    Nick, scusami, io ci smanetto da un po', ma non ottengo nulla (non scrive né aggiorna il file) :(
    Codice PHP:
    // Register Settings
    function register_settings_mccss()
    {
    register_setting('mccss_settings','my_custom_css');
    }

    function mccss_options()
    {
    ?>
    <div class="wrap">
    <h2><?php _e('My Custom CSS Options','mccss'); ?></h2>
    <form method="post" action="options.php">
    <?php settings_fields( 'mccss_settings' ); ?>
    <p><?php _e('Custom CSS Code:','mccss'); ?> <input type="submit" class="button-secondary" value="<?php _e('Save','mccss'); ?>" style="font-size: 20px; height: 35px; position: fixed; top: 35px; right: 15px; z-index: 5;" /></p>
    <textarea name="my_custom_css" id="my_custom_css" dir="ltr" style="width:100%;height:350px;"><?php echo get_option('my_custom_css'); ?></textarea>
    <script language="javascript">var editor = CodeMirror.fromTextArea(document.getElementById("my_custom_css"), { lineNumbers: true });</script>
    <p>
    <input type="submit" class="button-primary" value="<?php _e('Save','mccss'); ?>" />
    <input type="button" class="button-secondary" value="Top^" onclick="self.scrollTo(0, 0); return false;" style="float: right;" />
    </p>
    </form>
    </div>
    <?php
    }

    // Save also in *.css file!
    $option_name = get_option('my_custom_css'); // prendo i vecchi dati
    $_newvalue = $_POST['my_custom_css']; // qui prendo quelli nuovi dalla textarea ($_POST)
    function my_custom_css_make_style($option_name, $_newvalue)
    {
    $path = plugin_dir_url(__FILE__)."my_style.css";
    file_put_contents($path, $_newvalue);
    return;
    }
    add_action('update_option_mccss_options','my_custom_css_make_style', 10, 2);
    -
    Riedit: dopo varie prove ho risolto semplicemente così:
    Codice PHP:
    <div class="wrap">
    <h2><?php _e('My Custom CSS Options','mccss'); ?></h2>
    <form method="post" action="options.php">
    <?php settings_fields( 'mccss_settings' ); ?>
    <p><?php _e('Custom CSS Code:','mccss'); ?> <input type="submit" class="button-secondary" value="<?php _e('Save','mccss'); ?>" style="font-size: 20px; height: 35px; position: fixed; top: 35px; right: 15px; z-index: 5;" /></p>
    <textarea name="my_custom_css" id="my_custom_css" dir="ltr" style="width:100%;height:350px;"><?php echo get_option('my_custom_css'); ?></textarea>
    <script language="javascript">var editor = CodeMirror.fromTextArea(document.getElementById("my_custom_css"), { lineNumbers: true });</script>
    <p>
    <input type="submit" class="button-primary" value="<?php _e('Save','mccss'); ?>" />
    <input type="button" class="button-secondary" value="Top^" onclick="self.scrollTo(0, 0); return false;" style="float: right;" />
    </p>
    </form>
    </div>
    <?php
    // Save also in *.css file!
    $mycustomcss = strip_tags(get_option('my_custom_css'));
    $css_link = plugin_dir_path(__FILE__)."my_style.css";
    if(empty(
    $mycustomcss))
    {
    unlink($css_link);
    }
    else
    {
    file_put_contents($css_link, "/******* Do not delete this file *********/\n/*\nMy Custom CSS - Maked by Salvatore Noschese\na.k.a. DarkWolf - http://www://darkwolf.it/\n*/\n\n".$mycustomcss);
    }
    }
    Cioè, nel modo più banale possibile (niente funzioni, niente add_action, solo "file_put_contents"), e funziona alla grande
    Ultima modifica di darkwolf : 13-03-2013 alle ore 18.45.47 Motivo: Unisco...
    » Salvatore Noschese - L'AltroWeb | Seguimi su: facebook | twitter | Google+
    # Che aspetti? Unisciti alla community! Tanti nuovi gruppi ti aspettano


  6. #6
    L'avatar di darkwolf
    darkwolf non è connesso Super Moderatore
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,552

    Predefinito

    Riapro la discussione a seguito di questa segnalazione: http://wordpress.org/support/topic/u...3#post-3995205
    -
    Warning: file_put_contents(/www/htdocs/**********/***********/wp-content/plugins/my-custom-css/my_style.css) [function.file-put-contents]: failed to open stream: Permission denied in /www/htdocs/**********/***********/wp-content/plugins/my-custom-css/my-custom-css.php on line 58
    Insomma, file_put_contents causa qualche problema in determinate circostanze che ancora non ho ben capito (tutto ok su alterista e su wamp).
    -
    La linea 58 è questo blocco:
    Codice PHP:
    function makecss()
    {
    // make my_style.css and write css code!
    /* 58 >>> */
    $makecss = file_put_contents(css_path(), "/********* Do not edit this file *********/\n/*\nMy Custom CSS - Maked by Salvatore Noschese\na.k.a. DarkWolf - http://www://darkwolf.it/\n*/\n\n".mycustomcss());
    return
    $makecss;
    }
    Idee su come posso risolvere?
    Ultima modifica di darkwolf : 20-03-2013 alle ore 14.54.14
    » Salvatore Noschese - L'AltroWeb | Seguimi su: facebook | twitter | Google+
    # Che aspetti? Unisciti alla community! Tanti nuovi gruppi ti aspettano


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •