Hallo zusammen,
ich möchte das Thema erneut aufgreifen, aber jetzt nicht im Zusammenhang mit dem {Sourcerer} Plugin sondern Allgemein. Gehen wir davon aus, dass wir einen »on("click")« Event Handler mit jQuery in der Seite angewendet haben. Ich mach hierzu mal ein kurzes Beispiel:
<div class="selector" data-id="2">Dieses Div Element wird überwacht</div>
mit folgendem JS Code können wir das jetzt überwachen und auf ein Click-Event warten:
(function($)
{
$(document).ready(function()
{
$(".selector").on("click", function()
{
id = $(this).attr("data-id");
alert(id);
});
});
})(jQuery);
Alles anzeigen
Soweit ist das ja alles recht einfach gehalten. Jetzt kommt aber das, was mir noch nicht klar erscheint. Wenn wir jetzt eine Abfrage mit AJAX machen möchten, dann rufen wir ja eine PHP Datei auf, in der wir die Sachen abarbeiten und die Daten dann zurück zum JS schicken. Wenn wir allerdings über AJAX die PHP Datei aufrufen, dann können wir ja mit
defined('_JEXEC') or die;
nicht aufwarten, da hier '_JEXEC' nicht definiert ist. Daher meine Frage, wie man das Allgemein umsetzt? Lässt man die Prüfung ob '_JEXEC' definiert wurde einfach weg? Dann funktioniert alles aber man hat halt ein Sicherheits-Problem soweit ich das beurteilen kann. In meinem Fall wahrscheinlich nicht der Rede Wert, aber trotzdem interessiert mich das gerade schon etwas.
Kann ich den über AJAX auch irgendwelche Teil-Modul-PHP Files erreichen oder wie kann ich das sicher umsetzen? Als Anregung mal das obere Javascript etwas erweitert:
(function($)
{
$(document).ready(function()
{
$(".increment").on("click", function()
{
id = $(this).attr("data-id");
$.ajax(
{
url: "/modules/mod_downloader/increment.php",
data: {id: id},
type: "POST",
success: function(data)
{
console.log(data);
if (data != 'Success')
{
console.log('Failed to increment');
}
else
{
document.getElementById("file-" + id).innerHTML = "Foobar";
}
}
});
});
});
})(jQuery);
Alles anzeigen
Die derzeit ge-called'te PHP Datei sieht wie folgt aus:
<?php
echo "Yep";
defined('_JEXEC') or die();
echo "Success";
Und natürlich wird hier nur das "Yep" zurückgegeben, denn bis zum »Success« komm ich ja nicht.
Das Problem hier ist auch, dass ich wahrscheinlich gar nicht auf die Joomla-Sachen zurückgreifen kann wie bspw. JFactory:: etc.