|

NoSQL Databases and Security

NoSQL Databases and Security: Jeff Darcy writes about NoSQL systems’ security (actually the lack of): Most NoSQL stores have no concept of security. […] Mostly it falls into two categories: encryption and authentication/authorization (collectively “a …

Post original

Ofrecer sugerencias en tu WordPress usando opensearch

Creo que para ciertos blogs es muy útil ofrecer la opción de añadir OpenSearch para que la gente puede realizar búsquedas en nuestro blog. Algo también bastante útil es que nos ofrezca sugerencias de búsquedas (tal y como hace Google). Para ello tan sólo hay que añadir una opción al XML de OpenSearch y modificar nuestro functions.php.

En el fichero XML deberemos añadir la siguiente etiqueta:

Y añadir xmlns:suggestions="http://www.opensearch.org/specifications/opensearch/extensions/suggestions/1.1" a la etiqueta inicial OpenSearchDescription

Yo en este caso he preferido usar una URL amigable, sobre todo para practicar con el wp_rewrite, pero se podría hacer perfectamente con una variable con parámetros.

Una vez cambiado el opensearch.xml deberemos modificar el functions.php, para lo cual tendremos que coger el término que se quiere sugerir y buscar entre las categorías y tags y entre los títulos de los posts para así mostrar una unión de ambos. Las categorías se ordenarán por el número de veces que aparece y los posts por fecha descendente.

add_filter('init','suggestion_init');
add_filter('query_vars','suggestion_insertMyRewriteQueryVars');
add_filter('rewrite_rules_array','suggestion_rewrite');

// Acciones iniciales
function suggestion_init(){
  // Reescribe las reglas
  global $wp_rewrite;
  $wp_rewrite->rewrite_rules();

  // Obtiene el termino a buscar
  $req = explode('/', substr($_SERVER['REQUEST_URI'], 1), 2);
  if ($req[0] == 'suggestion') {
    $result = wp_cache_get( 'suggestion_'.$req[1] );
    if ( false == $result ) {
      global $wpdb;
      $list = array();
      // Recupera las 4 categorias/tags que coincidan
      $res = $wpdb->get_results("select name from $wpdb->terms t, $wpdb->term_taxonomy tx where name like '%".$req[1]."%' and t.term_id = tx.term_id group by name order by count desc limit 4");
      foreach ($res as $item) $list[] = $item->name; 
      // Recupera las 4 anotaciones que coincidan   
      $res = $wpdb->get_results("select post_title from $wpdb->posts where post_title like '%".$req[1]."%' order by ID desc limit 4");
      foreach ($res as $item) $list[] = $item->post_title;
      // Devuelve en formato JSON     
    	$result = json_encode(array($req[1], $list));
    	wp_cache_set( 'suggestion_'.$req[1], $result );
    } 

    echo $result;
    exit();
  }
}

// Permite que WP acepte un nueva parametro en la query de la URL
function suggestion_insertMyRewriteQueryVars($vars) {
    array_push($vars, 'suggestion');
    return $vars;
}

// Reescribe la regla
function suggestion_rewrite($rules)
{
	$newrules = array();
	$newrules['suggestion/([^/]+)/(.*)$'] = 'index.php?suggestion=$matches[1]';
	return $newrules + $rules;
}

En el código he añadido caché, porque es altamente recomendable, puediendo usar el plugin WP File Cache. También debo decir que me encontré con el problema del timeout que tiene Firefox para esperar la respuesta para la sugerencia, muy pequeño para mi servidor, por lo que si quieres modificarlo, busca el fichero nsSearchSuggestions.js y modifica el valor de _suggestionTimeout.

|

Peculiar: iconos realizados con CSS

Peculiar es un paquete de iconos realizado sólo en CSS. Ha sido creado pensando en sitios y aplicaciones web que dependan de un número muy reducido de peticiones HTTP o que no necesiten o no puedan utilizar ninguna imagen. El paquete contiene 45 pict …

Post original

|

Optimizing Search Functionality with Large JavaScript Arrays

Processing arrays can take quite a few bit of time, this is something that can directly impacts the loading speed of your page and depend of the computer and the browser your users use. When you think that a typical users can load your website with a netbook , or an iphone for that matter, speeding up search in large arrays can be a good way to optimize your code …

Post original

| |

HTML5 Boilerplate

HTML5 Boilerplate is the professional badass’s base HTML/CSS/JS template for a fast, robust and future-proof site. After more than two years in iterative development, you get the best of the best practices baked in: cross-browser normalization, perfo …

Post original

CSS Triangles

I was recently redesigning my website and wanted to create tooltips.  Making that was easy but I also wanted my tooltips to feature the a triangular pointer.  I’m a disaster when it comes to images and the prospect of needing to make an image for eve
Post original

Redirecting Old URLs in WordPress

We recently devised a system to redirect old URLs in PHP so that you could avoid “page not found” errors (I suggest you read it before venturing further). In this article, we’ll create a similar system for WordPress, the popular PHP CMS. How is WordP
Post original

NoSQL Databases Aren’t Hierarchical

NoSQL Databases Aren’t Hierarchical: Unfortunately based on a wrong hypothesis: However most of the NoSQL tools seem to be NoRelational. As I see it, many of these tools map closely to the model that the relational model replaced.. the hierarchical m
Post original