drupal 7 – ¿Cómo asignar un título a un usuario en función del número de nodos creados?

Pregunta:

Quiero configurar un sistema en el que un usuario reciba un título en función de la cantidad de contenido que haya creado / publicado. Entonces, por ejemplo, si el usuario ha publicado:

0 nodes  - Noobie
1+ nodes - Poster
10+ nodes - Frequent poster
20+ nodes - Super Poster
50+ nodes - God`

Me pregunto si hay una manera de implementar esto en un sitio Drupal. Puedo pensar en una forma de hacerlo utilizando consultas de base de datos y un campo calculado, pero me pregunto si podría haber una forma más eficiente de hacerlo.

Respuesta:

Dudo que haya un módulo para esto, pero bueno. No dejes que eso te deprima, ¡en realidad es una gran idea para un módulo personalizado! Si tiene un poco de paciencia, Drupal es muy fácil de aprender una vez que pasa la curva de aprendizaje inicial.

Si necesita comenzar, la sección de desarrollo de módulos y la página de creación de un módulo en Drupal son un excelente lugar para comenzar.

Hay muchas, muchas formas de hacer esto, pero para empezar probablemente crearía un pequeño módulo. Imagina que se llama super_usernames , para el propósito de esta publicación. Simplemente crearía una carpeta en sites / all / modules llamada `super_usernames. Esa carpeta debería contener solo 2 archivos:

super_usernames.info y super_usernames.module . El archivo de info es muy fácil:

name = Super Usernames
description = Gives special credits to usernames depending on number of posts.
core = 7.x
files[] = super_usernames.module

El archivo del módulo necesitaría como mínimo solo un gancho para ser definido. Los hooks son simples funciones php antiguas que usan una convención de nomenclatura simple para que Drupal las ejecute automáticamente.

El gancho que necesita aquí es hook_node_view . Básicamente quieres agregar:

/*
 * Implements hook_node_load
 */
function super_usernames_node_view($node, $view_mode){
  $supported_node_types = array('page', 'article', 'blog'); // Supports default content types
  if (in_array($node->type, $supported_node_types) { 
    // query to get number of nodes this user has published
    $result = db_query("SELECT count(nid) as nodecount from {node} WHERE uid = %d", $node->uid);
     $row = db_fetch_object($result); 
     $node_count = $row->nodecount; // Easier to read
     switch ($node_count){
       case $node_count >= 50:
           $node->super_username = "God";
         break;
       case $node_count >= 20:
          $node->super_username = "Super Poster";
         break; 
       case $node_count >= 10:
          $node->super_username = " Frequent Poster";
         break;
       case  $node_count >= 1:  // same as > 0, but who cares...
           $node->super_username = "Poster";
         break;
       default:
           $node->super_username = "Noobie";                  
     }
  }
}

Ahora. Después de hacer esto, todos sus nodos deben contener el valor dinámico de la cantidad de nodos publicados por el autor de ese nodo. Esto se agregaría sobre la marcha en cada carga de página desde artículos de tipo de contenido y páginas.

¡Sin embargo, todavía necesita que se muestre en algún lugar! Aquí es donde idealmente crearía un subtema (para no hackear un tema base). Pero para el propósito de esta publicación, simplemente modificaremos un archivo: node.tpl.php .

Verifique el tema que está usando, por defecto es bartik, pero el procedimiento es prácticamente el mismo independientemente del tema que esté usando.

Vaya a su directorio themes / bartik / templates, abra el archivo node.tpl.php. Busque el lugar donde desea agregar el superusuario en el html y agregue este fragmento de código:

<?php if ($node->super_username): ?>
  <div class="superUsername">
    <?php print $node->super_username; ?>
  </div>
<?php endif; ?>

Ahora. Un último paso, es posible que deba borrar la caché para que los cambios surtan efecto. El módulo de desarrollo lo hace fácil, Drush lo hace aún más fácil. Después de esto, debería tener sus supernombres de usuario mostrados dinámicamente en todos los tipos de contenido definidos en la matriz supported_node_types .

Espero que esto no suene demasiado complicado, en realidad es bastante trivial cuando pasas por el proceso varias veces. No dude en enviarme un mensaje o volver a publicar aquí si necesita ayuda.

¡Feliz codificación, salud!

  • PD: Este código se ha extraído de la memoria, no se ha probado nada, pero debería estar bastante cerca de un ejemplo completamente funcional . Su kilometraje puede variar, puede haber errores tipográficos allí.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım