Hallo,
ich bin relativ neu in der JTL-Welt und gerade dabei ein Plugin zu schreiben. Im Adminmenu habe ich verschiedene Input Felder und einen Button. Meine Frage lautet, wie ich dort einen AjaxCall ausführe/schreibe damit die Werte der Felder an die PHP-Datei übnergeben werden und ich diese dann in die Datenbank schreiben kann. In der info.tpl habe ich meine Felder und würde gerne diese dann gerne an die info.php übergeben. Folgendes sind meine Dateien und Ordnerstruktur:
info.php:
info.xml
ich bin relativ neu in der JTL-Welt und gerade dabei ein Plugin zu schreiben. Im Adminmenu habe ich verschiedene Input Felder und einen Button. Meine Frage lautet, wie ich dort einen AjaxCall ausführe/schreibe damit die Werte der Felder an die PHP-Datei übnergeben werden und ich diese dann in die Datenbank schreiben kann. In der info.tpl habe ich meine Felder und würde gerne diese dann gerne an die info.php übergeben. Folgendes sind meine Dateien und Ordnerstruktur:
- adminmenu
- templates
- info.tpl
- info.php
- templates
- frontend
- local
- Migrations
- src
- Bootstrap.php
- info.xml
- README.md
Code:
{inline_script}
<script>
$('#button-create-offer').on('click', function(){
var category = $('#select-cat :selected').text();
var job = $('#job-input').val();
var pdf = $('#pdf-input').val();
console.log(category);
console.log(job);
console.log(pdf);
$.ajax({
url: 'https://localhost/test/shop-v5-2-4/plugins/xxx/adminmenu/info.php',
type: 'post',
data: { meineAjaxVariable: 'Hello world!' },
success: function(response) {
//console.log('Daten:', response);
console.log('Success');
},
error: function(error) {
console.log('Fehler:', error);
}
});
});
</script>
{/inline_script}
<div class="row mb-3">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Kategorie</span>
</div>
<select class="custom-select" id="select-cat" aria-label="Example select with button addon">
<option value="1">Verwaltung</option>
<option value="2">Qualitätsmanagement/Qualitätssicherung</option>
<option value="3">Lager & Logistik</option>
</select>
<div class="input-group-prepend">
<span class="input-group-text">Stellenangebot</span>
</div>
<input type="text" id="job-input" aria-label="Last name" class="form-control">
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupFileAddon01">PDF</span>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" id="pdf-input" aria-describedby="inputGroupFileAddon01" accept="application/pdf">
<label class="custom-file-label" for="inputGroupFile01">Datei auswählen</label>
</div>
</div>
</div>
</div>
<div class="row mb-3">
<div class="col">
<button class="btn btn-primary" type="button" id="button-create-offer"><i class="fa fa-plus" aria-hidden="true"></i> Hinzufügen</button>
</div>
</div>
info.php:
PHP:
<?php
declare(strict_types=1);
use JTL\DB\ReturnType;
use JTL\Shop;
global $plugin;
$joboffers = Shop::Container()->getDB()->query('SELECT * FROM joboffers', ReturnType::ARRAY_OF_OBJECTS);
$smarty->assign('joboffers', $joboffers);
$smarty->display($plugin->getPaths()->getAdminPath() . 'templates/info.tpl');
dump(dirname(__FILE__));
if (isset($_POST['meineAjaxVariable'])) {
// Ihre Logik hier
//echo json_encode(['success' => true]);
var_dump($_POST['meineAjaxVariable']);
$sql = "INSERT INTO joboffers (beschreibung, kategorie, count, active, pdf) VALUES (?, ?, ?, ?, ?)";
$params = ['Wert1', 'Wert2', 'Wert3', 'Wert4', 'Wert5'];
Shop::Container()->getDB()->queryPrepared($sql, $params, ReturnType::DEFAULT_TYPE);
}
info.xml
XML:
<?xml version="1.0" encoding="utf-8"?>
<jtlshopplugin>
<Name>XXX</Name>
<Description>XXX</Description>
<Author>XXX</Author>
<URL>https://www.XXX.de</URL>
<PluginID>XXX</PluginID>
<XMLVersion>100</XMLVersion>
<MinShopVersion>5.0.0</MinShopVersion>
<Icon></Icon>
<Version>1.0.0</Version>
<CreateDate>2024-05-03</CreateDate>
<Install>
<FlushTags>CACHING_GROUP_CATEGORY, CACHING_GROUP_ARTICLE</FlushTags>
<FrontendLink>
<Link>
<Filename>jobofferform.php</Filename>
<Name>JTL Fullscreen Example Page</Name>
<FullscreenTemplate>jobofferform.tpl</FullscreenTemplate>
<VisibleAfterLogin>N</VisibleAfterLogin>
<PrintButton>N</PrintButton>
<SSL>2</SSL>
<LinkGroup>Fuss</LinkGroup>
</Link>
</FrontendLink>
<Adminmenu>
<Customlink sort="1">
<Name>Info</Name>
<Filename>info.php</Filename>
</Customlink>
</Adminmenu>
</Install>
</jtlshopplugin>
PHP:
<?php declare(strict_types =1);
/**
* @package Plugin\xxx
* @author xxx
*/
namespace Plugin\xxx;
use JTL\Events\Dispatcher;
use JTL\Plugin\Bootstrapper;
use JTL\Smarty\JTLSmarty;
use JTL\Shop;
/**
* Class Bootstrap
*@package Plugin\xxx
*/
class Bootstrap extends Bootstrapper{
public function boot(Dispatcher $dispatcher): void
{
/*if(!empty($_REQUEST["Artikeldirektlink"])) {
$result = Shop::Container()->getDB()->select('tartikel', 'cArtNr', $_REQUEST["Artikeldirektlink"]);
if($result->kArtikel) {
header("Location: ?a=".$result->kArtikel."#tab-votes");
exit;
}
}*/
}
public function renderAdminMenuTab(string $tabName, int $menuID, JTLSmarty $smarty): string
{
$plugin = $this->getPlugin();
$backendURL = \method_exists($plugin->getPaths(), 'getBackendURL')
? $plugin->getPaths()->getBackendURL()
: Shop::getAdminURL() . '/plugin.php?kPlugin=' . $plugin->getID();
$smarty->assign('menuID', $menuID)
->assign('posted', null);
$template = 'info.tpl';
return $smarty->assign('backendURL', $backendURL)->fetch($this->getPlugin()->getPaths()->getAdminPath() . '/templates/' . $template);
}
}