Ergebnis 1 bis 7 von 7

Thema: [gelöst] Inhaltselement mit Hilfe von AJAX nachladen

  1. #1
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Standard [gelöst] Inhaltselement mit Hilfe von AJAX nachladen

    Das Problem ist relativ einfach: Beim Klick auf einen Button soll ein Inhaltselement nachgeladen werden.

    HTML-Code:
    <h1>Inhaltselement nachladen</h1>
    <input type="button" value="Ajax Request"  onclick="showContent(455);">
    <div id="txtHint"><b>Nach dem Klick erscheint hier die Ausgabe.</b></div>
    Code:
    <script>
    function showContent(contentId)
    {
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
      }
      xmlhttp.open("GET","templates/ajaxtest.php?q="+contentId,true);
    xmlhttp.send();
    }
    </script>
    Irgendwie bekomme ich die ajaxtest.php nicht zum Laufen.

    - Wenn ich sie ins Root-Verzeichnis lege, bekomme ich den Fehler: Fatal error: Using $this when not in object context..on Line 4
    - Im Ordner "Templates" (dort legt man ja auch php-Dateien rein, die mit dem file-Inserttag eingebunden werden) bekomme ich: 403 Forbidden

    PHP-Code:
    <?php
    $q
    =$_GET["q"];
    $myInsertTag '{{insert_content::' $q '}}';
    $myContent $this->replaceInsertTags$myInsertTag );  
    echo 
    $myContent;
    ?>
    Ich bin mir auch nicht sicher, ob ich noch in der php-Datei noch einen Datenbankimport via $this->import('Database'); vornehmen muss.

    Danke für die Hilfe!

    Gruß,
    Troy
    Geändert von Troy (19.04.2013 um 19:09 Uhr)

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Und was sollte Deiner Meinung nach $this in diesem Skript sein, wenn es für sich alleine ausgeführt wird?

    Das wird so nicht funktionieren, weil $this null ist.

    Du musst also erst ein minimales Contao initialisieren. Schau Dir dazu mal die Erweiterungen Ajax oder SimpleAjax an.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Contao-Fan Avatar von w3scout
    Registriert seit
    20.06.2009.
    Ort
    Stuttgart
    Beiträge
    273
    Contao-Projekt unterstützen

    Support Contao

    Standard

    $this meckert, weil Du keine Klasse hast, auf das es sich beziehen kann. Und um Contao Methoden nutzen zu können, musst Du das System erstmal irgendwie "anzapfen".

    Das mindeste was Du brauchst, ist die initialize.php (require('system/initialize.php')) und dann bräuchtest Du noch die Controller-Klasse, weil sich dort die replaceInsertTags - Methode befindet.

    Schau Dir mal die ajax.php von A. Schempp an: https://contao.org/de/extension-list...010059.de.html Vielleicht kannst Du die ja für Deinen Zweck verwenden.

    //Edit: eben erst die Antwort von fledsch gesehen

  4. #4
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Warum machst du das über den Umweg über InsertTags, wenn du eh schon die ID hast?
    Hol dir doch gleich das fertige HTML per
    PHP-Code:
    <?php $this->getContentElement($ID); ?>

  5. #5
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Zitat Zitat von dhe Beitrag anzeigen
    Warum machst du das über den Umweg über InsertTags, wenn du eh schon die ID hast?
    Hol dir doch gleich das fertige HTML per
    PHP-Code:
    <?php $this->getContentElement($ID); ?>
    Das ändert nicht am ursprünglichen Problem. Kein $this, kein $this->getContentElement($ID);
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  6. #6
    Contao-Fan Avatar von dhe
    Registriert seit
    25.10.2010.
    Ort
    Esslingen a.N.
    Beiträge
    657

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Das ändert nicht am ursprünglichen Problem. Kein $this, kein $this->getContentElement($ID);
    Ich meinte das auch so, dass in einer eigenen Datei in der per require('system/initialize.php') Contao initialisiert wurde, dann steht $this zur Verfügung

  7. #7
    Contao-Nutzer
    Registriert seit
    25.12.2011.
    Beiträge
    77

    Daumen hoch

    Ich danke euch für eure Tipps. Ihr habt mich auf die richtige Fährte gebracht.

    HTML-Code:
    <h1>Ajax</h1>
    <input type="button" value="Ajax Request"  onclick="showContent();">
    
    <div id="txtHint"><b>Nach dem Klick erscheint hier die Ausgabe.</b></div>
    Code:
    <script>
    function showContent()
    { 
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
      }
      xmlhttp.open("GET","ajaxtest3.php?contentelementdata=325",true);
    xmlhttp.send();
    }
    </script>
    Bei meiner php-Datei habe ich mich an folgender Lösung orientiert:
    https://community.contao.org/de/show...ht=simple_ajax

    PHP-Code:
     <?php
    /**
     * Initialize the system
     */
    define('TL_MODE''FE');
    require(
    'system/initialize.php');

    class 
    contentElementByAlias extends \Controller
    {
        
    /**
         * Call the parent constructor.
         * !!! DON'T REMOVE THIS !!!
         * Thanks to Leo Unglaub / simple_ajax
         */
        
    public function __construct()
        {
            
    parent::__construct();
        }
        
        
    /**
         * Get the article ID via its alias sendet by GET
         * and loading the article
         */
        
    public function run()
        {    
        
    $contentElementID = \Controller::getContentElement($_GET["contentelementdata"]);
                    echo( 
    $contentElementID );


        }

    }

    // create a contentElementByAlias instance and run it.
    $objArticle = new contentElementByAlias();
    $objArticle->run();
    ?>
    Wenn ich jetzt auf den Button klicke, erscheint das Inhaltselement.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •