Cómo hacer Nth-child cross browser

Muchos de vosotros conoceréis el selector css “nth-child”, y los que no lo conozcáis, pues deberías! xD.

Nos permite decir adiós a tener que ir marcando en el html los típicos ‘odd’ y ‘even’ como class en nuestras tablas y listados. Un simple “nth-child(2n+1)” y fuera! Nos ahorramos un montón de trabajo.

Podéis ver mejor como funciona en este artículo: http://css-tricks.com/5452-how-nth-child-works/
El problema de esto, como siempre, es que no es cross browser, y es nuestro amigo IE quien no se entera de esta propiedad… 🙁 Incluso en IE8!!

Como dice al final del artículo, para solucionar este tema, es posible usar jQuery, y así es!
Con una línea de jQuery, podemos obtener los mismos resultados que con la css, pero para todos los navegadores!!

Y aquí viene el valor añadido sobre el artículo anterior… El ejemplo que nos aclarará como es la cosa:

Css:
<<table.myclass tr:nth-child(2n+1) { background-color: #F6F6F6; }>>

jQuery:
<<$(“table.myclass tr:nth-child(2n+1)”).css(“background-color”, “#F6F6F6”);>>

Espero que os sirva!

Editor de código “Sublime text”

Nos ha causado una muy grata impresión el editor de códigoSublime text” disponible para Linux, Windows, y Mac y queríamos presentároslo.

Simplemente os dejamos el enlace a la web.
El enlace a una revisión completa del programa (en inglés).
Y la lista de características (también en inglés):

  • Side by side multi-pane editing
  • Minimap: see your code from 10,000 feet
  • Full screen mode: use all your pixels, all the time
  • Nothing but text mode: the text, the whole text, and nothing but the text
  • Syntax highlighting for many languages with C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML supported out of the box, and more available for download
  • Multiple color schemes, with several included, and many more available for download
  • Bracket highlighting
  • Auto save: never lose your changes, not even if the dog thinks power cords are tasty
  • Fully customizable key bindings, menus and toolbar
  • Rich key binding language including sequenced key bindings, regular expression key matches, contextual bindings and parameterized bindings
  • Python plugins with a rich API
  • Rich selection of editing commands, including indenting / unindenting, paragraph reformatting, line joining and much more
  • Multiple selections: Simplify many tasks that used to require macros or regular expression
  • Column select
  • Regular expression search and replace
  • Incremental find as you type
  • Preserve case on replace
  • Bookmarks: Makes navigating through long files a breeze
  • Spell check as you type
  • Bracket matching
  • Commenting and uncommenting blocks of text
  • Asynchronous file loading, so you’re never blocked when loading files off slow network drives
  • Macros
  • Snippets
  • Auto complete
  • Repeat last action
  • Build tool integration
  • Automatic build on save
  • WinSCP integration for editing remote files via SCP and FTP

Probadlo y a ver qué os parece!!
Saludos!

Pintar los extrafields de k2 de forma selectiva

No cabe duda que los extrafields de k2 (Joomla) son de una utilidad enorme, pero la forma en la que por defecto se pintan en la ficha de un ítem, hace que pueda resultar un poco compleja la personalización de la presentación de los mismos.

K2 por defecto, se limita a recorrer los extrafields y pintarlos en una lista donde en cada línea esta el nombre, y el valor.

En la mayoría de proyectos esto puede resultar insuficiente, y lo que realmente queremos es poder pedir cualquier valor de cualquier extrafield en el momento que queramos. Es decir, obtenerlos de forma selectiva.

Para ello podéis utilizar esta función:

function get_extrafield_value($extra_fields, $name, $default = ''){
    foreach ($extra_fields as $extraField) {
        if ($extraField->name == $name) return $extraField->value;
    }
    return $default;
}

Al llamar a la función, le pasamos el vector (array) de extrafields, y el nombre del campo que queremos, y la función lo busca y nos devuelve el valor.

De esta forma, podemos presentar los extrafields como queramos:

get_extrafield_value($extra_fields, 'Tipo de vía').' '.get_extrafield_value($extra_fields, 'Nombre de la vía').', '.get_extrafield_value($extra_fields, 'Nº').'. '.get_extrafield_value($extra_fields, 'Código postal').' - '.get_extrafield_value($extra_fields, 'Localidad')

Esperamos que os ayude!

Problema “No valid database connection” usando Ajax en Joomla

Lo que nos acaba de pasar mientras desarrollábamos algunos métodos que son llamados por ajax es algo bien curioso.

Resulta que si implementas un método que utiliza el DBO de base de datos para lanzar una consulta ‘con subconsultas’, es más que probable, que el método funcione correctamente, y haga lo que tenga que hacer, pero no devuelvas correctamente el resultado.
En mi caso, simplemente devuelvo un valor numérico que le dice al javascript si la ejecución ha ido bien o no, con un simple ‘echo “1”;’ o ‘echo “-2”;’ o lo que sea.

Pues resulta, que haciendo un alert de la variable donde se recoge el resultado de la llamada ajax, vemos que el resultado es el html de mensaje de error 500 de Joomla con el texto “No valid database connection” y toda la demás parafernalia que rodea al error, envés de nuestro simple ‘1’, o ‘x’.

Más raro resulta aún cuando comprobamos que si lanzamos la url que se ejecuta por ajax directamente en el navegador, no hay ningún problema, y los resultados son los esperados.

Después de mucho darle vueltas, resulta que hay un problemilla con el tema de las subconsultas. (Véase esta página)
Increíble pero cierto.
Reescribimos las consultas de la forma que dice la documentación, y el problema está resuelto.

$database =&amp; JFactory::getDBO();
$query = "SELECT id FROM #__example2";
$database-&gt;setQuery($query);
$query = "SELECT * FROM #__example WHERE id IN (". implode(",", $database-&gt;loadResultArray()) .")";

Pensad que esto también ocurre con consultas del tipo ‘update’ o ‘delete’.

Enjoy codding!
xD

Reemplazar parámetro de una url por javascript

Este tipo de funciones que trabajan con cadenas de texto más o menos complejas como lo pueda ser una ‘url’, siempre son tediosas de hacer, y para algunos son todo un suplicio.

Seguro que hay mil maneras de hacer lo mismo que hace esta función, pero bueno, es una alternativa más, además, sin usar jquery ni ningún otro plugin o framework adicional.

Ahí va:

function replace_url_param(url, param_name, new_value)
{
    var base = url.substr(0, url.indexOf('?'));
    var query = url.substr(url.indexOf('?')+1, url.length);
    var a_query = query.split('&');
    for(var i=0; i < a_query.length; i++){
        var name = a_query[i].split('=')[0];
        var value = a_query[i].split('=')[1];
        if (name == param_name) a_query[i] = param_name+'='+new_value;
    }
    return base + '?' + a_query.join('&');
}

Esperamos que os sea útil.
(No dudéis en comentar otras alternativas, que seguro que son muy interesantes)

Validar required en inputs de tipo file en Joomla

Si has llegado a este post posiblemente es que has observado que el validador mediante mootools que trae Joomla por defecto, no funciona bien con los inputs de tipo ‘file’.

Para solucionarlo, añadiendo esta funcionalidad, debemos editar el archivo ‘media/system/js/valídate.js’ y en la línea 87 reemplazar el primer ‘if’ por este:

if ($(el).hasClass('required')) {
    if (!($(el).getValue()) && ($(el).type != 'file')) {// Exluimos los inputs de type 'file'
        this.handleResponse(false, el);
        return false;
    }
    // Validación de los inputs de type 'file'
    if (($(el).type == 'file') && ($(el).value == '')){
        this.handleResponse(false, el);
        return false;
    }
}

Esperamos que os sea de ayuda.