¿Cómo puedo ordenar una vista basada en un campo reescrito?

10

Tengo una vista de un tipo de contenido que contiene dos campos de fecha diferentes (uno con repeticiones de fecha y una fecha única de valores múltiples). Solo se completa un campo de fecha en un momento dado. En la visualización de la vista, combiné los dos campos al ocultar el primer campo de fecha y reescribir el segundo e incluir el token de reemplazo del primero y el segundo. ¿Hay alguna forma de usar ahora el campo reescrito para ordenar la vista en orden ascendente en función de este campo de fecha combinado? Parece que lo ordena según el valor original del campo de fecha.

He hecho mi investigación y solo he encontrado hilos viejos, algo relacionados, con callejones sin salida.

vistas ordenadas por campo reescrito?

La tabla no se ordena en el campo reescrito, sino en el campo original

Vistas: campo personalizado para criterios de clasificación

Ordenar por global: texto personalizado. ¿Es posible?

Esperaba que haya una forma nueva o astuta de hacer que esto suceda.

Nigel Waters
fuente
¿Hay alguna razón por la que no puedas usar la respuesta de merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen
En realidad, no proporciona una respuesta sobre cómo usar el campo calculado. Solo recomienda usarlo. No me importa probarlo, pero no sé qué hacer con el módulo. También esperaba que pudiera haber algo nuevo para probar, ya que eso fue hace 2 años y para Drupal 6.
Nigel Waters
Sí, esa fue una respuesta corta. Sin embargo, el principio sigue siendo el mismo. Mira mi respuesta.
Kari Kääriäinen
¿Qué es lo que quieres hacer con esos campos de fecha? Elige la próxima fecha que viene?
Kari Kääriäinen
Quiero ordenar el tipo de contenido del evento por los dos campos de fecha en orden ascendente.
Nigel Waters

Respuestas:

4

Si no desea ir por la ruta del módulo, esta es una alternativa:

1) instale el módulo
de campo calculado 2) agregue un campo calculado a su tipo de contenido
3) en la configuración del campo, en el área de texto del código calculado (PHP), puede acceder a los datos del campo.

Obtenga sus campos de fecha en su idioma actual a una variable.

$repeating_dates = field_get_items($entity_type, $entity, 'field_repeating_date_example');
$multidates = field_get_items($entity_type, $entity, 'field_multidate_example');

Sus valores de fecha ahora se pueden encontrar en

$repeating_dates[0]['value'],
$repeating_dates[1]['value'],
$repeating_dates[2]['value'], etc.

$multidates[0]['value'],
$multidates[1]['value'],
$multidates[2]['value'], etc.

Haga la lógica que necesite con sus campos de fecha y asigne el resultado a

$entity_field[0]['value']

Ahora tiene un campo ordenable que puede usar en las vistas, pero primero debe actualizar todos los nodos ya que el campo calculado solo se calculará y se guardará en la base de datos al guardar el nodo. Hay muchas maneras de hacer esto, una está usando las Operaciones de Bulk de Vistas, le da la opción de volver a guardar los nodos en admin / content.

Kari Kääriäinen
fuente
No estoy seguro de que esto funcione con un campo de fecha con fechas repetidas y otro campo con fecha única (con configuración de ilimitado). Esto puede funcionar en el caso de que ambos campos sean solo valores únicos.
Nigel Waters
Edité mi respuesta cubriendo esos casos. Usando dpm ($ entity) puede ver cuál es la estructura de sus campos de fecha. dpm viene con el módulo Devel.
Kari Kääriäinen
Por favor no recomiende la [und]sintaxis. Utilice field_get_items en su lugar.
Letharion
0

La única forma astuta de hacer que esto suceda es que si no usa la paginación, puede usar la ordenación de PHP en una anulación de consulta personalizada que no depende de la base de datos.

De acuerdo con stevector ,

La paginación es lo que realmente nos impide ordenar por campos calculados porque normalmente necesitamos decir "¡Base de datos! Obtené resultados 21-30 al ordenar por la columna nid".

Por lo tanto, no puede obtener resultados confiables 21-30 de la base de datos si la base de datos no sabe cómo definir los 21-30 (como en el caso de un campo calculado).

Por lo tanto, la solución más práctica y confiable es utilizar el campo calculado como lo menciona Kari Kääriäinen.

beth
fuente
Parece que alguien me rechazó después de especificar el número de versión y corregir un error de copiar y pegar. ¿Hay algo mal con esta respuesta?
beth
He votado anteriormente por el enfoque del módulo, pero luego voté negativamente porque esta, como cualquier otra, incluida la mía, no es una respuesta útil porque la pregunta en sí aún no está clara, al menos para mí.
Kari Kääriäinen
La pregunta me parece clara. Agregaré algunas aclaraciones a mi respuesta.
beth
No importa, me di cuenta de que Views no se comporta exactamente como yo pensaba.
beth
0

Esta es una forma un poco hacky de hacerlo, pero funciona y no necesita módulos adicionales.

Cree una etiqueta para el campo en el que desea ordenar y NO la excluya de la pantalla. En cambio, reescriba la pantalla como "en blanco" agregando un <!---->comentario html vacío como valor de reescritura. Luego agregue su otro campo php / reescrito como hijo de esta columna.

Esto mostrará el encabezado de la tabla para la columna correcta para ordenar.

resbaladizo
fuente