web-dev-qa-db-fra.com

commander des utilisateurs avec drag'n'drop?

Il existe de nombreux plug-ins qui vous permettent de commander des pages et/ou des publications par glisser-déposer.

Y a-t-il quelque chose de similaire aux utilisateurs de commandes?

Ou sinon, est-il possible de créer un plugin pour cela (c.-à-d. Y a-t-il suffisamment de filtres, actions, etc. en place?

3
frnhr

Il semble qu'il n'y ait pas de tel plugin ...

J'ai donc créé le mien: https://github.com/cek125i/simple-user-ordering
(~ 300 lignes PHP, il est trop long de poster ici)

Beaucoup influencé par le plugin "Simple Page Ordering", mais créé à partir de zéro.

La vérité moche à propos de ce problème est qu'il ne semble pas y avoir de moyen intégré pour trier les utilisateurs par méta-valeur. Heureusement, je n'ai que 10 à 20 utilisateurs. J'espère donc qu'il ne sera pas trop coûteux en performances de les trier manuellement après l'extraction (cela signifie une requête supplémentaire par utilisateur pour extraire la méta-valeur).

2
frnhr

Une fonctionnalité très spécifique, jamais vu de plugin. Mais il s’agit de prendre un plugin drag'n'drop et de l’adapter.

Ici, une version simplifiée et adaptée de My Link Order .
Description etto-do:

  • Un nouveau sous-menu est créé dans Utilisateurs, Ma commande d’utilisateurs .
  • Dans la page du plug-in, exécutez la fonction orderUsers() dans la console de votre navigateur. La commande actuelle est affichée sous forme de tableau. Glissez-déposez et exécutez à nouveau, le tableau montre le nouvel ordre.
  • Vous devrez utiliser l’API Paramètres ou créer votre code AJAX pour gérer l’enregistrement de la commande sous forme de métadonnées utilisateur.
  • Les styles et les scripts imprimés dans le rappel du sous-menu doivent être placés dans leurs propres fichiers CSS et JS, et mis en file d'attente en conséquence.
<?php
/* Plugin Name: My Users Order */

add_action( 'admin_menu', 'myuserorder_menu' );

function myuserorder_menu()
{    
    $page = add_users_page(
        __( 'My Users Order', 'myuserorder' ), 
        __( 'My Users Order', 'myuserorder' ), 
        'manage_links', 
        'myuserorder', 
        'myuserorder'
    );
    add_action( "admin_print_scripts-$page", 'myuserorder_js_libs' );
}

function myuserorder_js_libs() 
{
    wp_enqueue_script( 'jquery-ui-sortable', false, array( 'jquery-ui-core', 'jquery' ) );
}

function myuserorder()
{
    ?>
    <div class='wrap'>
        <form name="frmMyUserOrder" method="post" action="">
            <h2><?php _e('My Users Order', 'myuserorder') ?></h2>   
            <ul id="myUserOrderList">
            <?php
            $results = get_users();
            foreach( $results as $user )
                echo "<li id='{$user->data->ID}' class='lineitem'>" . $user->data->display_name . "</li>";
            ?>
            </ul>
        </form>
    </div>

    <style type="text/css">
        #myUserOrderList {
            width: 90%; 
            border:1px solid #B2B2B2; 
            margin:10px 10px 10px 0px;
            padding:5px 10px 5px 10px;
            list-style:none;
            background-color:#fff;
            -moz-border-radius:3px;
            -webkit-border-radius:3px;
        }
        li.lineitem {
            border:1px solid #B2B2B2;
            -moz-border-radius:3px;
            -webkit-border-radius:3px;
            background-color:#F1F1F1;
            color:#000;
            cursor:move;
            font-size:13px;
            margin-top:5px;
            margin-bottom:5px;
            padding: 2px 5px 2px 5px;
            height:1.5em;
            line-height:1.5em;
        }       
        .sortable-placeholder{ 
            border:1px dashed #B2B2B2;
            margin-top:5px;
            margin-bottom:5px; 
            padding: 2px 5px 2px 5px;
            height:1.5em;
            line-height:1.5em;  
        }
    </style>

    <script language="JavaScript" type="text/javascript">
        function orderUsers() 
        {
            var newOrder = jQuery("#myUserOrderList").sortable("toArray");
            console.log( newOrder );
        }
        function myuserorderaddloadevent()
        {
            jQuery("#myUserOrderList").sortable({ 
                placeholder: "sortable-placeholder", 
                revert: false,
                tolerance: "pointer" 
            });
        };
        addLoadEvent( myuserorderaddloadevent );
    </script>
    <?php
}
5
brasofilo