lunes, 7 de mayo de 2012

Implementar un proyecto PHP en Visual Studio 2010

Antes que nada. SI, PHP en vs2010 esto es posible gracias a plugins como VS.Php el cual permite crear proyectos para este lenguaje de programación usando el IDE de Visual Studio e incluso ‘debuguar’, así es, nos permite poner breakpoints en nuestro código y hacer Debug.

Este es otro post cortito porque en realidad es muy sencillo. La opción de implementar es muy útil cuando queremos probar nuestro proyecto en un servidor de pruebas (incluso en localhost) o directamente en producción.

Para lograr esto primero tenemos que configurar nuestro proyecto, para ello, en el explorador de soluciones, hacemos click derecho sobre el proyecto y seleccionamos Propiedades. En la ventana Paginas de propiedades de NOMBREPROYECTO, en el menú de la izquierda seleccionamos Propiedades de configuracion / Deployment.

A la derecha, en Connection settings / Deplayment mode seleccionamso local

En Deployment directory seleccionamos la carpeta donde queremos que el proyecto sea implementado (lo común sería una carpeta válida para el servidor apache).

Hecho esto, cada vez que hagamos un cambio al proyecto y queramos probarlo debemos seleccionar en el menú Generar / Implementar solución.

Una alternativa para generar cada proyecto de manera individual es hacer click derecho sobre este y seleccionar Implementar.

Si se les presenta algún problema como el siguiente:
------ Operación Implementar omitida: proyecto: YYYYYYYY, configuración: Production PHP 5.2 ------
Proyecto no seleccionado para generarse para esta configuración de solución

Asegúrense de tener seleccionada la casilla Implementar para todos los proyectos deseados en el menú: Generar / Administrador de configuración… .



jueves, 3 de mayo de 2012

Realizar seguimiento del elemento activo en el Explorador de Soluciones

Para aquellos que usan Visual Studio 2010 seguramente en más de una ocasión se vieron frustrados por que al cambiar entre pestañas de código el archivo seleccionado en el explorador de soluciones cambiaba automáticamente. Bien, para activar (o desactivar) esta opción en realidad es muy sencillo, simplemente:

  1. En el menú Herramientas / Opciones / Proyectos y soluciones / General
  2. Activamos o desactivamos la casilla para “Realizar seguimiento del elemento activo en el Explorador de Soluciones”
  3. Presionamos Aceptar





domingo, 15 de abril de 2012

var_dump a String

Una forma rápida para pasar a una variable el resultado de var_dump.

<?PHP
ob_start();
var_dump($_SERVER);
$dump = ob_get_clean();
?>
Fuente | php.net

lunes, 26 de marzo de 2012

Guardar imágenes de páginas que no se puede (Como Flickr)

Seguramente conocen la opción para descargar una foto de una página. Simplemente le damos click derecho y seleccionamos “Guardar imagen como”. Pero ¿qué pasa cuando de alguna u otra manera esta opción no está disponible? Bueno siempre queda la opción de presionar la tecla Imprimir pantalla (Imp pant o Prt Scr) y pegarla en Photoshop o Paint.

Abrir un programa de edición fotográfica, aparte de que puede resultar un poco tedioso y más si es el caso de PhotoShop que es más pesado, puede que la imagen sea más grande que la pantalla y tendremos que estas copiando por partes. En este blog me encontré una opción que para más de uno puede resultar muy útil.

Consiste en ejecutar un par de instrucciones desde JavaScript, para ellos simplemente copiamos y pegamos el código que les pongo a continuación en la barra de direcciones y presiona Enter. Listo, ya le podemos dar click derecho a la imagen y guardarla:

javascript: for ( i=0; i<document.styleSheets.length; i++) void(document.styleSheets.item(i).disabled=true);


Derechos de autor

Hay que tener algo muy en cuenta, la mayoría de las veces (por no decir todas) si no podemos guardar la imagen, es porque el dueño de la foto o de la página ha aplicado ciertos derechos de autor sobre su contenido y no desea que descarguemos esa foto. El que podamos descargar la foto no significa que tengamos el derecho a copiarla pero bueno no es mi intención entrar a debatir esos temas, cada uno de ustedes sabrá que hacer. Así que ahora que ya saben cómo hacerlo, no lo hagan jejejejeje.

Problemas con Internet Explorer 9

Bueno después de tanto que nos hemos quejado de la seguridad en Internet Explorer, los de Microsoft parece que se pusieron las pilas con ie9, si tienes este navegador y copias y pegas el código tal cual te lo pongo, veras que le quita la primera palabra, esto es por seguridad, para proteger a los usuarios inexpertos de que alguien les diga que ejecuten algún código malicioso. Si usas ie9 vas a tener que escribir la palabra JavaScript y los 2 puntos.

jueves, 23 de febrero de 2012

Columnas o div’s que crecen iguales con CSS

Cuando estamos diseñando una página es muy común que deseemos la barra de menú a la izquierda o derecha y el contenido a un lado y que lo queramos hacer SIN tablas. En ocasiones no nos importa si los div’s, pero en otras, por cuestiones de estética deseamos que ambas estén del mismo tamaño y si a esto le agregamos que muchas páginas son de contenido dinámico y no tenemos idea de que tan grande va a crecer el Height de los div’s (y aunque no sean páginas de contenido dinámico puede resultar tedioso poner un Height en cada situación del sitio web) puede resultar un poco frustrante. Sin embargo la solución no es tan complicada como pensamos.

¿Por qué las tablas no son una solución? Bueno pues por que como comenta Pedro CM en su blog: “Es más fácil renderizar un contenido con div's que con tablas. Los div's son más rápidos, semánticos y accesibles.”.

Caso

Supongamos que tenemos un div Container y dentro de este 2 div’s, uno con la clase Side para el menú y otro con la clase Content para el contenido de la pagina. Además queremos que Side esté a la derecha de Content y que ambos crezcan del mismo tamaño.

Solución 1

Mas fácil de lo que podemos pensar es simplemente asignar table-cell a la propiedad display de las clases Side y Content y eso es todo, obtendríamos un resultado como la imagen 01.

Opcionalmente podemos asignar el valor table a la propiedad display de la clase Container para obtener un resultado como la imagen 02.

imagen 01

imagen 01

Código

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
.Container
{
background-color:Red;
display:table;
}

.Side
{
background-color:blue;
display:table-cell;
}

.Content
{
background-color:Green;
display:table-cell;
}
</style>
</head>
<body>

<div class="Container">
<div class="Side">texto <br />texto <br />texto <br />texto <br /></div>
<div class="Content">texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br /></div>
</div>

</body>
</html>

Solución 2

Desafortunadamente la solución uno no funciona con Internet Explorer 6, lastima era algo muy fácil. Aunque la verdad yo ya casi no diseño para ie6 (salvo algunas solicitudes especiales) pues el número de usuarios de ie6 ya no es el mismo que hace 3 años. Personalmente prefiero usar la solución uno, pero es cuestión de cada quien cual usar. El ejemplo de la solución 2 lo vi en: http://www.cssblog.es/columnas-equilibradas-en-css/

codigo

<!DOCTYPE html PUBLIC "-//W3C//DTD = XHTML 1.0=20 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es-es">
<head>
<title>Columnas equilibradas</title>
<style type="text/css">
body
{
background-color:Yellow;
}

#caja_izq
{
width: 850px;
margin: 20px auto;
color: #fff;
background-color: #4c9ab1;
overflow: auto;
}

#caja_der
{
width: 500px;
float: right;
background-color: #82b04d;
border-left: solid 30px #fff;
}

.columna_izquierda
{
width: 280px;
float: left;
padding: = 20px;
position: relative;
margin-left: -350px;
}

.columna_derecha
{
width: 450px;
float: left;
padding: = 20px;
}
</style>
</head>
<body>

<div id="caja_izq">
<div id="caja_der">
<div class="columna_izquierda">texto <br />texto <br />texto <br />texto <br /></div>
<div class="columna_derecha">texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br />texto <br /></div>
</div>
</div>

</body>
</html>

sábado, 4 de febrero de 2012

Problemas comunes al activar URLs amigables en Joomla

Renombrar htaccess.txt

El primer problema que suele presentarse al Activar Motor de búsqueda para URLs amigables y Usar la reescritura URL en Joomla, es que no hacemos caso al aviso de Joomla sobre renombrar el archivo htaccess.txt a .htaccess o simplemente no nos deja el Windows.

Solución uno

Si no ves la extensión de los archivos, lo común seria ir a una ventana del explorador de Windows, presionar la tecla Alt para que nos aparezca el menú, seleccionar Herramientas y luego Opciones de carpeta. Luego hacer click en la pestaña Ver y finalmente en “Configuración avanzada” desmarcar la casilla “Ocultar las extensiones de archivo para tipos de archivo conocidos”. Después intentaríamos darle click derecho al archivo htaccess.txt y seleccionar “Cambiar nombre” (O presionar la tecla F2), intentaríamos cambiar el nombre a .htaccess y Windows nos diría “Debe escribir un nombre de archivo”. El explorador de Windows no nos dejara así que si tienes otro sistema operativo probablemente lo logres, pero si solo tienes Windows, no te preocupes que hay otras soluciones

Solución dos

Si estas en esto es porque probablemente te dediques a hacer páginas web, en ese caso puede ser que en tu computadora ya tengas otro archivo con el nombre .htaccess en otra carpeta. De ser así, simplemente cópialo y págalo donde lo ocupes, ábrelo con el Bloc de notas (Click derecho / Abrir con), bórrale el contenido y pégale el del archivo htaccess.txt que trae Joomla. No tendrás problemas para guardarlo.

Solución tres

Ya que estamos con eso del Bloc de notas, probablemente la forma más fácil y rápida es abrir el archivo htaccess.txt que trae Joomla, hacer click en Archivo / Guardar como, en la ventana “Guardar como” que se abre, escribir .htaccess en Nombre y en tipo seleccionar “Todos los archivos (*.*)”, presionar el botón Guardar y listo.

Solución cuatro

Si tienes instalado algún cliente FTP como FileZilla, puedes subir el archivo a tu servidor, renombrar el archivo y descargarlo de nuevo. Bueno esta solución puede ser un poco tediosa.

Solución cinco

Ir a Inicio / Ejecutar (o presionar la tecla Windows+R), escribir cmd y presionar Aceptar. En la consola o símbolo del sistema dirigirse a la ruta del archivo deseado, escribir lo siguiente y presionar Enter: rename htaccess.txt .htaccess

Conclusión

Estas son solo algunas soluciones, usa la que más se te acomode.

No tener cargado el módulo de rewrite en Apache

Bueno como ya explique en el post .htaccess: Invalid command 'RewriteEngine' uno de los principales problemas que se puede presentar a la hora de activar URLs amigables en Joomla es que justamente no tengamos activado el módulo de Apache para esto. Si este es tu caso, en ese post esta la solución.

Que el archivo .htaccess este corrupto o con un formato inadecuado

Otro problema que me ha tocado ver es cuando el archivo .htaccess esta corrupto. La versión correcta es esta:

##
# @package Joomla
# @copyright Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

# RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

RewriteBase está comentado

Si la ruta de los archivos físicos no está directamente relacionada con la ruta de las URL, debemos eliminar el comentario de esta linea del archvo .htaccess, para eso solo quitamos el símbolo # que esta al inicio de la misma. # RewriteBase /

RewriteBase inadecuado

En algunas ocasiones como por ejemplo si no tenemos Joomla en el directorio raíz sino en una subcarpeta, necesitamos especificar la ruta de Joomla en el archivo .htacces

Para eso, buscamos la linea: # RewriteBase /
Y la cambiamos por: RewriteBase /CarpetaJoomla

Donde CarpetaJoomla es el nombre del directorio donde tenemos los archivos de Joomla.

Options +FollowSymLinks

Algunos hostings no nos permiten hacer ciertas configuraciones como es caso de “Options +FollowSymLinks” que es requerida por mod_rewrite. El problema es que nuestro hosting ya la activo y no permite modificarlo desde el .htaccess, si es tu caso, solo comenta esta línea agregando el símbolo # al inicio de la misma.

#Options +FollowSymLinks

Problemas al reiniciar Apache en Windows

Recientemente hice algunos cambios a la configuración de apache en mi computadora y cuando lo trate de reiniciar ps nomás no quiso. Para no hacer muy largo este post, era porque tenía activado el UAC (Control de cuentas de usuario) de Windows. Procedí a desactivarlo, reinicie la computadora y todo a las mil maravillas. Ya después puedes activar de nuevo el UAC.

Para desactivar el UAC:
- Inicio / Panel de control / Cuentas de usuario
- Puedes copiar y pegar esto en la barra de dirección de una ventana del explorador de Windows: Panel de control\Todos los elementos de Panel de control\Cuentas de usuario
- Seleccionas: Cambiar configuración de Control de cuentas de usuario
- Mueves la barra hasta el nivel más bajo
- Presionas Aceptar.

Es todo.

viernes, 3 de febrero de 2012

.htaccess: Invalid command 'RewriteEngine'

Hoy me toco que cuando quise activar el “Motor de búsqueda para URLs amigables” y “Usar la reescritura URL” en Joomla 2.5.1 pues simplemente se hiso un desastre, ya que solo obtenía el error 500 (Internal Server Error) en el navegador. Modifique el archivo .htaccess a mas no poder, le moví a Joomla algunas configuraciones, pensé que como la versión acababa de ser liberada traía errores, en fin, hice de todo hasta que se me ocurrió revisar el log de errores del Apache.

Para los que no saben dónde esta este archivo, la ruta más común para Appserv es esta: C:\AppServ\Apache2.2\logs\error.log

Y ahí estaba el error, completamente claro.
[Fri Feb 03 16:24:55 2012] [alert] [client 127.0.0.1] X:/YYYYY/ZZZZZ/Joomla_251/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration, referer: http://127.0.0.1/

Lo que estaba pasando es que no tenía cargado el módulo mod_rewrite. Activarlo es muy sencillo:
- Abrimos el archivo httpd.conf (C:\AppServ\Apache2.2\conf\httpd.conf)
- Buscamos la línea: #LoadModule rewrite_module modules/mod_rewrite.so
- Le quitamos el # para des comentar esa línea quedando de la siguiente manera: LoadModule rewrite_module modules/mod_rewrite.so
- Reiniciamos apache: Inicio / Todos los programas / Appserv / Control Server by Service / Apache Restart

Y listo!!! Con eso debería ser más que suficiente.