date - link - drupal calendar
Drupal 7: Ordenamiento de mĂșltiples tipos de contenido en Vistas, con diferentes campos de fecha (2)
¿Has intentado utilizar la función de relación de las vistas? Podrías usar eso para tener acceso a todos los campos de fecha de todos los tipos de contenido, luego agregar un código condicional al elemento de campo y deberías ser oro. (Es decir, si estoy entendiendo la pregunta correctamente ...)
Estoy usando Drupal 7, con los módulos PHP Views, Feeds y Views (entre otros, pero creo que esos son los únicos relevantes).
Mi objetivo es una vista única que combine (a) múltiples fuentes RSS traídas a través del módulo Feeds, (b) dos o tres tipos de contenido propios, para el contant creado a mano en mi sitio. El resultado será un bloque y una página que tienen una secuencia de todo mi trabajo más reciente, donde sea que esté: mi propio sitio u otro sitio (siempre que ese otro sitio tenga un feed RSS, por supuesto).
El resultado ideal mostraría una lista única, ordenada por fecha, mezclando los elementos sin tener en cuenta el tipo de contenido.
Mi problema: el módulo de Feeds y mis tipos de contenido personalizado tienen diferentes campos de fecha. Mis tipos de contenido tienen un campo llamado Fecha original, que establezco cuando creo contenido (por ejemplo, agregar un artículo que escribí hace tres años). Claramente, quiero que se ordene según cuándo se publicó, no cuando lo agregué al sitio). Sin embargo, cada feed_item tiene un campo de fecha, Fecha de publicación, que corresponde a la fecha en el feed RSS y se recibe con el resto del elemento por RSS.
Intenté usar la funcionalidad Views PHP para usar sentencias if / then de diferentes maneras. Por ejemplo, compruebo qué es content_type y luego establezco una variable en la Fecha original o en la Fecha de publicación, dependiendo del tipo de contenido. Alternativamente, he probado si el campo Fecha original está configurado; si es así, devuelvo ese campo; de lo contrario, devuelvo el campo Fecha de publicación. Todos fallan de varias maneras. La mayoría lanza errores de PHP que son visibles incluso para usuarios anónimos (obviamente, es un problema).
He intentado estos diversos enfoques directamente en la sección Criterios de clasificación de Vistas; También traté de encontrar la fecha en la sección Campos, y luego obtuve una llamada de Criterio de clasificación. He convertido todo en una marca de tiempo Unix, para asegurarme de que tengo algo fácil de ordenar; Intenté dejar las fechas como fechas. Sin suerte de ninguna manera.
Aquí está la parte realmente extraña: he utilizado con éxito estos enfoques para mostrar la fecha correcta, de modo que (por ejemplo) el bloque muestre • TITLE | Fecha original para tipos de contenido personalizados, y • TITLE | Fecha de publicación para artículos de alimentación. Pero cuando intento el mismo enfoque (s) para ordenar por fecha, falla.
¿Estoy pasando por alto algo más simple? ¿Tengo que usar PHP Views? ¿Hay alguna otra forma de ordenar una Vista de múltiples tipos de contenido mediante una combinación de dos campos diferentes (aunque similares)?
¡Gracias!
tf
Encontré muchas soluciones posibles y las resumí aquí: https://drupal.org/node/2133879
Sin embargo, esta es una solución simple que recomendaría:
En un módulo personalizado, use la función hook_views_query_alter () para alterar los criterios de clasificación para usar CASE ... CUANDO agregar un condicional en la condición de orden. Un buen ejemplo se muestra aquí:
<?php
/**
* Implements hook_views_query_alter
* @param type $view
* @param type $query
*/
function MODULE_views_query_alter(&$view, &$query) {
if ($view->name == ''views_name'' && $view->current_display == ''display_name'') {
$query->orderby = array(
array(
''field'' => ''CASE WHEN field_data_field_date_publication.field_date_publication_value
THEN field_data_field_date_publication.field_date_publication_value
ELSE node.created END'',
''direction'' => ''DESC'',
)
);
}
}
?>