Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Blockinhalt zufällig wechseln

Eingetragen von hijacker (13)
am 06.11.2008 - 15:15 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Hallo,

habe mir einen eigenen Blocktyp namens "Schaufenster" gemacht und hab gleichzeitig einen neuen Inhaltstyp "Schaufenster" erstellt.

Ziel ist es, dass ich neue Inhalte für diesen Block erstellen kann und der eine Block diese Inhalte per Zufall wechselt (z.b. einmal am Tag)!

Ich habe hier im Forum diesen Code gefunden und leicht abgeändert, um alle Inhalte anzuzeigen:

//veröffentlichte showcases auswählen
$sql = "SELECT * FROM {node} WHERE type = 'showcase' AND status = 1";
// db_query() macht die Abfrage, db_rewrite_sql() ist wichtig damit access rules beachtet werden.
$result = db_query(db_rewrite_sql($sql));

// Mit while() alle gefundenen Elemente der Abfrage abarbeiten.
// db_fetch_object() gibt die Resultate als Objekte aus (also mit "->" ansprechen)


while ($data = db_fetch_object($result)) {
   $node = node_load($data->nid);
   print $node->body;
}
?>

Meine eigentliche Frage: kann ich die einzelnen Inhalte in ein array laden bzw. gibt es vielleicht schon ein array, das man verwenden könnte?

Das mit dem Zufall werd ich dann allein lösen können!

‹ "Verwalten" funktioniert nicht Untermenus nicht aufrufbar ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

zufälliger Inhalt

Eingetragen von stBorchert (6003)
am 06.11.2008 - 15:24 Uhr

Moin!
Mal ein etwas anderer Ansatz: frage nur die Node-Ids des entsprechenden Inhaltstyps ab und suche Dir daraus einen zufälligen Wert heraus. Dann kannst Du anhand dieser Id die entsprechende node laden. Das ist auf jeden Fall performanter.

<?php
$result
= db_query("SELECT nid FROM {node} WHERE type='%s' AND status = %d", array('showcase', 1));
$nids = array();
while (
$object = db_fetch_object($result)) {
 
$nids[] = $object->nid;
}
// Node laden
$node = node_load(array('nid' => array_rand($nids)));
print
$node->body;
?>

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

evtl. "Views Rotator"

Eingetragen von r4s6 (1383)
am 06.11.2008 - 15:27 Uhr

Das hier schonmal angesehen? ist zwar nicht zufällig, könnte aber evtl. deine Wünsche befriedigen.
http://drupal.org/project/views_rotator

Hier noch was ergänzendes dazu: http://mustardseedmedia.com/podcast/episode12

Roger

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, schon mal vielen Dank

Eingetragen von hijacker (13)
am 06.11.2008 - 15:30 Uhr

Ok, schon mal vielen Dank für die schnellen Antworten.

Ich werde das mal testen und meine Ergebnisse posten!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Soweit so gut, es

Eingetragen von hijacker (13)
am 06.11.2008 - 15:37 Uhr

Soweit so gut, es funktioniert.

So krieg ich aber allerdings alle Inhalte der Website. Hab gerade im Block das Impressum angezeigt bekommen, aber ich will ja nur Inhalte vom Inhaltstyp "showcase"

  • Anmelden oder Registrieren um Kommentare zu schreiben

mal noch ne andere

Eingetragen von hijacker (13)
am 06.11.2008 - 18:48 Uhr

mal noch ne andere frage:

ich kann ja mit

SELECT nid,title FROM {node} WHERE type = 'showcase' AND status = 1

auf den titel und die id des nodes zugreifen. aber wie komm ich an den body ran? geht das direkt über ein select? Weil Select body FROM {node}... geht nicht!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zufällige Nodes laden

Eingetragen von Frank Ralf (2135)
am 06.11.2008 - 20:01 Uhr

Hallo hijacker,

Hier ein Codeschnipsel aus dem Buch Learning Drupal 6 Module Development von Matt Butcher (http://www.packtpub.com/drupal-6-module-development/book). Das ganze Kapitel 4 beschreibt ein Modul, dessen Funktion deinen Wünschen wohl ziemlich nahe kommt. Damit werden Nodes mit der entsprechenden SQL-Funktion zufällig aus der Datenbank abgerufen.

<?php

function _philquotes_get_quote() {

 
$sql = "SELECT nid FROM {node} ".
       
"WHERE status=1 AND type='quotes' ORDER BY RAND() LIMIT 1";
 
$res = db_query($sql);
 
$item = db_fetch_object($res);
 
 
$quote = node_load($item->nid);
 
  return
$quote;
}
?>

Hoffe, das hilft
Frank

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

node_load

Eingetragen von stBorchert (6003)
am 06.11.2008 - 23:10 Uhr
hijacker schrieb

...aber wie komm ich an den body ran?

Hast Du mal mein Codeschnipsel ausprobiert? Die Funktion node_load() lädt Dir zu einer Node-Id (oder diversen anderen Parametern) ein komplettes Node-Objekt. Inklusive Body, Teaser und was sonst von anderen Modulen noch hinzugefügt wird.

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

stBorchert

Eingetragen von hijacker (13)
am 07.11.2008 - 00:46 Uhr
stBorchert schrieb
hijacker schrieb

...aber wie komm ich an den body ran?

Hast Du mal mein Codeschnipsel ausprobiert? Die Funktion node_load() lädt Dir zu einer Node-Id (oder diversen anderen Parametern) ein komplettes Node-Objekt. Inklusive Body, Teaser und was sonst von anderen Modulen noch hinzugefügt wird.

hth,

 Stefan

ja, hab das ausprobiert. allerdings wurde dann das impressum (also eine zufällige node id von allen inhaltstypen angezeigt)

ich wollte aber, dass es einen zufälligen "showcase" inhalt anzeigt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Views ?

Eingetragen von drubb (580)
am 07.11.2008 - 10:23 Uhr

Hallo,

falls du auf deiner Seite schon Views 2 einsetzt, damit geht es auch: einfach einen Block View mit genau einem Node anlegen, und als Sortierkriterium "Random".

Gruß,
Boris

  • Anmelden oder Registrieren um Kommentare zu schreiben

habs jetzt ganz einfach so

Eingetragen von hijacker (13)
am 07.11.2008 - 12:31 Uhr

habs jetzt ganz einfach so gemacht:

<?php

$sql
= "SELECT * FROM {node} WHERE type = 'showcase' AND status = 1 ORDER BY RAND() LIMIT 1";
$result = db_query(db_rewrite_sql($sql));


while (
$data = db_fetch_object($result)) {
      
   
$node = node_load($data->nid);
    
print
'<h3>'.$node->title.'</h3>'.'<br>';
print
$node->body;

}
?>

jetzt bastel ich mir nur noch ein zufallsalgorithmus, der den block nur noch einmal am tag wechselt und nicht nach jedem laden!

Dann mal vielen Dank für eure guten Antworten!

  • Anmelden oder Registrieren um Kommentare zu schreiben

performance

Eingetragen von stBorchert (6003)
am 08.11.2008 - 18:52 Uhr

Moin!
Aus Performancegründen würde ich dann jedoch "SELECT nid FROM {node}..." verwenden, da so nur eine Spalte von mysql geladen werden muss. Das ist wesentlich schneller als "SELECT *".

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 6 Tagen
  • Hey danke
    vor 2 Wochen 1 Stunde
  • Update: jetzt gibt's ein
    vor 2 Wochen 19 Stunden
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 2 Tagen
  • In der entsprechenden View
    vor 3 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 2 Tagen
  • gelöst
    vor 5 Wochen 6 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 2 Stunden

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association