Pregunta

creo una importación personalizada y exportación, en el momento en que un script externo (a través de arranque), el plan de i para crear un módulo de un modo más genérico lateron.

Estoy construyendo un frontend para Nagios y para nuestra configuración de gestión de anfitrión y nagios por cierto. Tal vez podría llegar a ser útil para otros entornos (networkmanagement)

Ahora necesito saber cómo conseguir la lista de todos los nodos del tipo X?

Quiero evitar SQL directa.

Una sugerencia que me dieron era hacer un RSS y analizarlo pero Acess la drupal db una docena de veces para extraer diversos nodos, por lo que parece extraño que hacer una petición web para una cosa

Así que lo que estoy buscando como dev novato Drupal es sólo un puntero a la API básica módulo de búsqueda para esta tarea

TIA Florian

¿Fue útil?

Solución

¿Por qué quiere evitar el uso de SQL?

Si desea obtener información sobre lo que está en su base de datos, al igual que todos los nodos del tipo X, la única manera de conseguirlo, es a través de una consulta SQL, a menos que tenga los datos ya extraído.

Una consulta como

db_query("SELECT title, nid FROM {node} WHERE type = 'x';");

no debe ser lo que arruina su rendimiento.

Editar
El enlace que ha proporcionado es una de Drupal 7, por lo que tiene que ser tener cuidado de leer esto. La razón es que en Drupal 7 que no sólo es posible utilizar db_query que básicamente es el contenedor para las funciones de PHP mysql_query, pg_query. Es un poco diferente y usarlo, usted no tendrá que usar el código db_specific. De todas formas nuevas en Drupal 7 es algo que es un poco como un ORM. No he leído sobre ello en detalle, pero la idea es que se puede construir una consulta mediante comandos en un objeto. Esto es probablemente lo que está después. Sin embargo, Drupal 7 no está preparada en absoluto para los centros de producción. Todavía hay una gran cantidad de temas críticos y problemas de seguridad. Así que esto no será una posibilidad desde hace bastante tiempo.

Editar 2:
Si desea obtener el título de nodo y el cuerpo, esto es lo que debe hacer:

$type = 'x';
$query = db_query("SELECT r.nid, r.title, r.body FROM {node} AS n 
                  LEFT JOIN {node_revisions} AS r ON r.nid = n.nid
                  WHERE type = '%s';", array($type));
$nodes = array();
while ($node = db_fetch_object($query)) {
    $nodes[$node->nid] = $node;
}

Se puede utilizar en lugar de db_fetch_array db_fetch_object` si desea extraer matrices en lugar de los objetos de la BD.

Otros consejos

Esta es una pregunta bastante viejo, pero para cualquiera que venga a través de esta página ahora, en Drupal 7.x mejor práctica es utilizar consultas dinámicas.

Así que si quería para seleccionar todos los nodos del tipo X, se puede hacer lo siguiente:

$articles = db_select('node')
->fields('node', array('nid', 'title'))
->condition('type', 'x', '=')
->execute()
->fetchAllKeyed();

La variable $ artículos debe entonces ser una matriz de todos los nodos x tipo, introducido por nid con las matrices de valor establecido en el título nodo correspondiente. La esperanza de que puede ayudar.

Vistas es generalmente la forma de crear consultas de base sin necesidad de escribir en Drupal, pero esta consulta es tan sencilla no estoy seguro de que vale la pena la sobrecarga de puntos de vista del aprendizaje, apenas 5 líneas después de que instalaste Drupal:

$nodes = array();
$results = db_query("SELECT nid FROM {node} WHERE type = '%s'", $type);
while ($result = db_fetch_object($result)) {
  $nodes[] = node_load($result->nid);
}

Tengo que utilizar SQL hacer para esto.

http://api.drupal.org/api/function/node_get_types/6

recuentos de nodo =

$node_types = node_get_types();

$type_count = array();

foreach ($node_types as $type) {
   $result = db_fetch_object(db_query('SELECT count(nid) AS node_count FROM {node} WHERE type = "%s"'), $type);
   $type_count[$type] = $result['count(nid)'];
}

print_r($type_count);

Los nodos y su tipo:

$node_types = node_get_types();

$nodes = array();

foreach ($node_types as $type) {
   $result = db_query('SELECT nid, title FROM {node} WHERE type = "%s"'), $type);

   while ($node = db_fetch_object($result)) {
      $nodes[] = array('Type' => $type, 'Title' => $node->title);
   }
}

print_r($nodes);

Algo por el estilo. Estoy comiendo el almuerzo así que no he probado eso, pero yo he hecho esto antes, así que debería funcionar. Drupal 6.

El href="http://drupal.org/project/migrate" rel="nofollow migrar módulo pueda ser de su interés. También es compatible con drush para que pueda cosas de guión con bastante facilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top