it-swarm.com.de

Übertragen Sie Daten über com_ajax in eine Joomla-Umgebung

UPDATE 2:

Es wurden 2 kleine Änderungen am folgenden Code vorgenommen ("echo" anstelle von "return" und "exit (); am Ende des Skripts" hinzugefügt). Jetzt funktioniert der Code wie erwartet. Dies verwendete ein jQuery.get. Ich werde jetzt mit cURL testen, aber ich gehe davon aus, dass die Dinge genauso funktionieren werden.

Vielen Dank an diejenigen, die geantwortet haben. Es brachte mich in die richtige Richtung.

AKTUALISIEREN:

Ich war ein paar Tage davon entfernt, aber ich bin wieder da.

Ich habe eine kleine Komponente erstellt und einen kleinen Test eingerichtet. Der Code für die Komponente lautet:

   <?php
    use Joomla\CMS\Log\Log;
    defined('_JEXEC') or die;
    JLog::addLogger(
        array('text_file' => 'reverse_log.php'), JLog::INFO, array('reverse'));
    JLog::add('You have reached com_reverse', JLog::INFO, 'reverse');
    $app = JFactory::getApplication();
    $in = $app->input;
    $text_str = "";
    $text_str =  $in->getString('text_str', 'gnirts oN');
    JLog::add('Text string is: ' . $text_str, JLog::INFO, 'reverse');
    echo "Remote: " . strrev($text_str);
    exit();

Wie Sie sehen können, rufe ich eine Zeichenfolge ab, kehre sie um und gebe sie zurück. Außerdem protokolliere ich einige Nachrichten.

Dies funktioniert teilweise. Ich komme zu meiner Komponente und protokolliere die Nachrichten. Anstelle der umgekehrten Zeichenfolge wird jedoch die Webseite zurückgegeben (der HTML-Code der Startseite der Joomla-Site). Gibt es eine Möglichkeit, dies zu unterdrücken und die umgekehrte Zeichenfolge zu erhalten?

Danke.


Was einfach erscheint, erweist sich für mich als ziemlich rätselhaft und ich brauche ein paar Hinweise. Das Szenario ist, dass Standort A von Zeit zu Zeit einige Daten zur Verarbeitung an Standort J (eine Joomla-Umgebung) sendet. Site J hat keine Neigung, dass Site A dies tun wird. Site J initiiert den Austausch nicht, Site A jedoch. Dies ist ausschließlich Server zu Server. Es gibt keine menschliche Schnittstelle.

Ich habe die Dokumentation gelesen und habe den Eindruck, dass dies mit com_ajax mit einem cURL-Aufruf von Site A möglich ist. Ich kann einfach nicht verstehen, wie, wie die Beziehung zwischen helper.php und modulename.php ist und was Javascript tun muss damit machen (es gibt keine UI)? Was ich wirklich brauche, ist eine Erklärung des Flusses. Kann mich bitte jemand aufklären?.

1
Sheldon Seale

Wie aus den Aktualisierungen der ursprünglichen Frage hervorgeht, konnte ich meinen Code zum Laufen bringen, obwohl ich com_ajax nicht verwendet und meine eigene Komponente darauf aufgebaut habe. Es gab ein paar Haken auf dem Weg, aber durch das Erstellen meiner eigenen kleinen Komponente bekam ich den Code so, wie ich es brauchte.

Dazu musste ich der .htaccess-Datei der Joomla-Umgebung einen CORS-Header hinzufügen, der die Daten (Site J aus meiner ursprünglichen Frage) für Access Control Allow Origin (in Apache: Header-Set Access-Control-Allow-Origin) verarbeitet. https://your.originating.site '), um Zugriff auf die gehostete Umgebung zu erhalten. Ich bekam immer eine 301 ohne.

Zuletzt möchte PHP eine HTML-Datei zurückgeben. Genau das tut es. Der Befehl exit () beendet das Skript, bevor die Homepage der Zielwebsite für Sie "zurückgegeben" wird. Vielleicht ein wenig Eine etwas harte Herangehensweise, aber es funktioniert und wird meinen Bedürfnissen entsprechen.

Nochmals vielen Dank an diejenigen, die geantwortet haben. Es half mir, in die Richtung zu weisen, die ich brauchte.

Um Daten an meine kleine Komponente (com_reverse) zu "pushen", habe ich ein jQuery.get und ein cURL GET verwendet.

jQuery (aus Javascript, der Kürze halber vereinfacht)

jQuery.get("https://my.joomla.site/index.php?option=com_reverse",
{"text_str": "Text string to reverse"},
function(result)
{
    alert(result)
});

cURL (aus PHP wiederum der Kürze halber vereinfacht)

$ch = curl_init();                                  // Initialize curl
$curl_url = "https://my.joomls.site/index.php?option=com_reverse" . "&text_str=" . urlencode("String to reverse")
//curl_setopt( $ch, CURLOPT_GET, 1 );  // GET is the default
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  // required for redirects
$curl_result = curl_exec($ch);
curl_close($ch);
echo "cURL result: " . $curl_result;  // echos back to calling script

HINWEIS: cURL GET und Umleitung haben Probleme. Sie verlieren unterwegs die URL-Codierung von Zeichenfolgen und Ihre Zeichenfolgen enden am ersten Leerzeichen. Dies ist für mich kein großes Problem, da die meisten Daten, die ich verwenden werde, numerisch sind. Um dies zu überwinden, ändere ich einfach "" in "~" in meinen Zeichenketten und kehre das vor dem "Echo" um. Wenn jemand eine Möglichkeit kennt, die URL-Codierung über 2 oder 3 Weiterleitungen aufrechtzuerhalten, würde ich gerne wissen, wie (es gibt viele cURL-Optionen, die ich noch nicht untersucht habe).

HINWEIS 2: Sie sollten einige Sicherheitsfunktionen integrieren, wenn Sie dies tun möchten. Ich werde ein paar Schecks in meinen endgültigen Code einfügen. Dies war nur um herauszufinden, was funktionieren würde.

1
Sheldon Seale