Identifícate...

...o regístrate

codeando.net

jQuery: Tags con autocomplete (II)
mié, 05 nov 2008 - Por Jose y archivado en PHP, Javascript y Tutoriales

Sigamos con el ejercicio que empezamos la semana pasada, hoy vamos a retocar el ejemplo para que nuestro script no nos muestre las etiquetas ya seleccionadas. Para ello, modificaremos las opciones del plugin "autocomplete" para que envíe el contenido ya seleccionado a nuestro script PHP, quedando así nuestro código en javascript:

  1. <script type="text/javascript"><!--
  2. $().ready(function(){
  3. $("#tags").autocomplete('gettags.php', { multiple: true, cacheLength: 0, autoFill: true, selectFirst: true, extraParams: { t: function() { return $("#tags").val() } }, formatItem: formatItem, formatResult: formatResult } );
  4. });
  5. function formatItem(row) {
  6. return row[0] + " (" + row[1] + ")";
  7. }
  8. function formatResult(row) {
  9. return row[0];
  10. }
  11. --></script>

Como vereis, hemos añadido un nuevo parámetro en la llamada a la función autocomplete:

extraParams: { t: function() { return $("#tags").val() } }

Con esto, hacemos que el plugin entregue el valor del campo "#tags" en el parámetro "t" en cada llamada (para que esto funcione, debemos también desactivar la caché con el parámetro: cacheLength: 0) el cual utilizaremos para crear un filtro en nuestra sentencia SQL:

  1. <?php
  2.  
  3. $db = mysql_connect( 'localhost', 'user', 'password' );
  4. mysql_select_db( 'my_db', $db );
  5. if ($_GET['t'] > '') {
  6. $filter = ' AND tag NOT IN ("' . str_replace( ', ', '", "', $_GET['t'] ) . '")';
  7. } else {
  8. $filter = '';
  9. }
  10. $result = mysql_query( 'SELECT tag, COUNT(tag) FROM blogs_arts_tags WHERE tag LIKE "' . $_GET['q'] . '%"' . $filter . ' GROUP BY tag ORDER BY tag', $db );
  11. while ($row = mysql_fetch_row( $result )) {
  12. echo $row[0], "|", $row[1], "\n";
  13. }
  14.  
  15. ?>

Y ya lo tenemos, podéis volver a pasar por la página de demostración para comprobar su funcionamiento, espero que lo disfrutéis ;)

Ver demostración.

Déjanos tu comentario:

Intenta comentar sobre el tema del que trata el artículo y evita descalificaciones o palabras malsonantes.
 
 

Comentarios:

  1. Escrito por 1 el vie, 05 may 2017

    Disclaimer: We are not responsible for any financial loss, data loss, downgrade in search engine rankings, missed customers, undeliverable email or any other damages that you may suffer upon the expiration of codeando.net. For more information please refer to section 17.c.1a of our User Agreement.

    This is your final notice to renew codeando.net:

    https://domainwebpoint.com/?n=codeando.net&r=c

    In the event that codeando.net expires, we reserve the right to offer your listing to competing businesses in the same niche and region after 3 business days on an auction basis.

    This is the final communication that we are required to send out regarding the expiration of codeando.net

    Secure Online Payment:

    https://domainwebpoint.com/?n=codeando.net&r=c

    All services will be automatically restored on codeando.net if payment is received in full before expiration. Thank you for your cooperation.