Link-urile… din ultima vreme

  1. Front-end Job Interview Questions – am răspuns corect la un sfert din întrebările despre JavaScript. Html, jQuery sau CSS au fost ușoare.
  2. Goodbye, JQuery Validation: HTML5 Form Errors With CSS3;
  3. Patterns For Large-Scale JavaScript Application Architecture;
  4. Essential JavaScript Design Patterns For Beginners (update);
  5. Stop paying your jQuery tax;
  6. Using JavaScript’s Prototype with MVC;
  7. The client-side templating throwdown: mustache, handlebars, dust.js, and more;
  8. From jQuery to JavaScript: A Reference ;
  9. Client-Side MVC frameworks compared;
  10. Debugging JavaScript ;
  11. Vendor Prefixes;
  12. * { box-sizing: border-box } FTW;
  13. CSS3 Image Styles;
  14. Control image aspect ratios with CSS3;
  15. Sass & Compass: Why You Hatin’?;
  16. Musings on Preprocessing – un articol care m-a făcut să reconsider puțin SASS & co;
  17. Responsive Images: How they Almost Worked and What We Need;
  18. How to Approach a Responsive Design;
  19. A Responsive Experience;
  20. Oamenii ăștia au niște exemple destul de cool cu ce se poate face cu CSS. Aruncă un ochi, pentru inspirație;
  21. The World of Pain that is HTML5 Video;
  22. Deliver video seamlessly to desktop and mobile devices;
  23. HTML 5 Flowchart – foarte util atunci când nu știi ce tag ar trebui să folosești;
  24. Types WordPress plugin – Easy Custom Post Types;
  25. Getting More Out of Your Blog Archives;
  26. 10 Principles of the UI Design Masters – mai vechi, dar bun;
  27. Mobile Web Resources (this is HUGE);
  28. Fact vs. Fiction: What Usability is Not;
  29. A Look Inside Mobile Design Patterns;
  30. Six Circles – An experience design framework (free book) ;
  31. Stack Exchange Open Source Projects;
  32. Coding efficiency for beginners: write reusable code;
  33. Mixu’s Node book;
  34. If you’re using Node.js, you’re doing life wrong;
  35. PhotoShow is a free, open-source, and very easy to use web gallery installable on any web server.

Tabele SQL custom în WordPress

Vine o zi în viața fiecărui dezvoltator de teme, plugin-uri și/sau soluții custom de WP când set_option() nu este suficient (de exemplu vrei să ai o indexare rapidă a unor adrese de email). Dacă faci un script „la cheie”, ce nu va fi folosit de altcineva, poți genera tabelele folosind phpmyadmin (sau un tool asemănător). Nu e recomandat (ce se întâmplă dacă se pierde accidental baza de date? faci iar un db design?), dar se poate. Sigur, această soluție este un mare NU pentru un plugin/script public.

O altă soluție – folosită de mine până nu demult – a fost $wpdb->query. Doar că există mici probleme: un eventual update al tabelelor ar însemna altă interogare (ALTER …) și ar putea fi o sursă înfloritoare de erori și orori.

O a treia variantă ar fi dbDelta. O funcție foarte tare din WP pentru care scrii doar structura. Vrei să adaugi o tabelă nouă? O adaugi pur și simplu în structura nouă!
Versiunea

Nu am efectuat benchmarks pentru a vedea cât consumă rularea acestei funcții, dar bunul simț îmi zice că atunci când poți elimina rularea unui script ar fi bine să o faci. Prin urmare, toată povestea se întâmplă într-un fișier separat, să-i zicem sql_schema.php, pe care îl includem din functions.php.

// functions.php
$ntz_db_version = '1'; // se schimbă versiunea la fiecare update
$ntz_db_current_version = get_option('ntz_db_version');
global $wpdb;

// pentru fiecare tabelă facem o șmecherie de asta
$wpdb->custom_table = $wpdb->prefix.'custom_table';

if($ntz_db_version != $ntz_db_current_version){
  require_once( 'sql_schema.php' );
}

Simplu, nu?

Următoarea mișcare se întâmplă în sql_schema.php:

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

$charset_collate = '';

if($wpdb->supports_collation()) {
  if(!empty($wpdb->charset)) {
    $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
  }
  if(!empty($wpdb->collate)) {
    $charset_collate .= " COLLATE $wpdb->collate";
  }
}

// pentru fiecare $wpdb->custom_table definit de mai sus
// avem câte un element în array-ul $sql_tables
// pe care îl iterăm copăcel-copăcel

$sql_tables[] = "CREATE TABLE $wpdb->custom_table (
    `id` INT NOT NULL AUTO_INCREMENT,
    `start_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    `name` VARCHAR(255) NOT NULL ,
    `some_integer` INT DEFAULT '10',
    UNIQUE KEY id (id)
  ) $charset_collate;";

foreach( $sql_tables as $create_table ){
  dbDelta($create_table);
}

// actualizăm db_version, pentru a nu include fișierul minune de fiecare dată
update_option('ntz_db_version', $ntz_db_version);

În cazul în care îi dai seama că ai uitat să adaugi o coloană (sau pur și simplu ai nevoie de încă o coloană peste câteva luni), nu trebuie decât să schimbi valoarea variabilei $ntz_db_version din functions.php și să actualizezi sql_schema.php:

[...]
$sql_tables[] = "CREATE TABLE $wpdb->custom_table (
    `id` INT NOT NULL AUTO_INCREMENT,
    `start_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    `end_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , // o coloană nouă!
    `name` VARCHAR(255) NOT NULL ,
    `some_integer` INT DEFAULT '10',
    UNIQUE KEY id (id)
  ) $charset_collate;";
[...]

Gata!

La următorul refresh tabela SQL se va actualiza și toata lumea va fi fericită.

Acest articol este o traducere destul de vagă a paginii din Codex.

Link-urile săptămânii 16-22 ianuarie

  1. PNGGauntlet
  2. The Responsive grid generator
  3. Responsive Web Design Tools and Services
  4. Love your devices: adaptive web design with media queries, viewport and more
  5. Event Organiser – plugin WP
  6. Backbone Fundamentals – A Free Book For Developers Of All Levels
  7. What else does HTML5 need to defeat flash? (Part 1) & Part 2
  8. Test-Driven JavaScript Development in Practice
  9. Five skills you need to make AB testing work
  10. Rapid Application Development with CakePHP
windows apple dropbox facebook twitter