Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

raiseError 500 - Problem beim Kompo-Anpassen

  • Jack
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
16 Juli 2012 14:25 #34868 von Jack
Hallo,
mir fehlt wohl etwas der Überblick bzgl. J!2.5.x-Neuerungen und - sicher auch etwas php :
Ich wollte eine 1.5.x-Komponente anpassen und hänge an einem J!-Fehler 500.
Kann da jemand helfen?

die Codestelle ist hier:
Code:
$authordetails = JTable::getInstance('user'); $authordetails->load(JRequest::getVar( 'created_by' )); if( !$authordetails->load( JRequest::getVar( 'created_by' ) ) ) { // error here JError::raiseError( 500, $authordetails->getError()); }
und ein
Code:
echo "<pre>"; print_r($authordetails); die;
ergibt
Code:
JTableUser Object( [groups] => [_tbl:protected] => #__users [_tbl_key:protected] => id [_db:protected] => JDatabaseMySQLi Object ( [name] => mysqli [nameQuote:protected] => ` [nullDate:protected] => 0000-00-00 00:00:00 [dbMinimum:protected] => 5.0.4 [_database:JDatabase:private] => joomla_fer [connection:protected] => mysqli Object ( [affected_rows] => 14 [client_info] => 5.1.41 [client_version] => 50141 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [field_count] => 9 [host_info] => localhost via TCP/IP [info] => [insert_id] => 0 [server_info] => 5.1.41 [server_version] => 50141 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 381 [warning_count] => 0 ) [count:protected] => 0 [cursor:protected] => mysqli_result Object Warning: print_r() [function.print-r]: Couldn't fetch mysqli_result in joomla\plugins\system\dynotificationmanager\dynotificationmanager.php on line 1062 Warning: print_r() [function.print-r]: Couldn't fetch mysqli_result in E:\wwwon\docroot\x_oga_j\plugins\system\dynotificationmanager\dynotificationmanager.php on line 1062 Warning: print_r() [function.print-r]: Property access is not allowed yet in joomla\plugins\system\dynotificationmanager\dynotificationmanager.php on line 1062 Warning: print_r() [function.print-r]: Couldn't fetch mysqli_result in joomla\plugins\system\dynotificationmanager\dynotificationmanager.php on line 1062 Warning: print_r() [function.print-r]: Property access is not allowed yet in joomla\plugins\system\dynotificationmanager\dynotificationmanager.php on line 1062 ( [current_field] => [field_count] => [lengths] => [num_rows] => [type] => ) [debug:protected] => [limit:protected] => 0 [log:protected] => Array ( ) [offset:protected] => 0 [sql:protected] => SHOW FULL COLUMNS FROM `#__users` [tablePrefix:protected] => fer_ [utf:protected] => 1 [errorNum:protected] => 0 [errorMsg:protected] => [hasQuoted:protected] => [quoted:protected] => Array ( ) ) [_trackAssets:protected] => [_rules:protected] => [_locked:protected] => [_errors:protected] => Array ( ) [id] => 0 [name] => [username] => [email] => [password] => [usertype] => [block] => [sendEmail] => 0 [registerDate] => [lastvisitDate] => [activation] => [params] => [lastResetTime] => [resetCount] => )
Danke für Tipps,
Gruß, Jack
Mehr
16 Juli 2012 22:40 #34869 von Tribal6
Hi Jack

Anscheinend wird da kein vernünftiges Argument der Funktion load() übergeben, da die Benutzerdetails in deinem print_r leer sind. Da findet gar keine Prüfung statt, à la:
Code:
$authorId = JRequest::getInt('created_by'); if(!$authorId) { JError::raiseError( 500, 'No valid id given'); // oder auch die('User-Id ungültig: '.var_dump($authorId)); // oder mit der J-Dump Extension dump($authorId, 'Author-Id'); }
Einen Debugger und Haltepunkte wäre auch was. Da kannst du den Code Schritt für Schritt (oder Breakpoints) abarbeiten lassen, und siehst jederzeit welche Variablen an welcher Stelle gesetzt sind, und welchen Inhalt sie (an genau dieser Stelle) haben.

Prüfe mal, was du mit JRequest::getInt('created_by'); erhälst.

Desweiteren lädts du auch mit der Methode '$authordetails->load()' denselben Author gleich zweimal (da die JTableUser-Klasse weder im Singleton-Pattern noch sonstwie einen Caching-Machanismus hat). Einen Tick besser wäre es, den Return in einer Variablen zu speichern, damit sparst du dir eine Datenbank-Abfrage:
Code:
$authordetails = JTable::getInstance('user'); $isLoaded = $authordetails->load(JRequest::getVar( 'created_by' )); if( $isLoaded ){ .........
Allerdings ist es im Falle von registrierten Usern überhaupt nicht nötig, die JTableUser-Klasse direkt zu instanzieren, dafür gibt es eine Methode in der JFactory (inkl. 'Caching' durch Singelton) mit nur einer Zeile, überigens genau gleich wie schon in der J-1.5:
Code:
$author = JFactory::getUser($authorId);

Ich hoffe das half. :)

Prost, Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • Jack
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
17 Juli 2012 14:56 - 18 Juli 2012 01:12 #34870 von Jack
Hallo Roger,
Danke!

zunächst: es geht nicht um eine Komponenten, sondern um ein System-PlugIn!
Da habe ich zu lax geposted.

Ich dachte, mit ein wenig Tipparbeit könnte man es anpassen,
aber irgendwie komme ich vom 100sten ins 1000ste.

Ein Problem ist, das diese JRequest-Sache nicht Gefragtes auswirft.

Das hier funktioniert:
Code:
JRequest::get('post'); /* bzw. */ var_dump($_POST);
ergibt in J!2.5.x
Code:
Array ( [jform] => Array ( [title] => TestBesitzer [articletext] =>text, text, text [catid] => 8 [created_by_alias] => [state] => 1 [featured] => 1 [publish_up] => 2012-07-11 22:05:33 [publish_down] => 0000-00-00 00:00:00 [access] => 1 [language] => * [metadesc] => [metakey] => ) [task] => article.save [return] => aHR0cDovLdeda] => 1 )
aber Indexe wie 'created_by', 'id' sind nicht dabei - im Gegensatz zur J!1.5.x-Version: hier gibt es kein [jform]-array aus, sondern ein array(21) mit mehr Werten, inkl. der fehlenden.

Weiß jemand, was sich da in J!2.5.x geändert hat?
Wie/wo komme ich am geschicktesten an die 'created_by', 'id', etc. -Index in den PlugIn-Request? Oder müssen dazu neue $querys eingebaut werden?

btw.: Auch mit "article.save" bin ich schon aufgelaufen. Ich glaube in 1.5.x hieß das nur save?

Gruß, Jack
Mehr
18 Juli 2012 14:16 #34871 von Tribal6
Anhand der spärlichen Informationen vermute ich mal, das du versuchst ein Plugin vom Typ 'System' für die 2.5 lauffähig zu machen, und das dieses Plugin beim Speichern von Content irgendwas mit dem Autor, rsp. dessen User-Id machen soll, und versucht wird, die relevanten Daten aus den POST-Array eines Formulars auszulesen. Ist das korrekt soweit?

Dann wäre aber ein Plugin vom Typ 'Content' vermutlich geeigneter, das hat unter anderem Events mit Namen 'onContentBeforeSave' und 'onContentAfterSave' die beide den kompletten Artikel als Funktionsargument bekommen, ganz ohne JRequest::....... Und wird bei einem Artikel das Feld 'Autor' leer gelassen, so wird beim Speichern in der Table-Klasse automatisch die ID des aktuellen Users zugewiesen, sodass im Event 'onAfterContentSave' garantiert eine Autor-Id mit dabei ist.

Bei der 2.5 hat sich einiges geändert, stimmt. Aber 'altes' wurde grösstenteils auch belassen. Code einer Extension (Template, Modul, Komponente, Plugin...) die '1.5'-konform programmiert sind, kann in der 2.5 bis zu ca. 90% oder mehr unverändert übernommen werden. Es sind nur wenige Dinge die angepasst werden müssen. Sogar 1.0er Extensions laufen meist mit ein paar Änderungen in einer 2.5. Was aber aus diversen Gründen nicht wirklich zu empfehlen ist. Und neue Features wie z.B. ACL fehlen dann natürlich auch, wenn man die nicht nachträglich dazuschreibt.

Vesuche doch mal mit dem Entwickler des Plugins Kontakt aufzunehmen. Eventuell ist ja eine 2.5er Version schon in der Pipeline. Oder er passt dir das für ein paar Kreuzer an, wenn du dieses Plugin unbedingt brauchst.

R.

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • Jack
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
18 Juli 2012 15:39 #34872 von Jack
ich versuche das für 2.5 anzupassen:
www.dysolutions.co.uk/software/joomla/dynotificationmanager
Das PI gibt Notes raus bei Content- und Weblink-Bearbeitungen, also nicht nur für Content; das Ding nennt sich ja "Manager" - vielleicht ist es deswegen dem System zugeordnet.

Die XML "geht ja ... ". Was ich Anfangs "übersah", waren die neuen 2.5er Kategorien (section gibts nat. nicht mehr ...). Dann haben sich einige Feldnamen geändert. Komplex & viel Tipperei. An einigen Stellen habe ich immer noch Schwierigkeiten, an die Werte zu kommen und oft ist mir noch unklar, weshalb hier welche Werte überhaupt nötig sind. Das legt grundsätzlich Fragen zur Architektur nah und stellt das einfach stumpf auf Lauffähigkeit durchboxen in Frage.
Jetzte renne ich grad in die ACL, die ich auch nicht (so) eingeplant habe ....

Ich habe bei dysolutions mal vorsichtig angefragt, ob sie planen, das auf 2.5 upzudaten.
- und mach mir "Architekturgedanken" ...


Alternativ bastele ich noch an NotifyArticleSubmit in Richtung 2.5:
extensions.joomla.org/extensions/authori...lanned-content/14742
das mach allerdings nur Artikel (die obsoleten Notificationfeatures hat J!2.5. ja entwicklerfreundlicherweise ausgelassen - technisch: wieso gibts eine Info bei einem neuen Content, aber nicht wenn einer gespeichert wird?), daher habe ich den Schwerpunkt erstmal auf obiges gelegt.

Danke & Gruß,
Jack
Mehr
18 Juli 2012 22:05 #34873 von Tribal6
Da du dir Gedanken zur Architektur machst, ist anzunehmen, das du Ahnung von der Materie hast. Und scheinbar geht es darum, bei neuen und/oder geänderten Content- und Weblinkeinträgen benachrichtigt zu werden. Falls dem so ist:

Schreib dir doch diese 20-30 Zeilen Code selbst, und gut ist. Einfach im geeigneten Event im Systemplugin bei einem Speichervorgang alle POST und GET Variablen anzeigen lassen, diese analysieren (option, view, task, id...) und falls nötig entsprechende Mails versenden.
(Autoren-Id u.ä. kann du ja im Plugin auch nachträglich/zusätzlich mit einer DB-Query holen, falls im POST nicht vorhanden).

Infos zu
Plugins allgemein: docs.joomla.org/Category:Plugin_Development
System-Events: docs.joomla.org/Plugin/Events/System

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • Jack
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
30 Juli 2012 16:00 #34896 von Jack
es sind ein paar mehr Zeilen geworden:
joomla.ch/forum/142-plugins/34895-neues-...chrichtigungen#34895
Danke & Gruß, Jack
Moderatoren: Tribal6RePaoDragonlordChris Hoefligerpascaleadiheutschi.ch
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden