Author: Per Thykjaer Jensen

  • Sti til fil

    // saadan laves stien til plugin:
    echo plugin_dir_url(__FILE__);

    Efterfulgt at sti til en fil fx

    // saadan laves stien til plugin:
     $fil = plugin_dir_url(__FILE__) . "minFil.php";
  • $wpdb->update problemer

    Når jeg bruger $wpdb->update kommer denne fejl: “Warning: shell_exec() has been disabled for security reasons”. Mulig løsning: brug en $wpdb->query?

    Sv. – Ja, Occams barberblad slår til igen:

    $sql = "UPDATE `MYtABLE` SET `Id`='6',`Date`='2013-02-18',`KbnProjects_Id`='456',`KbnNotes_Id`='456',`KbnStates_Id`='456' WHERE `Id`=6";
    $wpdb->query($sql);
  • I dag: U og submenu

    Nu virker CRD i en af tabellerne. U konstrueres i dag på grundlag af D. Derefter skal menuen tilrettes. Tanken er at udvikle en “toplevel” menu med administrationsrettigheder til hele molevitten – på lidt længere sigt. Arbejder med: Chrome (browser), Filezilla (ftp), phpscaffold (som meget rå skitse til koden) og Leafpad (tekst editor). Nåeh ja – og WordPress (CMS, PHP, MySQL, HTML).

    Når det virker, så har jeg en model, der kan bruges ved de øvrige tabeller. Principperne kan i praksis genanvendes til manipulation med enhver MySQL tabel. Derfor er projektet også nyttigt på længere sigt.

  • CRUD på vej

    Den primitive CRUD er på vej. Filerne fra phpscaffold kan faktisk ikke anvendes i deres nuværende form. Jeg kan dog til en vis grad bruge SQL-sætningerne og formularerne. Men koden skal i vid udstrækning skrives fra bunden af.

    Til gengæld er WP Codex nem at gå til. Jeg bruger også “Professional WordPress Plugin Development” af Williams et al. (2011).

    Umiddelbart vil jeg udvikle:

    • Adminstrator menuer
    • Præsentation i form af shortcode
    • Præsentation i form af widget til Dashboard
  • Menu dummy

    Det er relativt nemt at lave en menu på dashboard. Admin delen kan være en menu med fire undermenuer CRUD. Hvis en shortcode laves, så er den basale funktionalitet på plads.

    Måske kunne man kombinere kanban noter med microformat calendar?

    Menu
    Menu
  • Dagsværk

    • 4 x CRUD med well formed *ML
    • Overveje menustruktur
  • Dashboard menu nødvendig

    Output fra phpscaffold bliver noget i stil med 4 * 4 menuer = 16 formularer. En menu er nødvendig i Dashboard. Ellers bliver designet uoverskueligt.

  • Phpscaffold laver ikke “well formed” XML

    Phpscaffold producerer kun skitsen til en *ML. Koden er ikke “well formed”:

    <p><b>Id:</b><br /><input type='text' name='Id'/>

    Hvis koden skal validere bør dem se sådan ud:

    <p><b>Id:</b><br /><input type='text' name='Id'/> </p>

    W3Schools defineres “well formed” xml sådan:

    Well Formed XML Documents

    A “Well Formed” XML document has correct XML syntax.

    The syntax rules were described in the previous chapters:

    • XML documents must have a root element
    • XML elements must have a closing tag
    • XML tags are case sensitive
    • XML elements must be properly nested
    • XML attribute values must be quoted

    Output fra phpscaffold skal redigeres, hvis koden skal validere.

  • Dashboard widget

    Her er opskriften til en dashboard widget, inspireret af Olinik & Jackson “The WordPress Anthology” (2011):

    function kanbanAdmin() {
    	require('log-new.php');
    }
    
    // Register the new Dashboard widget
    function add_kanbanAdmin(){
    	wp_add_dashboard_widget('webkanban', 'Webkanban Create Log', 'kanbanAdmin' );
    }
    
    // add to the Dashboard 
    add_action('wp_dashboard_setup','add_kanbanAdmin');
  • Trin II

    • Nu virker mit udkast
    • Så skal alle CRUD-filer laves.
  • Phpscaffold og wpdb klassen

    <? 
    global $wpdb; // henter klassen
    
    if (isset($_POST['submitted'])) { 
    foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 
    $sql = "INSERT INTO `KbnLog` ( `Id` ,  `Date` ,  `KbnProjects_Id` ,  `KbnNotes_Id` ,  `KbnStates_Id`  ) VALUES(  '{$_POST['Id']}' ,  '{$_POST['Date']}' ,  '{$_POST['KbnProjects_Id']}' ,  '{$_POST['KbnNotes_Id']}' ,  '{$_POST['KbnStates_Id']}'  ); "; 
    
    // mysql_query($sql) or die(mysql_error()); 
    $wpdb->query($wpdb->prepare($sql)); // Query
    
    echo "Added row.<br />"; 
    } 
    ?>
    
    <form action='' method='POST'> 
    <p><b>Id:</b><br /><input type='text' name='Id'/> 
    <p><b>Date:</b><br /><input type='text' name='Date'/> 
    <p><b>KbnProjects Id:</b><br /><input type='text' name='KbnProjects_Id'/> 
    <p><b>KbnNotes Id:</b><br /><input type='text' name='KbnNotes_Id'/> 
    <p><b>KbnStates Id:</b><br /><input type='text' name='KbnStates_Id'/> 
    <p><input type='submit' value='Add Row' /><input type='hidden' value='1' name='submitted' /> 
    </form>

    Phpscaffold genererer en kode, der næsten kan anvendes; men et par linjer skal rettes. For det føste skal wpdb gøres global. For det andet anvendes wpdb-klassen til at udføre en SQL query:

    <? global $wpdb; // henter klassen // include('config.php'); - denne linje slettes er ikke noedvendig if (isset($_POST['submitted'])) { foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } $sql = "INSERT INTO `KbnLog` ( `Id` , `Date` , `KbnProjects_Id` , `KbnNotes_Id` , `KbnStates_Id` ) VALUES( '{$_POST['Id']}' , '{$_POST['Date']}' , '{$_POST['KbnProjects_Id']}' , '{$_POST['KbnNotes_Id']}' , '{$_POST['KbnStates_Id']}' ); "; // linjen herunder skal aendres til en wpdb klasse // se denne vejledning http://codex.wordpress.org/Class_Reference/wpdb // mysql_query($sql) or die(mysql_error()); // sikkerhed: brug wp prepare // echo $sql; // rens evt. m. prepare $wpdb->query($sql); // query //echo "Added row.<br />"; //echo "<a href='log-list.php'>Back To Listing</a>"; } ?> <form action='' method='POST'> <p><b>Id:</b><br /><input type='text' name='Id'/> <p><b>Date:</b><br /><input type='text' name='Date'/> <p><b>KbnProjects Id:</b><br /><input type='text' name='KbnProjects_Id'/> <p><b>KbnNotes Id:</b><br /><input type='text' name='KbnNotes_Id'/> <p><b>KbnStates Id:</b><br /><input type='text' name='KbnStates_Id'/> <p><input type='submit' value='Add Row' /><input type='hidden' value='1' name='submitted' /> </form>

    Phpscaffolds kildekode burde relativt enkelt kunne redigeres til at “kompilere” en WordPress egnet kode; men det et andet projekt.

    Ovenstående kode beskytter ikke mod forsøg på SQL-indsprøjtninger. Ved hjælp af prepare opnås en bedre beskyttelse. Wpdblinjen skal se sådan ud:

    $wpdb->query($wpdb->prepare($sql));

    Den rensede kode ser herefter sådan ud:

    <? 
    global $wpdb; // henter klassen
    
    if (isset($_POST['submitted'])) { 
    foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 
    $sql = "INSERT INTO `KbnLog` ( `Id` ,  `Date` ,  `KbnProjects_Id` ,  `KbnNotes_Id` ,  `KbnStates_Id`  ) VALUES(  '{$_POST['Id']}' ,  '{$_POST['Date']}' ,  '{$_POST['KbnProjects_Id']}' ,  '{$_POST['KbnNotes_Id']}' ,  '{$_POST['KbnStates_Id']}'  ); "; 
    
    $wpdb->query($wpdb->prepare($sql)); // Query
    
    echo "Added row.<br />"; 
    } 
    ?>
    
    <form action='' method='POST'> 
    <p><b>Id:</b><br /><input type='text' name='Id'/> 
    <p><b>Date:</b><br /><input type='text' name='Date'/> 
    <p><b>KbnProjects Id:</b><br /><input type='text' name='KbnProjects_Id'/> 
    <p><b>KbnNotes Id:</b><br /><input type='text' name='KbnNotes_Id'/> 
    <p><b>KbnStates Id:</b><br /><input type='text' name='KbnStates_Id'/> 
    <p><input type='submit' value='Add Row' /><input type='hidden' value='1' name='submitted' /> 
    </form>

    I stedet for at rette global-linjen i alle filerne kan man bevare include(‘config.php’); – og lave en phpfil med dette indhold:

    <?php global $wpdb; ?>
Enable Notifications OK No thanks

We use cookies - more information

Multimusen.dk will set a few cookies from Doubleclick, Google and the Social Media plugins they ay set some cookies. Some of my pages use APIs - such as YouTube, LinkedIn, Google Fonts, Google Maps, Mapbox, Spotify, Jetpack, Twitter, Facebook &c.. Such plugins may set the odd cookie.

Close