mit über 40 verschiedenen, zur Auswahl stehenden Inhaltselementen wie zum Beispiel Bildern, Videos, Text und Buttons ausgestattet. Klicken Sie auf den hervorgehobenen Blurb-Button, um ein neu@59 teWoo-Warenkorb-GesamtsummenWoo Checkout-AbrechnungWoo Checkout-DetailsWoo Checkout-InformationenWoo Checkout-ZahlungDas Zahlungsmodul Woo Checkout kann auf einer Seite verwendet werden und kann nicht in der Vorschau a49;֋(T5egenWoo ProduktbeschreibungWoo ProduktgalerieWoo ProduktbilderWoo ProduktinformationenWoo Produkt-MetaWoo ProduktpreisWoo ProduktbewertungWoo ProduktbewertungenWoo ProduktbestandWoo-ProduktregisterkartenWoo Produk5K8$ b8@j^Rɍ A@eses Modul angezeigt wirdSchreiben und ErsetzenAutomatisch schreibenSchreiben Sie mit KISchreiben Sie Freiform- CSS mit dem SchlüsselwortXX-Profil- URLX-Höhe (ex)XINGYelpJaSie hab 69 le Vorlagen, die dieses globale Layout verwenden, getrennt und an Ort und Stelle dupliziert. Möchten Sie wirklich fortfahren?Sie sind dabei, die Voreinstellungen des Layouts zu importieren.Sie dürfen diese Aktion nicht a59cVo]5s enthält viele Verbesserungen der Benutzeroberfläche, die zuvor nur im Visual Builder verfügbar waren. Es verbessert auch die Leistung und nutzt die neueste Builder-Technologie. Sie können in Ihren Divi Theme-Optionen w@5K8$ b8@j^Rɍ A@u machen.Sie verwenden eine veraltete Version von WordPress. Bitte aktualisieren.Sie verwenden eine veraltete Version des Motivs. Die aktuellste Version ist %1$sSie verwenden das %1$s-Plugi79 e verwenden Plugins von Drittanbietern. Versuchen Sie jedes Plugin zu deaktivieren, um festzustellen, ob eines davon einen Konflikt verursacht.Sie können jedem Element Rahmen hinzufügen, deren Erscheinungsbild anpassen un69lE@5altung auswählen, wenn sie sich in ihrem offenen und geschlossenen Zustand befinden. Wählen Sie hier die Hintergrundfarbe für den geschlossenen Zustand.Sie können eindeutige Hintergrundfarben für die Umschaltung auswä5K8$ b8@j^Rɍ A@Zustand.Sie können eindeutige Textfarben für die Umschalttitel auswählen, wenn diese geöffnet und geschlossen sind. Wählen Sie hier die Titelfarbe für den geschlossenen Zustand.Sie kö79 en sind. Wählen Sie hier die Titelfarbe für den geöffneten Zustand.Sie können zwischen einem Vorschaumodus und dem anderen frei hin und her wechseln, während Sie Ihre Seite bearbeiten. Jetzt, wo wir uns eine Vorschau up79edՑ(a5wechseln, indem wir auf den hervorgehobenen Button klicken.Sie können keine globalen Module in globale Sektionen oder Zeilen einfügenSie können keine globalen Zeilen in globale Sektionen einfügenSie können Ihr Layout(6K8$ b8@j^Rɍ A@lt-Test läuft können Layouts nicht importiert oder exportiert werden. Beenden Sie Ihren Split-Test und versuchen Sie es erneut.Sie können kein neues Layout laden, während Ihr Splittest lE c.kPlugin = :pid GROUP BY id, confValue ORDER BY c.nSort', ['pid' => $id] ); return (new Config($path))->load($data); } /** * @param int $id * @return Hook[] */ protected function loadHooks(int $id): array { return \array_map(static function (stdClass $data): Hook { $hook = new Hook(); $hook->setPriority((int)$data->nPriority); $hook->setFile($data->cDateiname); $hook->setID((int)$data->nHook); $hook->setPluginID((int)$data->kPlugin); return $hook; }, $this->db->selectAll('tpluginhook', 'kPlugin', $id)); } /** * @param string $pluginDir * @param int $id * @return Paths */ protected function loadPaths(string $pluginDir, int $id): Paths { $shopURL = Shop::getURL(true) . '/'; $basePath = \PFAD_ROOT . \PLUGIN_DIR . $pluginDir . '/'; $baseURL = $shopURL . \PLUGIN_DIR . $pluginDir . '/'; $paths = new Paths(); $paths->setShopURL($shopURL); $paths->setBaseDir($pluginDir); $paths->setBasePath($basePath); $paths->setVersionedPath($basePath); $paths->setBaseURL($baseURL); $paths->setFrontendPath($basePath . \PFAD_PLUGIN_FRONTEND); $paths->setFrontendURL($baseURL . \PFAD_PLUGIN_FRONTEND); $paths->setAdminPath($basePath . \PFAD_PLUGIN_ADMINMENU); $paths->setAdminURL($baseURL . \PFAD_PLUGIN_ADMINMENU); $paths->setBackendURL(Shop::getAdminURL() . '/' . Route::PLUGIN . '/' . $id); $paths->setBackendRoute('/' . Route::PLUGIN . '/' . $id); $paths->setLicencePath($basePath . \PFAD_PLUGIN_LICENCE); $paths->setUninstaller($basePath . \PFAD_PLUGIN_UNINSTALL); $paths->setPortletsPath($basePath . \PFAD_PLUGIN_PORTLETS); $paths->setPortletsUrl($baseURL . \PFAD_PLUGIN_PORTLETS); $paths->setExportPath($basePath . \PFAD_PLUGIN_ADMINMENU . \PFAD_PLUGIN_EXPORTFORMAT); return $paths; } /** * @param stdClass $data * @return License */ protected function loadLicense(stdClass $data): License { $license = new License(); if (\strlen($data->cLizenzKlasse) > 0 && !\str_starts_with($data->cLizenzKlasse, 'Plugin\\')) { $namespace = $data->cPluginID . '\\' . \trim(\PFAD_PLUGIN_LICENCE, '\\/'); $data->cLizenzKlasse = \sprintf('Plugin\\%s\\%s', $namespace, $data->cLizenzKlasse); } $license->setClass($data->cLizenzKlasse ?? ''); $license->setClassName($data->cLizenzKlasseName ?? ''); $license->setKey($data->cLizenz ?? ''); if (!empty($data->exsID)) { $manager = new Manager($this->db, $this->cache); $exsLicense = $manager->getLicenseByExsID($data->exsID); if ($exsLicense === null) { $exsLicense = new ExpiredExsLicense(); $exsLicense->initFromPluginData($data); } $license->setExsLicense($exsLicense); } return $license; } /** * @param PluginInterface $plugin * @return Cache */ protected function loadCacheData(PluginInterface $plugin): Cache { $cache = new Cache(); $cache->setGroup(\CACHING_GROUP_PLUGIN . '_' . $plugin->getID()); $cache->setID($cache->getGroup() . '_' . $plugin->getMeta()->getVersion()); return $cache; } /** * @param PluginInterface $plugin * @return AdminMenu */ protected function loadAdminMenu(PluginInterface $plugin): AdminMenu { $i = -1; $menus = \array_map(static function (stdClass $menu) use (&$i): stdClass { $menu->name = $menu->cName; $menu->cName = \__($menu->cName); $menu->displayName = $menu->cName; $menu->kPluginAdminMenu = (int)$menu->kPluginAdminMenu; $menu->id = $menu->kPluginAdminMenu; $menu->kPlugin = (int)$menu->kPlugin; $menu->pluginID = $menu->kPlugin; $menu->nSort = (int)$menu->nSort; $menu->sort = $menu->nSort; $menu->nConf = (int)$menu->nConf; $menu->configurable = (bool)$menu->nConf; $menu->file = $menu->cDateiname; $menu->isMarkdown = false; $menu->idx = ++$i; $menu->html = ''; $menu->tpl = ''; return $menu; }, $this->db->selectAll('tpluginadminmenu', 'kPlugin', $plugin->getID(), '*', 'nSort')); $menus = \collect($menus); $this->addMarkdownToAdminMenu($plugin, $menus); $this->addLicenseInfo($plugin, $menus); $adminMenu = new AdminMenu(); $adminMenu->setItems($menus); $plugin->setAdminMenu($adminMenu); return $adminMenu; } /** * @param PluginInterface $plugin * @param Collection $items * @return Collection */ protected function addMarkdownToAdminMenu(PluginInterface $plugin, Collection $items): Collection { $meta = $plugin->getMeta(); /** @var stdClass $lastItem */ $lastItem = $items->last(); $lastIdx = $lastItem->idx ?? -1; if (!empty($meta->getReadmeMD())) { ++$lastIdx; $menu = new stdClass(); $menu->kPluginAdminMenu = -1; $menu->id = 'md-' . $lastIdx; $menu->kPlugin = $plugin->getID(); $menu->pluginID = $menu->kPlugin; $menu->nSort = $items->count() + 1; $menu->sort = $menu->nSort; $menu->name = 'docs'; $menu->cName = \__('Dokumentation'); $menu->displayName = $menu->cName; $menu->cDateiname = $meta->getReadmeMD(); $menu->file = $menu->cDateiname; $menu->idx = $lastIdx; $menu->nConf = 0; $menu->configurable = false; $menu->isMarkdown = true; $menu->tpl = 'tpl_inc/plugin_documentation.tpl'; $menu->html = ''; $items->push($menu); } if (!empty($meta->getLicenseMD())) { ++$lastIdx; $menu = new stdClass(); $menu->kPluginAdminMenu = -1; $menu->id = 'md-' . $lastIdx; $menu->kPlugin = $plugin->getID(); $menu->pluginID = $menu->kPlugin; $menu->nSort = $items->count() + 1; $menu->sort = $menu->nSort; $menu->name = 'license'; $menu->cName = \__('Lizenzvereinbarungen'); $menu->displayName = $menu->cName; $menu->cDateiname = $meta->getLicenseMD(); $menu->file = $menu->cDateiname; $menu->idx = $lastIdx; $menu->nConf = 0; $menu->configurable = false; $menu->isMarkdown = true; $menu->tpl = 'tpl_inc/plugin_license.tpl'; $menu->html = ''; $items->push($menu); } if (!empty($meta->getChangelogMD())) { ++$lastIdx; $menu = new stdClass(); $menu->kPluginAdminMenu = -1; $menu->id = 'md-' . $lastIdx; $menu->kPlugin = $plugin->getID(); $menu->pluginID = $menu->kPlugin; $menu->nSort = $items->count() + 1; $menu->sort = $menu->nSort; $menu->name = 'changelog'; $menu->cName = \__('Changelog'); $menu->displayName = $menu->cName; $menu->cDateiname = $meta->getChangelogMD(); $menu->file = $menu->cDateiname; $menu->idx = $lastIdx; $menu->nConf = 0; $menu->configurable = false; $menu->isMarkdown = true; $menu->tpl = 'tpl_inc/plugin_changelog.tpl'; $menu->html = ''; $items->push($menu); } return $items; } /** * @param PluginInterface $plugin * @param Collection $items * @return Collection */ protected function addLicenseInfo(PluginInterface $plugin, Collection $items): Collection { /** @var stdClass $lastItem */ $lastItem = $items->last(); $lastIdx = $lastItem->idx ?? -1; $license = $plugin->getLicense()->getExsLicense(); if ($license !== null) { ++$lastIdx; $menu = new stdClass(); $menu->data = $license; $menu->kPluginAdminMenu = -1; $menu->id = 'plugin-license-' . $lastIdx; $menu->kPlugin = $plugin->getID(); $menu->pluginID = $menu->kPlugin; $menu->nSort = $items->count() + 1; $menu->sort = $menu->nSort; $menu->name = 'licenseinfo'; $menu->cName = \__('Lizenz'); $menu->displayName = $menu->cName; $menu->cDateiname = ''; $menu->file = ''; $menu->idx = $lastIdx; $menu->nConf = 0; $menu->configurable = false; $menu->isMarkdown = false; $menu->tpl = 'tpl_inc/plugin_license_info.tpl'; $menu->html = ''; $items->push($menu); } return $items; } /** * @param string $basePath * @param Meta $meta * @return AbstractLoader */ protected function loadMarkdownFiles(string $basePath, Meta $meta): self { if ($this->checkFileExistence($basePath . 'README.md')) { $meta->setReadmeMD($basePath . 'README.md'); } if ($this->checkFileExistence($basePath . 'CHANGELOG.md')) { $meta->setChangelogMD($basePath . 'CHANGELOG.md'); } foreach (['license.md', 'License.md', 'LICENSE.md'] as $licenseName) { if ($this->checkFileExistence($basePath . $licenseName)) { $meta->setLicenseMD($basePath . $licenseName); break; } } return $this; } /** * perform a "search for a particular file" only once * * @param string $canonicalFileName - full path of the file to check * @return bool */ protected function checkFileExistence(string $canonicalFileName): bool { static $checked = []; if (!\array_key_exists($canonicalFileName, $checked)) { // only if we did not know that file (in our "remember-array"), we perform this check $checked[$canonicalFileName] = \file_exists($canonicalFileName); // do the actual check } return $checked[$canonicalFileName]; } /** * @param PluginInterface $plugin * @return Widget */ protected function loadWidgets(PluginInterface $plugin): Widget { $data = $this->db->selectAll( 'tadminwidgets', 'kPlugin', $plugin->getID() ); foreach ($data as $item) { $item->namespace = '\\' . $plugin->getPluginID() . '\\'; } return (new Widget())->load($data, $plugin->getPaths()->getAdminPath()); } /** * @param PluginInterface $plugin * @return MailTemplates */ protected function loadMailTemplates(PluginInterface $plugin): MailTemplates { $data = $this->db->getObjects( 'SELECT * FROM temailvorlage JOIN temailvorlagesprache AS loc ON loc.kEmailvorlage = temailvorlage.kEmailvorlage WHERE temailvorlage.kPlugin = :id', ['id' => $plugin->getID()] ); return (new MailTemplates())->load($data); } /** * @param PluginInterface $plugin * @return PaymentMethods */ protected function loadPaymentMethods(PluginInterface $plugin): PaymentMethods { $methods = $this->db->getObjects( 'SELECT * FROM tzahlungsart JOIN tpluginzahlungsartklasse ON tpluginzahlungsartklasse.cModulID = tzahlungsart.cModulId WHERE tzahlungsart.cModulId LIKE :pid', ['pid' => 'kPlugin\_' . $plugin->getID() . '\_%'] ); foreach ($methods as $method) { $moduleID = Helper::getModuleIDByPluginID( $plugin->getID(), $method->cName ); $method->oZahlungsmethodeEinstellung_arr = $this->db->getObjects( "SELECT * FROM tplugineinstellungenconf WHERE cWertName LIKE :val AND cConf = 'Y' ORDER BY nSort", ['val' => $moduleID . '\_%'] ); $method->oZahlungsmethodeSprache_arr = $this->db->selectAll( 'tzahlungsartsprache', 'kZahlungsart', (int)$method->kZahlungsart ); } return (new PaymentMethods())->load($methods, $plugin); } /** * @param PluginInterface $plugin * @return LoggerInterface */ public function loadLogger(PluginInterface $plugin): LoggerInterface { return Shop::Container()->getLogService()->withName($plugin->getPluginID()); } }