Comment trier une vue en fonction d'un champ réécrit?


10

J'ai une vue d'un type de contenu qui contient deux champs de date différents (un avec des répétitions de date et un des dates uniques à plusieurs valeurs). Un seul champ de date est rempli à tout moment. Dans l'affichage de la vue, j'ai combiné les deux champs en masquant le premier champ de date et en réécrivant le second et en incluant le jeton de remplacement du premier et du second. Existe-t-il un moyen d'utiliser maintenant le champ réécrit pour trier la vue par ordre croissant en fonction de ce champ de date combiné? Il semble qu'il le trie en fonction de la valeur d'origine du champ de date.

J'ai fait mes recherches et je n'ai trouvé que des fils anciens, quelque peu liés, avec des impasses.

vues tri par champ réécrit?

Le tableau ne trie pas sur le champ réécrit, mais sur le champ d'origine

Vues: champ personnalisé pour les critères de tri

Trier par global: texte personnalisé. C'est possible?

J'espérais qu'il y avait une façon nouvelle ou sournoise d'y arriver.


Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser la réponse de merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen

Il ne fournit pas réellement de réponse sur la façon d'utiliser le champ calculé. Il recommande simplement de l'utiliser. Cela ne me dérange pas de l'essayer mais je ne sais pas quoi faire avec le module. J'espérais également qu'il y aurait quelque chose de nouveau à essayer depuis il y a 2 ans et pour Drupal 6.
Nigel Waters

Ouais, c'était une réponse courte. Le principe reste cependant le même. Voir ma réponse.
Kari Kääriäinen

Que voulez-vous faire avec ces champs de date? Choisissez la prochaine date à venir?
Kari Kääriäinen

Je souhaite trier le type de contenu de l'événement par les deux champs de date dans l'ordre croissant.
Nigel Waters

Réponses:


4

Si vous ne voulez pas opter pour la route du module, voici une alternative:

1) installez le module Champ calculé
2) ajoutez un champ calculé à votre type de contenu
3) dans les paramètres du champ, dans la zone de texte Code calculé (PHP), vous pouvez accéder aux données du champ.

Obtenez vos champs de date dans votre langue actuelle à une variable.

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

Vos valeurs de date se trouvent maintenant dans

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

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

Faites la logique dont vous avez besoin avec vos champs de date et attribuez le résultat à

$entity_field[0]['value']

Vous disposez maintenant d'un champ triable que vous pouvez utiliser dans les vues, mais vous devez d'abord mettre à jour tous les nœuds car le champ calculé ne sera calculé et enregistré dans la base de données qu'au moment de l'enregistrement du nœud. Il existe de nombreuses façons de le faire, l'une utilise les opérations en bloc de vues, elle vous donne la possibilité de réenregistrer les nœuds dans admin / content.


Je ne suis pas sûr que cela fonctionnera avec un champ de date avec des dates répétitives et un autre champ avec une date unique (avec un réglage illimité). Cela peut fonctionner dans le cas où les deux champs ne sont que des valeurs uniques.
Nigel Waters

J'ai édité ma réponse couvrant ces cas. En utilisant dpm ($ entity), vous pouvez voir quelle est la structure de vos champs de date. dpm est fourni avec le module Devel.
Kari Kääriäinen

Veuillez ne pas recommander la [und]syntaxe. Utilisez plutôt field_get_items.
Letharion


0

La seule façon sournoise d'y parvenir est que si vous n'utilisez pas la pagination, vous pouvez utiliser le tri PHP dans un remplacement de requête personnalisé qui ne dépend pas de la base de données.

Selon stevector ,

La pagination nous empêche vraiment de trier par champs calculés car normalement nous devons dire "Base de données! Obtenez-moi les résultats 21-30 lors du tri par la colonne nid".

Vous ne pouvez donc pas obtenir de manière fiable les résultats 21-30 de la base de données si la base de données ne sait pas comment définir la valeur 21-30 (comme dans le cas d'un champ calculé).

La solution la plus pratique et la plus fiable consiste donc à utiliser le champ calculé comme l'a mentionné Kari Kääriäinen.


Il semble que quelqu'un m'ait rétrogradé après avoir spécifié le numéro de version et corrigé une erreur de copier-coller. Y a-t-il un problème avec cette réponse?
beth

J'ai voté plus tôt pour l'approche du module, mais plus tard parce que, comme toute autre, la mienne incluse, n'est pas une réponse utilisable car la question elle-même n'est toujours pas claire, du moins pour moi.
Kari Kääriäinen

La question me semble claire. J'ajouterai quelques éclaircissements à ma réponse.
beth

Peu importe, j'ai réalisé que Views ne se comportait pas exactement comme je le pensais.
beth

0

C'est un peu un moyen hacky de le faire, mais cela fonctionne et vous n'avez pas besoin de modules supplémentaires.

Créez une étiquette pour le champ que vous souhaitez trier et ne l'excluez PAS de l'affichage. Au lieu de cela, réécrivez l'affichage comme "vide" en ajoutant un <!---->commentaire html vide comme valeur de réécriture. Ajoutez ensuite votre autre champ php / réécrit en tant qu'enfant de cette colonne.

Cela affichera l'en-tête du tableau pour la colonne correcte pour le tri.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.