Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

[GELÖST]PHP Code im Block

Eingetragen von th3o2211 (87)
am 26.03.2013 - 10:35 Uhr in
  • Module
  • Drupal 7.x oder neuer

Hallo Liebe Leute,

ich hab ein Problem bei dem ich nicht sicher bin wodran es nun liegt. Najach jedefalls möchte ich in einem Block php Code ausführen lassen und zwar eine SQL abfrage :

<?php

MSSQL
:

SELECT COUNT(*) FROM [mmdrupal].[dbo].[mm_acl_user]
JOIN [mmdrupal].[dbo].[mm_acl_node]
 
ON mm_acl_user.acl_id = mm_acl_node.acl_id
JOIN
[mmdrupal].[dbo].[mm_node]
 
ON mm_node.nid = mm_acl_node.nid
    WHERE mm_node
.status=1 AND mm_acl_user.uid=7

?>

das ist nun die abfrage. Jedoch muss ich die dynamische query language von drupal benutzen. Mein Problem liegt am join hier erstmal mein versuch:

<?php


$count
= db_select('acl_user', 'i')
        ->
innerJoin('acl_node', 'u', 'i.acl_id = u.acl_id')
        ->
innerJoin('node', 'n', 'u.nid = n.nid')
        ->
condition('i.uid', $user_id,'=')
        ->
fields("n", array("status", "nid"))
        ->
fields("i", array("acl_id"))
        ->
fields("u", array("acl_id"))
        ->
countQuery()
        ->
execute()
        ->
fetchALL();


?>

jedoch wenn ich dies ausführe bekomme ich folgende fehlermeldung:

Fatal error: Call to a member function innerJoin() on a non-object in .......\modules\php\php.module(80) : eval()'d code on line 9

Ich hab unendlich viele Beiträge gelesen und mir (meiner Meinung sehr dürftige) Doku von drupal.org angesehen aber ich komme nicht auf einen Grünen Zweig. Ich würde mich über jede Anmerkung und Verbesserung bzw. Lösung freuen.

Vielen Dank!

‹ Search-Block fehlt unter Struktur -> Blöcke [GELÖST]PHP Code im Block ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das Node-Objekt steht Dir im

Eingetragen von oteno (775)
am 26.03.2013 - 10:44 Uhr

Das Node-Objekt steht Dir im Block nicht zur Verfügung. Der Block erscheint ja nur dann, wenn eine Node als Page dargestellt wird, oder?
Dann kannst Du Dir das Objekt mittels
$node = menu_get_object();
laden.
Wenn das so nicht klappt, gibt es noch andere Möglichkeiten das Objekt zu laden. Kannst Du dann aber auch ergooglen.
Gruß
Christian

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die Antwort aber

Eingetragen von th3o2211 (87)
am 26.03.2013 - 11:01 Uhr

leider nicht die Antwort die ich erwarte. Gut daran ist meine Mangelde Erklärung schuld. Also was ich eigendlich machen möchte:

Ich will in einem Block die Anzahl (->countQuery()) der Nodes anzeigen lassen, auf dem der Aktuelle Benutzer die Berechtigung hat.

Die Tabelle die ich dafür brauche sind:

acl_node, acl_user, node

  • Anmelden oder Registrieren um Kommentare zu schreiben

Inner join kann nicht in

Eingetragen von wla (9461)
am 26.03.2013 - 11:42 Uhr

Inner join kann nicht in Kette mit anderen DB-Befehlen eingetragen werden. Dazu noch mal die API studieren.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

query

Eingetragen von stBorchert (6003)
am 26.03.2013 - 11:58 Uhr

Mal abgesehen davon, dass Du die Query nach den einzelnen Joins aufteilen musst, ist es ganz schlechte Praxis, das einfach so in einen Block zu packen.
Erstelle Dir besser ein eigenes kleines Modul und lass den Block von diesem Modul erzeugen.
Dazu benötigst Du dann Implementierungen von [api:hook_block_info:7] und [api:hook_block_view:7].

  • Anmelden oder Registrieren um Kommentare zu schreiben

ok ich habs jetzt so

Eingetragen von th3o2211 (87)
am 26.03.2013 - 12:02 Uhr

ok ich habs jetzt so gemacht:

<?php

$count
= db_select('acl_user', 'i')
        ->
fields("i");
       
$count->join('acl_node', 'u', 'i.acl_id = u.acl_id');
       
$count->join('node', 'n', 'u.nid = n.nid');
       
$count->condition('i.uid', $user_id,'=');
       
$count->fields("n", array("status", "nid"));
       
$count->fields("u", array("acl_id"));
       
$count->countQuery();
       
$count->execute();

?>

ich bekomme zwar ein Ergebnis aber das ist eher ein object von meinem query und das hat noch infos über den MSSQL also hat auch nicht funktioniert. Ist vllt was an meiner syntax falsch?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Neuer versuch

Eingetragen von th3o2211 (87)
am 26.03.2013 - 12:36 Uhr

Mein Gebilde sieht nun mitlerweile so aus:

<?php


$count
= db_select("acl_user", "i");
       
$count->innerJoin('acl_node', 'u', 'i.acl_id = u.acl_id');
       
$count->join('node', 'n', 'u.nid = n.nid');
       
$zusatz = $count
                 
->fields("i")
                  ->
fields("n", array("status", "nid"))
                  ->
fields("u", array("acl_id"))
                  ->
countQuery()
                    ->
execute();


?>

und ich bekomme das als Ergebnis:

<?php


string
(175) "SELECT COUNT(*) AS expression
FROM
(SELECT 1 AS expression
FROM
mm_acl_user i
INNER JOIN mm_acl_node u ON i.acl_id = u.acl_id
INNER JOIN mm_node n ON u.nid = n.nid) subquery
.......


?>

das ist jetzt nur ein ausschnitt die andern werte sind nur sachen über den MSSQL

Und ich weiß jetzt an diesem Punkt nicht mehr ob ich das so richtig mache oder nicht ein Statment wäre super danke!

  • Anmelden oder Registrieren um Kommentare zu schreiben

DBTNG

Eingetragen von stBorchert (6003)
am 26.03.2013 - 13:22 Uhr

Schau Dir doch bitte mal die Database-API an (besonders [api:db_select:7]). Dort gibt es auch Beispiele, wie man die Anzahl von Objekten ermittelt (Stichwort rowCount()).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok

Eingetragen von th3o2211 (87)
am 26.03.2013 - 13:41 Uhr

Also ich hatte aus der Database-API das hier entnommen Count Queries und auch angewendet zwar mit einem anderen query aber es hatte funktioniert und da bin ich mir sicher dass das Problem nicht bei countQuery liegt.

Und rowCount wird nach der API nur bei update, insert und delete verwand und dort zählt er nur die Zeilen die betroffen sind.

  • Anmelden oder Registrieren um Kommentare zu schreiben

So

Eingetragen von th3o2211 (87)
am 26.03.2013 - 13:59 Uhr

Erstmal danke für eure Mitarbeit aber ich hab das Problem selbst gelöst. Es lag wie auch schon paarmal von mir vermutet an der syntax. Hier meine Lösung zu dem Problem:

<?php

$count
= db_select("acl_user", "i");
       
$count->innerJoin('acl_node', 'u', 'i.acl_id = u.acl_id');
       
$count->innerJoin('node', 'n', 'u.nid = n.nid');
       
$zusatz = $count
                 
->fields("i")
                  ->
fields("n", array("status", "nid"))
                  ->
fields("u", array("acl_id"))
                  ->
condition('i.uid', $user_id,'=')
                  ->
countQuery();
                  
$result = $zusatz->execute();
$ende = $result->fetchALL();

?>

  • 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 2 Wochen 1 Tag
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 2 Stunden
  • Da scheint die Terminologie
    vor 3 Wochen 5 Stunden
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

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 34 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