Pods: problème de taxonomie possible avec le groupe par

Créé le 7 juin 2016  ·  21Commentaires  ·  Source: pods-framework/pods

problème de taxonomie possible avec group by soumis via Slack par jimtrue

Help Wanted Support

Tous les 21 commentaires

Récupérer tous les événements classés par type de festival puis par titre

festival pod est une taxonomie personnalisée.
le pod d'événements est un type de publication personnalisé.

// assume we´ve got 6 events and 2 festivals

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1, 'groupby' => 'festival.name');
$events = pods('event', $params)

// output should be
Event 1 (Festival 1)
Event 3 (Festival 1)
Event 5 (Festival 1)
Event 2 (Festival 2)
Event 4 (Festival 2)
Event 6 (Festival 2)

// ... but is
Event 1 (Festival 1)
Event 2 (Festival 2)

Après avoir testé un certain temps, cela semble fonctionner lorsque l'événement obtient un champ de relation de pod ciblant la taxonomie du festival. Mais seulement sans groupby.

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);

L'inconvénient est que la relation du festival en tant que taxonomie ne pouvait plus être maintenue via le formulaire d'édition rapide de wordpress (ok, un plugin supplémentaire pourrait le faire)

la sortie est
orderby

devrait être
orderby-02

Lorsque vous regroupez par festival.name, un seul enregistrement par festival sera affiché.

On dirait que ce que vous voulez vraiment, c'est de commander par année, puis par nom du festival, puis par titre, n'est-ce pas ?

Apporté celui-ci à partir de la discussion dans Slack #support, nous avions testé avec Taxonomy et il semblait ignorer l'ordre par taxonomy.name. C'est principalement ce que nous testons comme problème. Je fais un test local pour voir s'il y a un problème avec orderby en ce qui concerne la taxonomie associée plutôt que la relation avec la taxonomie, car ce serait un problème.

De plus, en me faisant remarquer que group by ne devrait vraiment être utilisé que pour les calculs de totaux récapitulatifs et des trucs comme ça, je suppose, s'il ne renvoie qu'une ligne par groupe. @sc0ttkclark est-ce l'une de ces situations où groupby est également mieux associé aux paramètres 'fields' ou 'sql' pour effectuer des calculs récapitulatifs appropriés?

@sc0ttkclark c'est vrai. Au début j'avais mal compris le concept de groupby mais il y a quand même le comportement qui
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
finit comme la sortie montrée dans les images. J'ai essayé de reproduire ce problème avec une version wordpress + pods fraîchement installée. Malheureusement, cela a fonctionné comme il se doit :grining:

@kristonovo C'est bien trié ? Utiliser uniquement la taxonomie comme vous le vouliez ?

@jimtrue dans la configuration de test fraîchement installée : oui. Avec mon projet actuel : non. Ici, je dois encore affecter un véritable champ de relation de pod pour obtenir la sortie souhaitée ... y a-t-il des étapes de débogage que je pourrais suivre pour donner plus d'informations ?

@kristonovo C'est assez étrange. Cela signifie que quelque chose d'autre « marche » sur le tri. @sc0ttkclark des suggestions ? Vous pouvez essayer d'examiner le tri défectueux en ajoutant ce qui suit à l'URL : ?pods_debug_sql_all=1 afin que nous puissions avoir un œil sur les requêtes SQL appelées et les comparer.

Avez-vous d'autres plugins en cours d'exécution sur votre version défectueuse qui pourraient toucher la taxonomie ?

@kristonovo qu'est-ce que dans votre capture d'écran est le "festival.name" ?

@sc0ttkclark ce serait le 2014, 2015

Pourrait envisager 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' (si vous le voulez 2015, alors 2014).

Je vais bientôt essayer avec l'URL de débogage et la requête CAST.

@sc0ttkclark
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
produit

[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`' at line 20]
        SELECT DISTINCT `t`.* FROM `wp_table_posts` AS `t` LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON `rel_festival`.`object_id` = `t`.`ID` LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON `rel_tt_festival`.`taxonomy` = 'festival' AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id` LEFT JOIN `wp_table_terms` AS `festival` ON `festival`.`term_id` = `rel_tt_festival`.`term_id` WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) ) ORDER BY CAST(`festival`.`name` AS INT(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

Peut-être sans INT(4) et utilisez plutôt DECIMAL(4,0)

@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
avec pods_debug_sql_all=1

1

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

2

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

3

`SELECT `ID`, `post_name`, `post_parent` FROM `wp_table_posts` WHERE `post_type` = '_pods_field' AND ( `post_name` IN ( 'festival', 'name' ) )`

4

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

5

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

6

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

7

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

@sc0ttkclark
plus d'erreur sql avec DECIMAL(4,0) mais encore une fois classé par événement et non par festival
En attendant, tous les plugins, à l'exception des pods, sont désactivés. Toujours ce problème :(

Test uniquement avec festival.name :

$params = array('orderby' => 'festival.name DESC');

les sorties
orderby-03

tandis que
$params = array('orderby' => 'festival.name ASC');

les sorties
orderby-04

Êtes-vous tout à fait sûr d'avoir fourni les informations correctes sur la sortie ? Pouvez-vous fournir le PHP que vous utilisez pour répertorier le contenu ?

Plus il faut de temps pour trouver une solution, plus j'ai peur que ce soit de ma faute :dancer:

<?php
/**
 * Template Name: Events
 */

get_header();
?>

<div class="column-1-3">
    <h1><a href="/events" target="_self">Events</a><br><br></h1>

    <div class="event">

        <?php
        $params = array('orderby' => 'festival.name');
        $events = pods('event')->find($params);

        if ($events->data()) {

            while ($events->fetch()) {

                echo $events->display('festival.name') . ' - ' . $events->display('post_title') . '<br>';


            }

        }
?>

    </div>

</div>


<?php get_sidebar( 'right' ); ?>
<?php get_footer(); ?>

... et voici le paramètre dans le pod d'événements :

image

Seriez-vous prêt à nous fournir un identifiant pour accéder à votre espace d'administration Pods et examiner cela pour vous ? Vous pouvez l'envoyer en privé sur notre Slack (http://pods.io/chat/) ou via ce formulaire : https://pods.io/help/

Oui, je pourrais préparer un environnement de développement. Aurait besoin d'un peu de temps cependant. En attendant j'ai testé autre chose :

  • créer un module de test appelé bio (type de publication personnalisé)
  • festival de taxonomie intégré vérifié
  • la requête orderby fonctionne comme excepté
  • ajout d'une deuxième taxonomie intégrée appelée agegroup (comme dans le module d'événements)
  • commande par requête ne fonctionne plus
  • suppression de la relation taxonomique de la bio au groupe d'âge
  • toujours en désordre

paramètres toujours les mêmes :
$params = array('orderby' => 'festival.name DESC');

Serait-il possible que plusieurs relations taxonomiques interfèrent avec orderby ? Ils sont conservés dans la base de données pour autant que je sache. Même si je supprime la relation.

Suite à cela, ce n'était pas un problème avec les pods autant qu'un problème avec MySQL.

Pour une raison quelconque, lorsque vous avez fait un ORDER BY un champ joint, il n'ordonnerait pas les résultats correctement. Si vous avez ajouté 'where' => 'festival.name IS NOT NULL' a commencé correctement.

Un expert MySQL devra creuser davantage pour déterminer pourquoi cela se produit et comment nous pouvons l'atténuer à l'avenir.

Cette page vous a été utile?
0 / 5 - 0 notes