Foros del Web » Programando para Internet » PHP » Zend »

Zend, pasar valores a un js tratado como un php

Estas en el tema de Zend, pasar valores a un js tratado como un php en el foro de Zend en Foros del Web. Hola, tengo un main.phtml donde accedo a un js, con funciones habituales, como chequear el nombre y mail de un form. <script type="text/javascript" src="funciones.js"></script> pero ...
  #1 (permalink)  
Antiguo 16/01/2010, 21:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Zend, pasar valores a un js tratado como un php

Hola,

tengo un main.phtml donde accedo a un js, con funciones habituales, como chequear el nombre y mail de un form.

<script type="text/javascript" src="funciones.js"></script>

pero dado que quiero manejar mensajes con variaciones a mostrar al usuario en los alert(), quiero pasarle estos vía variables de vista, o de layout, o helpers...

asi que lo he puesto en el main.phtml como php:
<script type="text/javascript" src="funciones.php"></script>

en el encabezado del funciones.php (funciones.js) he puesto:
<?php
header("Content-type: text/javascript; charset: UTF-8");
?>
y luego todo el js .

El punto es, que no se como tomar variables Zend dentro de ese funciones.php . Pareciera ignorar toda variable zend que quiera mostrar.
ya he probado de mostrar variables view, y view helpers.. pero no me reconoce ninguna.
La pregunta es, si alguno sabe, ¿cómo pasarle valores a este js convertido en php?

bueno, gracias igual.
  #2 (permalink)  
Antiguo 16/01/2010, 21:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Zend, pasar valores a un js tratado como un php

a ver si te entiendo... el script funciones.php debería ser como cualquier bootstrap, sino, ¿como esperas que inicialice el framework y defina las variables??

vamos... de algún lugar tiene que sacar las variables!!

osea, dicho script debe ser como un controlador mas... solo que la salida es código Javascript... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/01/2010, 21:57
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

hola Pateketrueque,

espero aclarar un poquito más ahora:

Tengo mi Zend andando bien, con su bootstrap, layouts y views.

En layouts tengo a main.phtml con acceso a las CSS y JS que voy a precisar, y todo el código para armar mi pagina html.
main.phtml :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title><?php echo $this->layout()->titulo; ?></title>

<link rel="stylesheet" type="text/css" media="all" href="estilos.css" />

Y ESTA LINEA QUE DEBIERA SER:
<script type="text/javascript" src="<?php echo $this->baseUrl.'/' ?>general.js"></script>
LA CAMBIO POR:
<script type="text/javascript" src="<?php echo $this->baseUrl.'/' ?>general.php"></script>

.....

general.php tiene un aspecto como este, y es donde quiere tomar una variable zend:
<?php
header("Content-type: text/javascript; charset: UTF-8");
?>
function validar_mail()
{
if (
( dir.indexOf("@") == -1 ) ||
( dir.indexOf(" ") > -1 ) ||
( dir.indexOf(".") == -1 ) )
{
alert( "<?php echo $this->mailError;?>" )
return false
}
return true
}
...

Luego dentro de mi IndexController tengo un Action donde utilizaré un clásico formulario de contacto.

public function contactoAction()
{

Ahi defino todas las variables que voy a precisar en la view.
Y es donde yo entiendo que debiera armar las variables que quiero que utilice el javascript del formulario de contacto. general.php

asi que he probado declarando:
$this->view->mailError="ha ingresado un mail invalido";
y luego:
$layout = Zend_Layout::getMvcInstance();
$layout->mailError = 'ha ingresado un mail invalido';
y luego:
$this->_helper->layout->assign("mailError ", "ha ingresado un mail invalido");

pero nada me ha resultado.

el objetivo es pasar distintos mensajes, no es que solo quiera que diga "ha ingresado mail invalido".

bueno, espero haber aclarado un poco más. gracias.
  #4 (permalink)  
Antiguo 17/01/2010, 02:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Zend, pasar valores a un js tratado como un php

por eso... en funciones.php imprimes usando la variable $this

pero, ¿de donde sale dicha variable??

recuerda que el cargar un .php usando <script/> no implica que inicializa el framework... vamos, eso lo tienes que hacer en el mismo script...

no se si entiendes lo que te intento decir... pero, por ejemplo... si tu cargas la URL del script.php directamente en la URL este te debe imprimir el código Javascript tal cual... y se ejecuta independientemente a si usas CodeIgniter, Zend, o PHP puro...

osea, claro que entiendo el propósito de tu script... pero solo se te está olvidando tratar este script, como un script completo... y no como una vista o include cualquiera... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 17/01/2010, 08:29
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

pateketrueke, gracias... creo que voy entendiendo el problema.
No puedo pasarle valores Zend a este script. Es decir, este script funciona como algo totalmente independiente.
Entonces ¿cómo puedo pasar variables a ese script? ¿debo construir el js de otra manera?
  #6 (permalink)  
Antiguo 17/01/2010, 10:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Zend, pasar valores a un js tratado como un php

de hecho, dicho script debe ser como un controlador mas...

solo necesitas pensar de ese modo, así como tienes tu controlador para el índice, y en el cargas una plantilla de HTML .... bien puedes crear un controlador que cargue dicho documento Javascript...

yo no lo veo mucha ciencia... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 17/01/2010, 12:38
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

mmm aha.. aun me confunde un poco el tema. no entiendo bien como trabajar con distintos controladores, uno para el main y otro para el js.

Creo que podría tener todo el javascript en un miJava.phtml, y en el main.phtml hacer un $this->render('miJava.phtml');
Pero ello desplegaría todo el código java dentro del html resultante, no como un archivo linkeado: <script type="text/javascript" src=...
Funcionaría igual claro.

bueno, si me puedes aclarar un poquito más bien, sino te agradezco igual.
  #8 (permalink)  
Antiguo 17/01/2010, 12:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Zend, pasar valores a un js tratado como un php

no se mucho de Zend, pero la idea es muy clara...

simplemente necesitas que en el script funciones.php donde haces uso de Zend, inicialices algún bootstrap o algo parecido que cargue todo tu sistema...

o al menos lo que necesites de el... ¿no se entiende??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 17/01/2010, 14:19
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Aha... entiendo la idea. suena lógico.
vere si puedo hacerlo. Gracias pateketrueke!

por ahora no estoy pudiendo. He leído por ahí de la posibilidad de usar ViewHelpers. Aunque no he visto sobre como se utilizaría en este punto, para linkear un archivo js dinamico.

Última edición por GatorV; 19/01/2010 a las 09:54
  #10 (permalink)  
Antiguo 17/01/2010, 19:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 7 meses
Puntos: 2534
Respuesta: Zend, pasar valores a un js tratado como un php

Cita:
Iniciado por maue75 Ver Mensaje
por ahora no estoy pudiendo. He leído por ahí de la posibilidad de usar ViewHelpers. Aunque no he visto sobre como se utilizaría en este punto, para linkear un archivo js dinamico.
lo que sucede es que te estas ahogando con un vaso de agua... tu solo imagina que vas a cargar una vista cualquiera, como si fuera HTML ordinario ...

pero en lugar de eso, utilizas el código JS ... ;)

te recuerdo que una vista no solo es HTML, también puede ser CSS, JS, PDF, XML, etc...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 17/01/2010, 21:16
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 9 años, 11 meses
Puntos: 36
Respuesta: Zend, pasar valores a un js tratado como un php

Que estés queriendo cambiar solo un texto dentro de una función de JS no es buena señal. ¿Por qué no puedes resolverlo desde JS?; ¿Cuál es tu condición que necesitas de PHP?

Que manejes un archivo PHP tampoco es buena señal. Puedes construir JS dinámico y colocarlo en línea o cachar tu código. Zend_View tiene helpers para ambos métodos.

Mirá por acá a ver si te da alguna idea: http://framework.zend.com/manual/en/...ial.headscript
__________________
I ♥ The Music!
  #12 (permalink)  
Antiguo 17/01/2010, 21:28
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

Bueno, por ahora lo he cargado como si fuese una vista cualquiera como decía pateketrueke. Gracias.

Con lo que el código JS queda expuesto en el <head> del html.
Pero por prolijidad me gustaria que quede en un link...del tipo
<script type="text/javascript" src="general.js"></script>


Concretamente todo esto viene porque quiero que el JS que controla un formulario de contacto, valide el mail ingresado, y me devuelva los mensajes de error según el idioma en que este trabajando en ese momento.

( maturano, vere el link que has puesto...)
  #13 (permalink)  
Antiguo 18/01/2010, 08:51
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 14 años, 3 meses
Puntos: 55
Respuesta: Zend, pasar valores a un js tratado como un php

lo q yo hago con mis js es algo asi

por un lado creo mis librerias / funciones y las cargo en un archivo separado

/*dentro del controllador*/
$this->view->headScript()->appendFile('miarchivo.js');

y luego en los procesos del controllador voy agregando las salidas q necesite, como registro de variables o llamada a funciones

/*dentro del contorllador*/
$this->view->headScript()->appendScript('var algo = 1; ejecutarApp();');

y luego imprimo todo sobre el final del layout

/*en el layout o en su defecto, en el view*/
<?php echo $this->headScript();?>
</body>
</html>

cuestiones por defecto, tipo la carga de jquery si lo ovy a utilizar a lo largo de todo el sitio lo meto en el bootstrap

saludos y espero sirva la ayuda
__________________
Degiovanni Emilio
developtus.com
  #14 (permalink)  
Antiguo 19/01/2010, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: Zend, pasar valores a un js tratado como un php

Solo para poner la solución como la requería maue75, tienes que poner en tu script por ejemplo:
Código HTML:
Ver original
  1. <script type="text/javascript" src="/javascript/code"></script>

Luego creas un controlador llamado javascript y una action llamada code:
Código PHP:
Ver original
  1. class JavascriptController extends Zend_Controller_Action
  2. {
  3.          public function codeAction()
  4.          {
  5.                  $this->getResponse()->setHeader('Content-Type', 'text/javascript');
  6.                  $this->view->something = "something";
  7.          }
  8. }

Luego:
code.phtml
Código javascript:
Ver original
  1. //todo tu JS
  2. var something = "<?php echo $this->view->something; ?>";

Saludos.
  #15 (permalink)  
Antiguo 19/01/2010, 10:10
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 12 años, 2 meses
Puntos: 20
Respuesta: Zend, pasar valores a un js tratado como un php

Lo que yo he hecho en esos casos es declarar una variable global de js para que interactue con el script que yo requiero, algo asi:

Código HTML:
Ver original
  1. <script type="text/javascript">
  2. var myVar = "Algo que necesito procesar";
  3. <script type="text/javascript" src="/my/core.js"></script>
__________________
I see dead pixels
  #16 (permalink)  
Antiguo 19/01/2010, 12:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

hey!!!!!!! gracias SergeMedina, GatorV, emiliodeg y pateketrueke.

Todo un menú para resolver el problema.

GatorV, SergeMedina. perfecto!!

gracias!!
  #17 (permalink)  
Antiguo 06/02/2010, 20:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

Hola GatorV, perdón por la demora, me tarde unos días en probar el método.

No he podido hacerlo andar.

Como mencionaste, hice lo siguiente:

1-/modules/default/layouts/scripts/main.phtml

agregue en el <head> la línea:
<script type="text/javascript" src="/javascript/code"></script>

2-cree un controlador:
/modules/default/controllers/JavascriptController.php

<?php

class JavascriptController extends Zend_Controller_Action
{
public function codeAction()
{
$this->getResponse()->setHeader('Content-Type', 'text/javascript');
$this->view->something = "esta es la variable java";
}

}

3--/modules/default/views/scripts/code.phtml
//todo tu JS
var something = "<?php echo $this->view->something; ?>";
alert(var);


Y no me anda. Creo que me falta algo para invocar al controlador desde
<script type="text/javascript" src="/javascript/code"></script>
pero no se como.
  #18 (permalink)  
Antiguo 06/02/2010, 21:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: Zend, pasar valores a un js tratado como un php

Apunta tu browser a http://tuproyecto/javascript/code y ve que se ve en pantalla.

Saludos.
  #19 (permalink)  
Antiguo 06/02/2010, 22:07
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

Bueno,
al principio me daba error. Decía que no encontraba a 'javascript/code.phtml' en default/views/scripts.

entonces cree una carpeta 'javascript' dentro de scripts y volque dentro a code.phtml.

Cuando pongo http://localhost/miproyecto/default/javascript/code
o... http://localhost/miproyecto/javascript/code
me da la ventana windows para hacer download de un archivo, "code", que es el propio html de la página que se corta antes de finalizar el </head>.



Gracias por estar GatorV !
  #20 (permalink)  
Antiguo 06/02/2010, 22:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: Zend, pasar valores a un js tratado como un php

Comenta la linea del header y trata de nuevo y ve que es lo que te da.

Saludos.
  #21 (permalink)  
Antiguo 06/02/2010, 22:39
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

comente la línea del header ( en JavascriptController.php )

en pantalla se ve un html incompleto...,
viendo el código fuente resultante veo que tira el layout.phtml bastante completo (es decir encabezados, links css y pie de pagina) y en el cuerpo mi inyecta el contenido de code.phtml . Pero la variable $this->view->something queda sin valor:

//todo tu JS
var something = "";
alert(var);



(bueno tengo que apagar que tengo gente durmiendo aca y estoy molestando. Gracias GV)
  #22 (permalink)  
Antiguo 06/02/2010, 22:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: Zend, pasar valores a un js tratado como un php

Bueno tienes que hacer 2 cosas:
1.- Cuando imprimes dentro de tu view solamente usa $this->something;
2.- Desactivar el layout para que no lo renderee, busca en Google como hacerlo.

Saludos.
  #23 (permalink)  
Antiguo 07/02/2010, 08:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 286
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Zend, pasar valores a un js tratado como un php

Ahhhh perfecto!!!

MUCHAS GRACIAS GATORV !!!!!!


Para que quede en el Post:
para desactivar el layout, colocar dentro del JavascriptController:
$this->_helper->layout->disableLayout();

ademas agregue en la línea que se invoca a nuestro script java, $baseUrl:
<script type="text/javascript" src="<?php echo $this->baseUrl?>/javascript/code"></script>

Etiquetas: js, pasar, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:06.