Sentido Web

Referencias y explicaciones sobre desarrollo web, PHP, Ajax, XHTML, MySQL ...
19Oct
2010
Comments Off

Cómo hacer un lector de feeds con jQuery Mobile

Completísimo tutorial que nos explica cómo realizar un lector de feeds usando jQuery Mobile (que actualmente está en versión alpha). Cuyas características son las siguientes:

  • Mostrar lista de feeds con sus logos
  • Mostrar el feed cuando se hace click
  • Crear los estilos para los artículos
  • Crear un icono Apple-touch para que el usuario pueda añadir la aplicación a su teléfono
  • Usar YQL para obtener los datos del feed
  • Caché básico

Post original

15Oct
2010
Comments Off

Hacer un botón de ‘Ver código fuente’

Ejemplo bastante completo que nos explica cómo hacer un botón que nos permite mostrar el código fuente mediante javascript y CSS.

Post original

Publicidad
14Oct
2010
<!-- 2 -->

Añadir validaciones a Contact Form 7 en WordPress

Contact Form 7 es uno de los plugins de WordPress más utilizados, ya que nos permite incluir formularios de contacto de forma sencilla en nuestros blogs. El problema viene cuando queremos añadir validaciones a los campos del formulario. Una forma sencilla, quizás haya un plugin que lo haga, es editar el functions.php y añadir un action al init que compruebe los valores de $_POST y devolver el JSON oportuno:

 
add_action('init', 'comprueba_form', 1); // prioridad 1 para que actue antes que el plugin
function comprueba_form() {
  if ( 'POST' == $_SERVER['REQUEST_METHOD'] && 
       isset( $_POST['_wpcf7_is_ajax_call'] ) && 
       $_POST['_wpcf7'] == '1') { // _wpcf7 es el id del formulario para diferenciarlos
    // comprobaciones
    if ($_POST['campo'] != 'valor') {
      echo '{"mailSent":false,"into":"#wpcf7-f2-p813-o1","captcha":null,"message":"El campo 'campo' falla.","onSentOk":null}';
      exit();
    }
  }
}
08Oct
2010
<!-- 2 -->

Calcular distancias en PHP

Función PHP que calcula la distancia entre dos puntos usando latitudes y longitudes. Devuelve los datos en millas, kilómetros y millas naúticas.

Post original

Vía / DZone

06Oct
2010
<!-- 3 -->

Paypal NVP API con Codeigniter

Las tiendas online son uno de los productos más usados en desarrollo web, pero suele ser lo que más dolores de cabeza da debido al pago por tarjeta de crédito. Afortunadamente, Paypal ofrece la posibilidad de pagar mediante tarjeta de crédito. Para ello, Paypal dispone de una API NVP muy cómoda de usar.

Para los usuarios de Codeigniter existe una librería que nos facilita toda la tarea. En el controlador primero debemos indicar el SetExpressCheckout que prepara la transacción. Cuando aceptemos el OK de la llamada se redireccionará a Paypal para que el usuario pueda realizar la compra, que devolverá la llamada a una URL nuestra y en ese caso, cogiendo los datos devueltos por Paypal podremos confirmar la transacción:

define('PAYPAL_URL', 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=');
 
class Demo extends Controller {
 
    function Demo()
    {
        parent::Controller();
    }
 
    function index() {
    $this->paypal_api_lib->add_nvp('RETURNURL', 'http://servidor/demo/ok');
    $this->paypal_api_lib->add_nvp('CANCELURL', 'http://servidor/demo/cancel');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '0');
    $this->paypal_api_lib->add_nvp('ALLOWNOTE', '1');
    $this->paypal_api_lib->add_nvp('SOLUTIONTYPE', 'Sole'); // esto es lo que no obliga a que se tenga que tener cuenta Paypal
    $this->paypal_api_lib->add_nvp('LANDINGPAGE', 'Billing');
    $this->paypal_api_lib->add_nvp('AMT', '69.00');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '2');
    $this->paypal_api_lib->add_nvp('HDRIMG', 'http://servidor/logo.gif');
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('L_NAME0', 'Librito');
    $this->paypal_api_lib->add_nvp('L_AMT0', '59.00');
    
    $this->load->library('session');
    $sesion = array('paypalAmount'=>'69.00');
    $this->session->set_userdata($sesion);
 
    if($this->paypal_api_lib->send_api_call('SetExpressCheckout')){
      if (strtoupper($this->paypal_api_lib->nvp_data["ACK"]) =="SUCCESS") {
                    $token = urldecode($this->paypal_api_lib->nvp_data["TOKEN"]);
                    $payPalURL = PAYPAL_URL.$token;
                    header("Location: ".$payPalURL);
          exit();
      }
    }
    paypal_errors(); 
  }
    
  function ok() {
    $this->load->library('session');
 
    $this->paypal_api_lib->add_nvp('TOKEN', $_REQUEST['token']);
    $this->paypal_api_lib->add_nvp('PAYERID', $_REQUEST['PayerID']);
    $this->paypal_api_lib->add_nvp('PAYMENTACTION', 'Sale');
    $this->paypal_api_lib->add_nvp('AMT', $this->session->userdata('paypalAmount'));
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('IPADDRESS', $_SERVER['SERVER_NAME']);
 
    if($this->paypal_api_lib->send_api_call('DoExpressCheckoutPayment')) {
      var_dump($this->paypal_api_lib->nvp_data);
    } else {
      paypal_errors();
    }
  }
 
}

CI PayPal NVP Library

Publicidad
02Oct
2010
Comments Off

WebP: formato de imagen de Google

Google ha desarrollado un nuevo formato de compresión de imagenes llamado WebP (se pronuncia “weppy”). Es para imágenes de estilo fotográfico y en la galeria de ejemplos de comparación, la calidad es la misma o superior con un tamaño de imágenes menor…

Post original

29Sep
2010
Comments Off

Nueva AWS SDK for PHP

La gente de Amazon ha sacado una nueva SDK PHP para AWS que puede ser usada para acceder a los servicios que ofrece: Amazon Elastic Compute Cloud (EC2), the Amazon Simple Storage Service (S3), Amazon CloudFront, Amazon CloudWatch, Amazon SimpleDB, Amazon Simple Notification Service (SNS), Amazon Simple Queue Service (SQS) y Amazon Identify and Access Management (IAM).

Post original

27Sep
2010
Comments Off

Tratar datos binarios en PHP

Método sencillo para leer cabeceras binarias de imágenes GIF o JPEG u otros ficheros guardados en binario…

Post original

Publicidad
27Sep
2010
<!-- 1 -->

Curiosa creación de objetos en PHP

Recuerda mucho a Javascript y frameworks tipo jQuery, para ello utiliza métodos encadenados y un objeto genérico:

 
// Define a new class
$animal = $class->new()
  ->def('init', function($t, $name) {
    $t->name = $name;
  })
  ->def('speak', function($t) {
    echo "My name is $t->name\n";
  });
 
// Extend a class
$dog = $animal->extend()
  ->def('speak', function($t) {
    echo "My name is $t->name, I have just met you and I love you, SQUIRREL!\n";
  })
  ->def('bark', function($t) {
    echo "Woof!\n";
  });

Para poder realizar esto se necesita crear la clase Obj:

class Obj {
  public function __construct($methods=array()) {
    $this->methods = $methods;
  }
 
  public function method($name) {
    if (!isset($this->methods[$name]))
      throw new BadMethodCallException();
    return $this->methods[$name];
  }
 
  public function fn($name, $fn) {
    $this->methods[$name] = $fn;
    return $this;
  }
 
  public function __call($name, $args) {
    return call_user_func_array(
      $this->method($name),
      array_merge(array($this), $args)
    );
  }
}
 
// Allow chaining method calls off the constructor..
function Obj($methods=array())
{
return new Obj($methods);
}

PHP Object Oriented Programming Reinvented

Vía / PHPDeveloper.org

24Sep
2010
Comments Off

Carga asíncrona de scripts en Webkit

Webkit está implementando en la última versión la carga de scripts de forma asíncrona, para ello hace uso de los atributos async y defer. Esta carga de scripts se realiza sin detener el renderizado del HTML y añade el evento onLoad para ejecutar un método cuando acabe de cargarse:

<script async src="myAsyncScript.js" onload="myInit()"></script>
<script defer src="myDeferScript.js" onload="myInit()"></script>

La diferencia entre async y defer es que async se ejecuta a la primera oportunidad después de que finalice la carga y antes de que se ejecute el evento load del objeto window, por lo que con bastante posibilidad el script se ejecute asíncronamente y no en el orden en el que se muestra en al página. Los scripts defer se ejecutarán en el orden en el que se indica en la página, pero empezará despues del parseo completo pero antes de que ocurra el evento DOMContentLoaded del objeto document.

Running scripts in WebKit

Vía / CSS-Tricks