data cache drupal drupal-6 drupal-views drupal-theming

cache - metatag drupal



Vistas de Drupal: ¿es posible dividir la forma expuesta? (6)

Necesito mostrar parte del formulario expuesto en la barra lateral de mi página y el resto de la forma y el contenido en el área de $content . Realmente no hay una buena manera que yo pueda encontrar para hacer esto. De alguna manera conseguí que se mostrara al hacer una vista de "bloque" con el conjunto de "forma expuesta" y luego tratar de mostrar solo la parte que necesitaba a través de los archivos .tpl. El problema es que, cuando se hace clic en el botón Enviar (el botón Enviar está en el área $content ), los filtros que están en la barra lateral no se tienen en cuenta.


De la explicación anterior, supongo que está imprimiendo la misma forma en el bloque y en el área de contenido y está ocultando una parte de la forma en page.tpl, si esto es cierto, entonces puede usar hook_form_alter () en su módulo personalizado, luego

  1. Almacene el valor del elemento de formulario (presente en el bloque) en la variable global.
  2. Ahora usa esa variable global y establece el elemento de formulario (presente en el área de contenido, este elemento de formulario no es visible para el usuario).

Proporcione más información si implementó de otra manera.

Saludos, Chintan.


Algunos pensamientos laterales ... ¿Por qué no explorar las opciones exclusivas de CSS? Puedes colocar ese elemento de forma jugando con position:absolute ¿ position:absolute ? O (considerando que es una barra lateral derecha) float:right y luego un margen derecho negativo para empujarlo a la barra lateral? Si está utilizando el sistema de cuadrícula 960, juegue con push clases de pull y pull .


Si utiliza algo como el contexto , puede obtener el bloque de filtros expuestos para mostrar dos veces en la misma página. A continuación, puede usar CSS para ocultar los campos que no desea mostrar en cada formulario.

El problema fundamental que tiene es que para tener los dos formularios en diferentes lugares, cada uno tendrá su propio elemento de formulario: cuando se activa un envío, solo se envían los campos del formulario dentro del mismo elemento del formulario. Debe moverlos a un formulario o confiar en JavaScript para reunir los campos de ambos formularios y construir la publicación.


Primero voy a responder su pregunta, luego explicaré por qué está haciendo la pregunta incorrecta:

Si construyes el formulario fuera de los formapi, puedes tener algo de suerte. Esto aumentará y requerirá que tengas mucho cuidado adicional sobre los vectores de ataque, como la asignación masiva.

views_some_view.tpl.php :

<form name="input" action="/link/to/view" method="get"> Country: <input type="text" name="country" />

my_custom_exposed_view.module: hook_block () Ciudad:

Eso haría una forma, que en la mayoría de las situaciones comenzará con <form> , tendrá algunos campos de entrada, luego tendrá una gran cantidad de HTML aleatorio, luego más campos de entrada y luego el cierre.

Como sabrá, un <input type="submit" value="Submit" /> solo publicará todo lo que contenga en las etiquetas de form . El botón submit en el siguiente HTML:

<form name="input_1" action="/link/to/view" method="get"> Country: <input type="text" name="country" /> </form> <form name="input_2" action="/link/to/view" method="get"> City: <input type="text" name="city" /> <input type="submit" value="Submit" /> </form>

solo enviará la City . Estos no son los droides que estás buscando.

Tendrá que ser una gran forma, pero dado que todo entre form y /form es muy dinámico y contiene una gran cantidad de HTML, incluidas otras posibles formas, esto no es realmente lo que quieres. Además: una apariencia de bloques (mostrada / no mostrada) se controla completamente independiente del contenido. Necesitará una gran cantidad de código robusto para garantizar que el bloque a) nunca aparezca cuando la etiqueta de form inicio no está presente, yb) se garantizará que el bloque se muestre cuando esté presente esa etiqueta de form apertura. De lo contrario, no solo tiene un código HTML no válido, sino un código HTML descompuesto que hará que la página quede inutilizable en la mayoría de los casos.

Simplemente no quiere una parte del formulario en un bloque y la otra parte en el contenido .

Sin embargo, quiere que se visualice como si una parte estuviera en el cuerpo, el resto en una barra lateral.

La buena noticia es que con la estructura de presentación HTML son independientes. Ahí es donde reside tu solución.

  1. Dale a tus campos de formulario buenas identificaciones y clases. Puede usar hook_form_alter para cambiar los formularios existentes, pero probablemente simplemente quiera crear el HTML para ese formulario completo usted mismo. La capa del tema lo permite.
  2. Use CSS para seleccionar campos de formulario individuales por ID y posición: absórbalos en el lugar correcto. O elija clases de campos por CLASE y posición: relacionelas en el lugar correcto.
  3. Haga una rutina simple de identificación que permita agregar una clase a la etiqueta corporal. (vea abajo).
  4. Agregue un poco de CSS para desplazar la barra lateral hacia abajo, dejando espacio para que los campos de formulario se muevan, cuando esa clase esté en la etiqueta de cuerpo.

    <body class="<?php print $splitform ?>">

    function my_themename_preprocess_page() { if ($GET[''q''] == ''path/to/view'') { $vars[''spliform''] = "splitform" } }


Podrías crear el bloque como un div vacío y tener javascript desde la página principal poblarlo con el filtro secundario y todo lo que necesites allí. De nuevo, puede usar javascript para copiar los valores de formulario del formulario de bloque a los campos ocultos en el formulario principal en submit. Eso le da todo el control que necesita de un lugar (la salida del nodo). La única advertencia es que depende mucho más de javascript para unir todo.


Hay un problema relacionado aquí: https://drupal.stackexchange.com/questions/3827/multiple-copies-of-views-filter-form-exposed-filters que describe cómo duplicar los filtros. Sin embargo, parece un hack feo.

Un poco más limpio parece que esta solución se menciona en el n. ° 6: http://drupal.org/node/641838#comment-3247748 No lo he probado, pero se ve bien.

Todavía le dará algunos gastos generales (vistas duplicadas), pero podría ser la forma más fácil de hacer esto utilizando vistas.

Por otro lado, puede escribir un módulo y crear su propio bloque de filtro personalizado que se enganche a su vista. Aquí hay una entrada en el blog sobre esto: http://www.hashbangcode.com/blog/creating-custom-views-filters-exposed-form-element-drupal-6-561.html