Javascript y sessiones ??

mal3kith

Pues veréis tengo un problemática, tengo un menú desplegable el cual al pulsar sobre un item me muestra o oculta la division con sus subitems, la cosa es que al navegar por los diferentes enlaces el menu vuelve a estar oculto y necesitaría una forma al pulsar sobre uno de los items que despliegan u ocultan los submenus no solo hiciera eso sino que me guardara en algún sitios, sessiones, archivo, lo que sea para así al volver a cargarla cargarla con el menu desplegado u oculto según corresponda.

No se si me he explicado bien... comentar por si acaso que uso php (en realidad cakephp pero bueno par el caso...).

EDIT: esta un poquito mejor explicado abajo (espero)

bLaKnI

Muy muy bien no te has explicado, no... xD

Pero por lo que puedo interpretar, tienes un <select> en el que cuando te mueves por sus <option> y los seleccionas o lo que sea, quisieras que la Session se modificara, nop?

Pues tienes 2 opciones, ya que se tratan de tecnologias diferentes (Cliente vs Servidor):

  • Javascript ---> onclick/onchange ---> funcion que hace un POST a algun PHP mandando determinados datos. Dicho post puedes hacerlo desde con un formulario oculto (siendo cerdo) a algo mas elaborado como con AJAX. Tambien podria ser via window.location y mediante GET, pero claro, ya sabemos que implica esto.
  • La que yo te recomendaria, ajax directamente + jquery.
    Esto es todo lo que necesitarias:

http://api.jquery.com/click/ (por ejemplo, ya que pueden ser otros eventos)
http://api.jquery.com/jQuery.post/

Lee con calma, y metele caña.
En conclusión, es la unica manera de combinar servidor+cliente.

Existen otras soluciones, via redirecciones+JSON/XML+archivos fijos en HDD+...
todas las virguerias que quieras pensar.
Pero por lo general, AJAX es la solución mas correcta y certera.

Saludos.

edit: obviamente, el PHP al que te refieras via POST, AJAX, GET... debe encargarse de leer datos, tratarlos y modificar la session acordemente.

mal3kith

La verdad es que no es un combo es un menu, de enlaces pero que al ser muy largo estan agrupados y ocultos y los muestro segun hagan click o no sobre el titulo de la lista. Por lo pronto ya habia pensado en ajax, pero me parece un poco excesivo llamar a ajax para lo poquito que quiero y respecto a post o get los descarto por que no quiero recargar para hacerlo recargando no me complicaria.

Por si no me explique yo tengo un menu que en realidad son varios menus

<ul>
<li>titulo 1
<ul>
<li> enlace 1
<li> enlace 2
</ul>
<li>titulo 2
<ul>
<li> enlace 3
<li> enlace 4
</ul>
</ul>

Bueno asi pero todo cerradito con estilos y demas y al pulsar sobre uno de los elementos de la primera lista se me despliega u oculta segun corresponda su correspondiente sublista. Todo ello sin pasar por recargas ni nada por eso queria evitar post o get para ahorrar tiempo al usuario... y la idea era si pudiera evitar usar ajax para guardar un simple array de booleanos que me indique el estado de cada sublista. Espero haberme explicado un poco mejor ahora

Edit: maldito trim dado que no ahí tabulaciones me había currado la lista a media docena de espacios para que saliera todo colocado... no ahi

bLaKnI

Okis :)
Pues nop, no puedes.
Si quieres acceder a SESSION, o "recargas", o "Posteas" via AJAX o otra cosa.
La SESSION no es accesible desde tecnologia Cliente. :)

edit:
Tambien puedes usar Cookies:

http://www.daniweb.com/forums/thread19283.html

Pero no se... cookies... hoy en dia ya mejor ir abandonándolas... y usarlas para lo que deben usarse solamente.

Por cierto, el javascript puede combinarse con PHP eh?

var polla = <?php echo "LOLAZO!"; ?>;

Aunque no me gusta demasiado...

mal3kith

Ya pero no puedo hacer un onclick="<?php $_SESSION['menu1']=true; ?>".

Las galletitas no me gustan, las he usado una vez y las veo inútiles... solo valen para guardar contraseñas o logins y hoy por hoy los navegadores lo hacen perfectamente solos... Por curiosidad si solo quiero la llamada a ajax para que me actualize una session... en ese .php tendría que hacer un session_start(); no verdad ?

Soltrac

#5 No, no puedes. Te lo ha explicado muy bien blakni. Para escribir en la sesión debes enviar.

bLaKnI

Si, si debes hacer el session_start().

Mira:

index.php:

<?php
session_start();
...
?>
...
<head>
...

$(document).ready(function() {
   
$("#lol").click(function(){ $.post("tu_archivo_para_la_session.php", { name: "John", time: "2pm" }, function(data){ alert("Data Loaded: " + data); //aqui procesas data, que no es mas que el "codigo fuente" de la web a la que haces post una vez "montada". //Por ejemplo: if(data=='VERDADERO'){ ... }else{ ... } }); }); }); ... </head> ... <div id="lol"> </div> ... tu_archivo_para_la_session.php <?php session_start(); $a = $_POST['...']; $b = $_POST['...']; ... ... ... if(...){ $_SESSION['...'] = ... $_SESSION['...'] = ... $_SESSION['...'] = ... ... echo 'VERDADERO'; }else{ echo 'FALSO'; } ... ?>

Ves lo que sucede?

Index.php, tiene un divisor (por poner algo) que cuando lo clickas (por poner un evento), hace un $post() al fichero php determinado pasandole unos parametros a tu voluntad.
Este fichero php, tambien "inicia" session (ya que quieres la actual del servidor) y realiza lo que tu quieras. Al final, por ejemplo, mete en session lo que te interesa, y escribes (SOLAMENTE) "verdader". Sino, escribes "falso" y la session no la tocas.

Es un ejemplo. La idea es que todos los ECHOS que tu hagas en este fichero especial, son los que se leeran despues en DATA en tu index.php, ya que es como si hicieras "ver codigo fuente", para que me entiendas.
Verdad que si hicieras un php sin header, ni body ni nada de html con solo un "echo 'hola';", al hacer ver codigo fuente, verias solamente "hola"? Pues es básicamente esto.
Luego tu puedes escribir un "codigo fuente" que te venga bien, para luego parsearlo en javascript, o lo que ya es la ostia, es que puedes escribir XML o JSON, para luego especificarle a la funcion $post() que los datos llegan en este formato, para ya tratarlos directamente así en javascript, una joya vamos! :)

Example: Gets the test.php page content, store it in a XMLHttpResponse object and applies the process() 
JavaScript function.

$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     process(data);
   }, "xml");

Example: Gets the test.php page contents which has been returned in json format ()

$.post("test.php", { "func": "getNameAndTime" },
   function(data){
     alert(data.name); // John
     console.log(data.time); //  2pm
   }, "json");

Bueno, espero que veas mas o menos por donde van los tiros :)

En cuanto a esto:

Ya pero no puedo hacer un onclick="<?php $_SESSION['menu1']=true; ?>".
Seria "genial", pero tendriamos un problema gordisimo de seguridad, no crees? ;)

Lenguaje "servidor" se interpreta y traduce en tiempo de request.
Lenguaje cliente, se ejecuta en tiempo de response activo.

A pesar de todo, este tipo de "mezcla" es lo que te comentaba, que puedes usarlo para dar, por ejemplo, valores a variables particulares de javascript, para que cuando se escriba el script en el DOM, por así decirlo, ya tenga los valores correctos según PHP...

mal3kith

Si la verdad es que pensándolo lógicamente tendré que hacer session_start... la verdad es que cake me esta haciendo olvidar php y lo peor es que no me gusta xD. Pues nada una llamadita a ajax... pero es que me da por culo hacerlo para una chorradona... que vale no tardo nada en hacerlo pero...

PD: El código ese de arriba es de Jquery no ¿? (para el javascript que he necesitado nunca he tenido que recurrir a una biblio así que nunca llegue a usar jquery pero me lo parece)

PPD: Bueno gracias chicos

bLaKnI

Sep, jQuery!
Y deberia ser obligatorio abandonar el javascript a pelo por contra de jQuery! xD
Es el unico caso en que (por el momento) apoyaria un """framework""".

NeB1

#9 no te mola cake php o code igniter?

mal3kith

Yo estoy ahora usando cakephp y no me mola nada, tiene detalles interesantes comos los save y autentificaciones y demás que si que ahorra tiempo pero realmente no tanto por que la mayoría son chorradas que te haces una vez y luego vas copiando y pegando de otros proyectos o directamente metiendo a tu libreria... Jquery lo probé para mi proyecto de final de curso por la chorrada de los efectos de de aparecer poco a poco slow y demas y para un visor de imágenes y al final llegue a la conclusión de que lo que ocupaba por lo poco que lo usaba no me compensaba y lo cambie por un visor cutre de 20 mins en javascript y ni relentizacion ni ostias oculto o mostrado y ala.

No obstante tampoco he usado demasiado javascript... algunas validaciones algunos calculos y ocultar algunas cosas no mucho mas.

SiCk

#10 Eso son frameworks de PHP, no librerías de JS.

La verdad es que yo llevo peleando con js muchos años y lo manejo muchísimo, pero no aconejo aprender jquery sin saber javascript. Al menos para hacer gran parte de las cosas que hace jquery sin el, y luego, cuando las sabes, migrar.

bLaKnI

Uff no tio...
Soy y seré ANTI frameworks a muerte.
Adoro las APIs eso si.
Pero frameworks? Con respeto a todos los que gusten, yo pienso que es invertir tiempo en algo perdido. En la mayoria de casos.
Pierdes tiempo en comprender y aprender particularidades que luego no serviran de nada.
Gasta tiempo en aprender la raíz, el corazón, el lenguaje en si mismo, y luego no habrá nada que se te resista.
Además, ciertos son todos los argumentos de "ya pero el tiempo..." o "ya pero el desarrollo es mas rapido porque todo esto ya esta hecho y entonces...". Sisi, pero no.
Cuando te cansas de picar 1 y otra vez las mismas cosas, y conoces las entrañas del lenguaje bastante "profundamente", aprendes a no "repicar" desde 0, y eventualmente te fabricas tus "frameworks", por así llamarlo (tus classes, tus capas de aplicativo, tus estructuras de ficheros y aplicación, tus...) y suele ser que en una empresa, si va creciendo y no llegas con "todo hecho", varios participan en hacer crecer dichas implementaciones comunes. Y esto si que es "bonito". :)

Frameworks... nah thx.
Es que ni en JSP. MVC? Me lo hago yo. Me gusta controlar.
Además, cada aplicación tiene su "que". Y siempre innovas o añades cosas nuevas. El otro dia diseñé un site, con una estructura completamente diferente a como suelo hacerlo en PHP. Estos cambios, solo te los puedes permitir si no usas frameworks. Y es donde reside para mi el "arte de la programación".

El paradigma de la POO, es la reutilización del codigo. No el uso de un código "cerrado" y "porquesí". :)

Pero insisto, respeto a todos los que quieran usarlo. Es por el mismo motivo que "si tuviera prisa", usaria un Wordpress o un Joomla, y no intentaria hacerlo desde 0 (CMS). Pero si tuviera tiempo, sin duda me hago el mio.

SiCk

Yo me he hecho mi propio framework. Y aprendes de la ostia sinceramente. Creo que no hay nada mejor una vez llegado a un nivel de conocimientos de un lenguaje que abstraerte por encima de tu aplicación y hacer un sistema con un patrón determinado, con lo que sabes y mirando estructuras de otros FW, etc.

NeB1

#12 sé lo que es Jquery (creo que todos lo adoramos ^^), pero creo que el estaba generalizando.

#13 Si yo no uso ninguno, pero siempre tengo la duda ahí de "no sería todo mucho más rápido y una buena inversión si aprendiera a usar alguno de los famosos"?

Tampoco gastaba ningún CMS, y ahora que he aprendido a programar mis propios módulos de drupal, resulta que hay un gran número de webs, que las puedo resolver en menos de la mitad de tiempo (obviamente, hay webs que por su estructura, te es imposible o muy incomodo realizarlas con un CMS).

Por eso, y como ya pregunte en un post, tenía dudas de si era útil aprender a manejarse con un framework, la verdad es que si no lo he hecho nunca es porque me dá bastante perro y porque justo PHP lo tengo ya muy masticado

#16 tu si que me recomendarias ponerme a usar alguno??

PiradoIV

Pues yo apoyo el uso de framework (CodeIgniter en concreto) para el desarrollo de proyectos.

¿Por qué?:

1.- No reinventar la rueda (y ojo, yo ADORO reinventar la rueda en mis ratos libres).

2.- Muchas veces nuestro código, aunque funcione, no puede estar tan optimizado como otro que haya sido probado muchísimo más que el nuestro.

3.- Lo he dejado para atrás, pero es lo más importante de mi argumento: Homogeneidad en el código entre proyectos. Es horrible mirar el código de un proyecto en el que no has trabajado y llegar a pensar que la única razón de que esa página funciona es simplemente por vudú. Si bien se tarda un tiempo en comprender cualquier framework, te lo ahorrarás más adelante cuando pasees entre proyectos y todos tengan una misma base.

SiCk

Por cierto, os recomiendo que miréis este framework:
http://kohanaframework.org/

A mi me ha causado muy buena impresión.

erdanblo

#17 Es un fork de Code Igniter.

Usuarios habituales

  • erdanblo
  • SiCk
  • PiradoIV
  • NeB1
  • bLaKnI
  • mal3kith
  • Soltrac