Neu AjaxCall

  • Wichtiger Hinweis Liebe Kunden, solltet Ihr den DATEV Rechnungsdatenservice 2.0 nutzen, dann müsst Ihr bis zum 30.06.2024 JTL-Wawi 1.9 installieren. Danach wird die Schnittstelle für ältere Versionen nicht mehr unterstützt.

crossover

Neues Mitglied
15. April 2024
5
0
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:

  • adminmenu
    • templates
      • info.tpl
    • info.php
  • frontend
  • local
  • Migrations
  • src
  • Bootstrap.php
  • info.xml
  • README.md
info.tpl:
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);
    }

  }
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.735
1.621
Berlin
Das machst du eigentlich über den Hook HOOK_IO_HANDLE_REQUEST_ADMIN
der ist leider nicht in Dokumentiert, macht aber das gleiche wie HOOK_IO_HANDLE_REQUEST , nur das er für den admin Bereich ist.

Du steuerst dann jeweils im admin, die admin/io.php und im Frontend die /io.php an.

Das du die Datei info.php direkt ansteuerst ist eigentlich nicht vorgesehen.