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 - 11: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 - 11: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

Don't code today what you can't debug tomorrow
Ariya Hidayat

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die Antwort aber

Eingetragen von th3o2211 (87)
am 26.03.2013 - 12: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 (9333)
am 26.03.2013 - 12:42 Uhr

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

Beste Grüße
Werner

.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *

  • Anmelden oder Registrieren um Kommentare zu schreiben

query

Eingetragen von stBorchert (6003)
am 26.03.2013 - 12: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].

Tipp: Beachte die Verhaltensregeln des DrupalCenter.

Logo undpaul

  • Anmelden oder Registrieren um Kommentare zu schreiben

ok ich habs jetzt so

Eingetragen von th3o2211 (87)
am 26.03.2013 - 13: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 - 13: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 - 14: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()).

Tipp: Beachte die Verhaltensregeln des DrupalCenter.

Logo undpaul

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok

Eingetragen von th3o2211 (87)
am 26.03.2013 - 14: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 - 14: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

  • Matomo(?) in Seite, aber Deinstalliert!
  • Upgrade Drupal 7 auf Drupal 9 / Inhalt erstellen zeigt nur Fehler an
  • Olivero veraendern
  • Fehlermeldung nach Update auf Drupal 10
  • Wie Button erstellen?
  • footnotes bei D10 und CKE5
  • ckeditor Bilder skalieren
  • Bild in welcher Form die Beschriftung!
  • Drupal 10 und Adaptive Theme 2.0
  • Drupal Commerce: Deprecated Module deinstallieren: CKEditor, RDF
  • [gelötst] Migration einer Seite von D8.9 auf 9 resp 10
  • Theme Olivero - Rand entfernen?
Weiter

Neue Kommentare

  • @onkel Bob,Erst mal
    vor 5 Tagen 13 Stunden
  • Prinzipiell geht das schon.
    vor 5 Tagen 13 Stunden
  • Rubi_2021 schriebWie genau
    vor 1 Woche 4 Tagen
  • Ok, war ein Versuch. ;-) Kann
    vor 1 Woche 4 Tagen
  • Danke
    vor 1 Woche 4 Tagen
  • Redest Du von dem
    vor 1 Woche 4 Tagen
  • Mit sticht das hier ins
    vor 1 Woche 4 Tagen
  • Mit welcher Version Drupal
    vor 1 Woche 4 Tagen
  • Bitte um Hilfe
    vor 1 Woche 5 Tagen
  • Fehler trotz Neuinstallation
    vor 1 Woche 5 Tagen

Statistik

Beiträge im Forum: 248796
Registrierte User: 19831

Neue User:

  • J. Berten
  • vohome
  • DerRalph

» Alle User anzeigen

User nach Punkten sortiert:
wla9333
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 4 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