Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/05/2013, 16:14
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo no repetir funciones a lo baboso?

Gracias ipraetoriux, pero ya tengo suficiente con las broncas entre Javascript y PHP como para meterme a estudiar jQuery. Aunque entiendo que éste hace más fácil javascript, primero quiero pelearme un poco más con javascript antes de apoyarme en una biblioteca como jQuery.

Para quien visie este post, solucioné mi problema así:
Código Javascript:
Ver original
  1. function abrirVideo(nameDelVinculo, titleDelVinculo)
  2.     {
  3.         if ( titleDelVinculo != "restringido" )
  4.         {
  5.             var ventana = window.open("", "popUp1", "width=660, height=500");
  6.             ventana.document.write('<head><title>Video gratuito (demo)</title>');
  7.             ventana.document.write('<link type="text/css" href="/Joomla/images/docs/estilos.css" rel="stylesheet" />');
  8.             ventana.document.write('</head>');
  9.             ventana.document.write('<body">');
  10.             ventana.document.write('<video src="images/video/video' + nameDelVinculo + '.ogv" controls></video>');
  11.             ventana.document.write('</body>');
  12.         }
  13.         else
  14.         {
  15.             var ventana = window.open("", "popUp2", "width=660, height=500");
  16.             ventana.document.write('<head><title>Video restringido</title>');
  17.             ventana.document.write('<link type="text/css" href="/Joomla/images/docs/estilos.css" rel="stylesheet" />');
  18.             ventana.document.write('</head>');
  19.             ventana.document.write('<body>');
  20.             ventana.document.write('<div id="contenedor"><div id="contenedorForm">');
  21.             ventana.document.write('<form action="images/docs/validarUsuario.php" method="post">');
  22.             ventana.document.write('Usuario<br /><input type="text" name="usuario" /><br /><br />');
  23.             ventana.document.write('Contraseña<br /><input type="password" name="contrasena" /><br /><br /><br />');
  24.             ventana.document.write('<input type="text" name="linkClicleado" value="' + nameDelVinculo + '" class="invisible" />');
  25.             ventana.document.write('<input type="submit" value="Entrar" />');
  26.             ventana.document.write('</form></div>');
  27.             ventana.document.write('<div id="divCandado"><img src="images/img/candado1.png" id="imgCandado" /></div>');
  28.             ventana.document.write('</div>');
  29.             ventana.document.write("</body>");
  30.         }
  31.     }



y
Código HTML:
Ver original
  1. <div id="contenedorImagenes">
  2.     <div class="cuadro floatLeft">
  3.       <a href="#n" id="imgSocial1" name="A" class="link" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  4.     </div>
  5.     <div class="cuadro floatLeft">
  6.       <a href="#n" id="imgSocial2" name="B" class="link" onclick="abrirVideo(this.name, this.title)"></a>
  7.     </div>
  8.     <div class="cuadro floatLeft">
  9.       <a href="#n" id="imgSocial3" name="C" class="link" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  10.     </div>
  11.     <div class="cuadro floatLeft">
  12.       <a href="#n" id="imgSocial4" name="D" class="link" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  13.     </div>
  14.   </div>

Explico los puntos que creo pueden resultar confusos para quien, igual que yo hace unas semanas, se inicie con funciones que hagan uso de argumentos.

1. nameDelVinculo y titleDelVinculo son variables que van a guardar respectivamente los valores de las propiedades NAME y TITLE de los links. ¿Cómo? Cuando se da clic a un link, o sea cuando se activa el evento ONCLICK, se llama la función abrirVideo(this.name, this.title). Pero aquí en el nombre de la función, se quitan los argumentos nameDelVinculo y titleDelVinculo y se ponen respectivamente las instrucciones this.name y this.title. Así, cuando la función se ejecute, la variable nameDelVinculo contendrá el valor de la propiedad name de ese link en específico, por eso se pone this.name, que significa este.name. Más claro aún, la variable nameDelVinculo hace referencia a this.name del link clicleado, y la variable titleDelVinculo hace referencia a this.title. Pero hay que poner this.name y this.title en el orden en el que están los argumentos en la función, para que nameDelVinculo y titleDelVinculo correspondan con this.name y this.title.

2. ¿Y para qué demonios esta función guarda el valor de la propiedad name y title del link clicleado? Veamos, si el link clicleado NO tiene como title el valor "restringido", entonces se abre una nueva ventana y con un video. ¿cuál video? el video llamado videoA.ogv o videoB.ogv o videoC.ogv o el que corresponda según el link clicleado. Si se clicleó el link con name "B", entonces el video a mostrar será el videoB.ogv.

3. Para qué la siguiente línea:
Código Javascript:
Ver original
  1. ventana.document.write('<input type="text" name="linkClicleado" value="' + nameDelVinculo + '" class="invisible" >');
Pongo este input para guardar allí el valor del name del link clicleado, con el fin de enviarlo con el método POST a una página PHP que se encargará de leer este input mediante $_POST, y así PHP primero validará al usuario y contraseña de quien quiere ver el video B, por ejemplo, y si se valida correctamente, entonces PHP ejecuta el código Javascript necesario que abre una ventana y muestra el video B.
Ésta es la forma que encontré para que una variable PHP guarde el valor de una variable Javascript. (Hacer esto me costó varios días de búsqueda y frustración. Aunque mirado en retrospectiva, esta solución es tan de sentido común que resulta difícil no decirse a uno mismo "Pero si era tan fácil, estúpido!")



4. Una última cosa: al parecer hay necesidad de escapar todas las comillas y diagonales del código que se meta dentro de los document.write. Trabajando en local me lo exige el browser, si no, no funciona. Y pasa al revés trabajando en línea, ¿por qué? No sé.