Gibt es eine Alternative zum Modul "ReadfromUrl"? Das Modul wurde leider nur bis 2.6.6. weiterentwickelt und in der Vergangenheit schon von mir verwendet. Jetzt bräuchte ich das Modul, nur leider funktioniert es unter der aktuellen TL Version nicht.
Gibt es eine Alternative zum Modul "ReadfromUrl"? Das Modul wurde leider nur bis 2.6.6. weiterentwickelt und in der Vergangenheit schon von mir verwendet. Jetzt bräuchte ich das Modul, nur leider funktioniert es unter der aktuellen TL Version nicht.
Ich kenne das Modul nicht, was genau brauchst du denn ?
Vieles kannst du naemlich auch im Template oder File mittels $this->Input->get('###') machen
von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«
Contao-Hosting: begeisterter Uberspace-Nutzer
Ich weis auch nicht was das Modul macht, aber die Erweiterung "inputvar" könnte dir weiterhelfen.
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Das Modul Read from URL hat Inhalte von externen Seiten ausgelesen und die im CMS ausgegeben.
Liest den Inhalt einer URL (Normaler Inhalt, serialisiertes Array und XML) ein und gibt ihn aus.
Beschreibung
Mit diesem Modul können Sie Inhalt von einer URL laden. Dabei wird zwischen drei Szenarien unterschieden:
* Sie möchten lediglich den Inhalt einer URL anzeigen
* Sie möchten ein serialisiertes Array einer URL in Ihr Template einbinden
* Sie möchten ein XML-Dokument in Ihr Template einbinden
Außerdem:
* Unterstützung von Insert-Tags in der URL
* Weitergabe von POST und GET Anfragen an die Quell-URL
ReadFromUrl erscheint im Artikel als neues Inhaltselement "Von URL lesen".
Voraussetzungen
Damit das Modul funktionieren kann, muss die Funktion readfromurl freigeschalten sein. Zudem muss der Funktion readfromurl gestattet sein auf entfernten Inhalt via HTTP zuzugreifen.
Anleitung
Eine ausführliche Anleitung finden Sie auf http://www.pleinesoft.de/downloads/t...eadfromurl.txt
Keiner ne weitere Idee?
Wäre gut gewesen, wenn du geschrieben hättest was denn nicht geht.
Nun habe ich das mal installiert und bekam nach dem Einsatz eine Meldung:
Und das ist doch ein sehr bekanntes Probem, was an einer mittlerweile höhere PHP Version liegt.Code:Runtime notice: Declaration of ReadFromUrl::replaceInsertTags() should be compatible with that of Controller::replaceInsertTags()
Dafür gibts auch hier im Forum schon Tipps zur Beseitigung.
Ich habe mal die Datei ReadFromUrl.php angepasst (replaceInsertTags umbenannt) und die Class dabei noch erweitert, damit die per URL geholte Seite im Backend nicht angezeigt wird, das stört doch extrem.
Anbei die veränderte Datei.
Sollte das nicht dein Problem sein, dann sag genauer was los ist.PHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
/**
* TYPOlight webCMS
* Copyright (C) 2005 Leo Feyer
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program. If not, please visit the Free
* Software Foundation website at http://www.gnu.org/licenses/.
*
* PHP version 5
* @copyright Christopher Pleines 2005
* @author Christopher Pleines <chris@pleinesoft.de>
* @package Frontend
* @license LGPL
* @filesource
*/
/**
* Class ReadFromUrl
*
* @copyright Christopher Pleines
* @author Christopher Pleines
* @package Controller
*/
class ReadFromUrl extends ContentElement
{
/**
* Template
* @var string
*/
protected $strTemplate = 'rfu_content';
/**
* Display a wildcard in the back end
* @return string
*/
public function generate()
{
if (TL_MODE == 'BE')
{
$objTemplate = new BackendTemplate('be_wildcard');
$objTemplate->wildcard = '### ReadFromUrl Module ###';
return $objTemplate->parse();
}
return parent::generate();
}
/**
* Compile module
*/
protected function compile()
{
if ($this->readfromurl_template)
$this->strTemplate = $this->readfromurl_template;
$this->Template = new FrontendTemplate($this->strTemplate);
// Replace insert tags/entity decode
$this->url = html_entity_decode($this->RFU_replaceInsertTags($this->readfromurl));
switch ($this->readfromurl_source):
case 'rfu_content':
$this->read_content();
break;
case 'rfu_serialized':
$this->read_serialized();
break;
case 'rfu_xml':
$this->read_xml();
break;
endswitch;
}
/**
* Read raw data from $this->url
*/
private function read_rawdata() {
$options = array( 'http' => array(
'max_redirects' => 10, // stop after 10 redirects
'timeout' => 120, // timeout on response
) );
$context = stream_context_create( $options );
$url_content = @file_get_contents($this->url, false, $context);
if (!$url_content)
$this->log('ReadFromURL: Could not read from URL ' . $this->url, 'ReadFromUrl read_rawdata()', TL_ERROR);
return $url_content;
}
/**
* Process simple content
*/
private function read_content() {
$url_content = $this->read_rawdata();
if ($this->encode_utf8) $url_content = utf8_encode($url_content);
if ($this->decode_utf8) $url_content = utf8_decode($url_content);
$this->Template->url_content = $url_content;
}
/**
* Process serialized content
*/
private function read_serialized() {
$url_content = $this->read_rawdata();
$arr = @unserialize($url_content);
if (!$arr)
$this->log('ReadFromURL: Could not unserialize Array/Object from ' . $this->url, 'ReadFromUrl read_serialized()', TL_ERROR);
$this->Template->url_content = $arr;
}
/**
* Process XML content
*/
private function read_xml() {
$url_content = $this->read_rawdata();
$xml = @simplexml_load_string($url_content);
if (!xml)
$this->log('ReadFromURL: Could not read valid XML from ' . $this->url, 'ReadFromUrl read_xml()', TL_ERROR);
$this->Template->url_content = $xml;
}
/**
* Replace Insert Tags
* - {{request_vars}} => $GLOBALS['_REQUEST'] url-conformed
*/
protected function RFU_replaceInsertTags($strTag) {
$replace = http_build_query($GLOBALS['_REQUEST']);
$replaced_string = str_replace('{{request_vars}}', $replace, $strTag);
return $replaced_string;
}
}
?>
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Ich teste das morgen gleich mal. Dankeschön erstmal
Hab mal deine Version genommen und bekomme folgende Fehlermeldung:
Code:Recoverable error: Argument 1 passed to ContentElement::__construct() must be an instance of Database_Result, none given, called in /www/htdocs/w00c7868/_cms/system/libraries/System.php on line 145 and defined in /www/htdocs/w00c7868/_cms/system/modules/frontend/ContentElement.php on line 71 #0 /www/htdocs/w00c7868/_cms/system/modules/frontend/ContentElement.php(71): __error(4096, 'Argument 1 pass...', '/www/htdocs/w00...', 71, Array) #1 /www/htdocs/w00c7868/_cms/system/libraries/System.php(145): ContentElement->__construct() #2 /www/htdocs/w00c7868/_cms/system/libraries/Controller.php(1757): System->import('ReadFromUrl') #3 /www/htdocs/w00c7868/_cms/system/modules/frontend/FrontendTemplate.php(180): Controller->replaceInsertTags('output() #5 /www/htdocs/w00c7868/_cms/index.php(188): PageRegular->generate(Object(DB_Mysql_Result)) #6 /www/htdocs/w00c7868/_cms/index.php(311): Index->run() #7 {main} Warning: Missing argument 1 for ContentElement::__construct(), called in /www/htdocs/w00c7868/_cms/system/libraries/System.php on line 145 and defined in /www/htdocs/w00c7868/_cms/system/modules/frontend/ContentElement.php on line 71 #0 /www/htdocs/w00c7868/_cms/system/modules/frontend/ContentElement.php(71): __error(2, 'Missing argumen...', '/www/htdocs/w00...', 71, Array) #1 /www/htdocs/w00c7868/_cms/system/libraries/System.php(145): ContentElement->__construct() #2 /www/htdocs/w00c7868/_cms/system/libraries/Controller.php(1757): System->import('ReadFromUrl') #3 /www/htdocs/w00c7868/_cms/system/modules/frontend/FrontendTemplate.php(180): Controller->replaceInsertTags('output() #5 /www/htdocs/w00c7868/_cms/index.php(188): PageRegular->generate(Object(DB_Mysql_Result)) #6 /www/htdocs/w00c7868/_cms/index.php(311): Index->run() #7 {main} Fatal error: Call to a member function row() on a non-object in /www/htdocs/w00c7868/_cms/system/modules/frontend/ContentElement.php on line 75
Kommt das im Backend oder Frontend?
Welche Art hast du genutzt vom Modul? Ich hatte das nur per URL probiert.
Welche TL Version nimmst du?
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Huch, jetzt habe ich das auch.
Ich schaue nochmal nach.
Nachschau...
Komisch, leider kenn ich mich mit CEs nicht so recht aus, finde ím Vergleich zu anderen aber erstmal nichts was hier schief laufen soll.
Geändert von BugBuster (26.05.2010 um 19:43 Uhr)
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
So, nehme mal diese.
Ich verstehe zwar nicht, warum hier die contruct Methode nötig ist, aber was solls.
PHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
/**
* TYPOlight webCMS
* Copyright (C) 2005 Leo Feyer
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program. If not, please visit the Free
* Software Foundation website at http://www.gnu.org/licenses/.
*
* PHP version 5
* @copyright Christopher Pleines 2005
* @author Christopher Pleines <chris@pleinesoft.de>
* @package Frontend
* @license LGPL
* @filesource
*/
/**
* Class ReadFromUrl
*
* @copyright Christopher Pleines
* @author Christopher Pleines
* @package Controller
*/
class ReadFromUrl extends ContentElement
{
/**
* Template
* @var string
*/
protected $strTemplate = 'rfu_content';
/**
* Display a wildcard in the back end
* @return string
*/
public function generate()
{
if (TL_MODE == 'BE')
{
$objTemplate = new BackendTemplate('be_wildcard');
$objTemplate->wildcard = '### ReadFromUrl Module ###';
return $objTemplate->parse();
}
return parent::generate();
}
public function __construct(Database_Result $objModule=null, $strColumn='main')
{
if ($objModule !== null)
parent::__construct($objModule, $strColumn);
}
/**
* Compile module
*/
protected function compile()
{
if ($this->readfromurl_template)
$this->strTemplate = $this->readfromurl_template;
$this->Template = new FrontendTemplate($this->strTemplate);
// Replace insert tags/entity decode
$this->url = html_entity_decode($this->RFU_replaceInsertTags($this->readfromurl));
switch ($this->readfromurl_source):
case 'rfu_content':
$this->read_content();
break;
case 'rfu_serialized':
$this->read_serialized();
break;
case 'rfu_xml':
$this->read_xml();
break;
endswitch;
}
/**
* Read raw data from $this->url
*/
private function read_rawdata() {
$options = array( 'http' => array(
'max_redirects' => 10, // stop after 10 redirects
'timeout' => 120, // timeout on response
) );
$context = stream_context_create( $options );
$url_content = @file_get_contents($this->url, false, $context);
if (!$url_content)
$this->log('ReadFromURL: Could not read from URL ' . $this->url, 'ReadFromUrl read_rawdata()', TL_ERROR);
return $url_content;
}
/**
* Process simple content
*/
private function read_content() {
$url_content = $this->read_rawdata();
if ($this->encode_utf8) $url_content = utf8_encode($url_content);
if ($this->decode_utf8) $url_content = utf8_decode($url_content);
$this->Template->url_content = $url_content;
}
/**
* Process serialized content
*/
private function read_serialized() {
$url_content = $this->read_rawdata();
$arr = @unserialize($url_content);
if (!$arr)
$this->log('ReadFromURL: Could not unserialize Array/Object from ' . $this->url, 'ReadFromUrl read_serialized()', TL_ERROR);
$this->Template->url_content = $arr;
}
/**
* Process XML content
*/
private function read_xml() {
$url_content = $this->read_rawdata();
$xml = @simplexml_load_string($url_content);
if (!xml)
$this->log('ReadFromURL: Could not read valid XML from ' . $this->url, 'ReadFromUrl read_xml()', TL_ERROR);
$this->Template->url_content = $xml;
}
/**
* Replace Insert Tags
* - {{request_vars}} => $GLOBALS['_REQUEST'] url-conformed
*/
protected function RFU_replaceInsertTags($strTag) {
$replace = http_build_query($GLOBALS['_REQUEST']);
$replaced_string = str_replace('{{request_vars}}', $replace, $strTag);
return $replaced_string;
}
}
?>
Geändert von BugBuster (26.05.2010 um 20:26 Uhr)
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Funktioniert. Vielen Dank. Da könnte man doch die Version im Repository aktualisieren
Da ist immer noch der Wurm drin.
Durch die Umbenennung der Funktion müsste auch die Definition in der config.php angepasst werden:
Die Funktion RFU_replaceInsertTags scheint zwar zu funktionieren wenn diese intern aufgerufen wird, jedoch nicht als Hook. Ein Hook muss immer eine nicht leere Rückgabe haben bzw. "false" wenn der Hook nicht für diese Funktion gedacht ist.PHP-Code:
// New Callback
$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('ReadFromUrl', 'RFU_replaceInsertTags');
Dies ist aber hier nicht so!
Das äußert sich dadurch, das alle weiteren Extensions die alphabetisch nach dem Modul ReadFromUrl kommen, nicht mehr funktionieren wenn diese Inserttags nutzen!
Ich habe den Sinn des Hook Aufrufes eh nicht verstanden, und daher die Definition in der config.php rausgenommen
Nun geht bei mir alles wieder.PHP-Code:
// New Callback
//$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('ReadFromUrl', 'RFU_replaceInsertTags');
Geändert von BugBuster (27.10.2017 um 15:39 Uhr)
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Hallo,
hat jemand mit der alten Version in Contao 3.4 ausprobiert, eine externe XML-Datei auszulesen und auszugeben? Oder hat jemand eine elegante Lösung für Contao parat? Ich weiß, dass es mit Hilfe von PHP geht (parse). Allerdings würde ich gerne eher auf eine einfachere und für Backend geeignete Lösung zugreifen. Danke.
Liebe Grüße,
Jan
Hallo zusammen.
Gibt es zur Erweiterung [readfromurl] eine Alternative für Contao 3.5? Meine Recherche in der Erweiterungsliste blieb leider ergebnislos.
Danke für Tipps und beste Grüße
Tino
Gibt es hier mehrere User die diese Erweiterung gerne für Contao 3.5 hätten?
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Ich greife mal vor und sage mal, ja es gibt nun eine Alternative für Contao 3.5:
https://github.com/BugBuster1701/readfromurl3
Noch nicht über Composer verfügbar, folgt später.
Die ZIP laden für manuelle Installation: auf der GitHub Seite auf release klicken, dort auf "zip" lädt die Erweiterung.
Installation ist in der Readme beschrieben.
Achtung: das Verzeichnis der Erweiterung ist nun readfromurl3 , falls jemand die alte Version vom Original Autor installiert hat (Verzeichnis readfromurl), die ist vorher zu entfernen und "Systemwartung" -> "Internen Cache leeren" ausführen.
Die DB Felder sind identisch, sofern man die nicht löscht, bleiben alle eventuellen Eintragungen noch erhalten.
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
So, diese Version ist nun auch über Composer/Paketverwaltung installierbar mit dem Namen: bugbuster/readfromurl3
Grüße, BugBuster"view source" is your guide.Danke an alle Amazon Wunschlisten Erfüller
Wow! Was für eine wahnsinns Reaktionszeit. Toll. Ich gucke mir das bei Gelegenheit an.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)