Volledige afbeelding uit AFAS in feed zetten (via ImageConnector)
Stel, je hebt een JSON feed opgemaakt in de DataHub: https://data.dh.gladior.com/d/6041a182-8d15-442c-8731-a13d68463f67?outputFormat=json
Wat je dan kunt doen, is neem het veld: ImageID op in de feed.
Dan kun je vervolgens naar: https://data.dh.gladior.com/d/6041a182-8d15-442c-8731-a13d68463f67/profit-image/18597
gaan en dan haalt hij de volledige resolute van de afbeelding op.
Je hoeft dus alleen de url van de feed het ?outputFormat=json te vervangen door /profit-image/id_van_img en dan haalt hij de base64 versie van de volledige resolutie terug.
Let op: afbeeldingen mogen niet groter zijn dan 6MB (anders kan de DataHub de afbeelding niet teruggeven)
Plaats in je .htaccess:
SecRequestBodyNoFilesLimit 131072000
SecRequestBodyLimit 131072000
Indien dit niet werkt, kun je het ook op server niveau toepassen.
1. Ga naar beheer.triplehosting.nl:2222 en login als admin
2. Ga naar Custom HTTPD Configurations
3. Zoek de user op
4. Voeg toe in het bovenste tekstvak wat hierboven in de staat
Filtering van Smart View plugin om te filteren met exacte match in plaats van contains / indexOf
Plaats deze snippet in je script.js (na DOMContentLoaded) om de filtering te overschrijven met een exacte match in plaats van een contains.
Dit is nodig indien je filteropties hebt als (IT en Facilitair), want bij het aanvinken van IT vindt hij ook Facilitair) (facilitair.contains(it))
JAVASCRIPT Code
javascript
// Overschrijf de checkFilter methode van een 'contains' check naar 'exacte match'
QuickFilter.prototype.checkFilter = function(t, e) {
var l;
if (!e || "" === e) return !1;
let i = null == (l = this._allFilters[t]) ? void 0 : l.toString().toLowerCase();
if (i) {
let s = i.split(","),
n = e.toLowerCase().split(",");
return s.some((filterValue) => n.some((dataValue) => filterValue.trim() === dataValue.trim()));
}
return !1;
};
Javascript toevoegen in Magento (Checkout) met PHP variabelen
Om PHP variabelen te gebruiken in JS in de Magento Checkout (of elders in je shop), kun je het beste zo de code organiseren.
PHP Code
php
Plaats dit in je .phtml file die je via XML inlaadt in de checkout
om de php variablen op te halen -> dit is de JS file waar het gebruikt word -> Gladior_CurrencySymbol/js/gladior-currency
/**
* Gladior Currency Symbol Config
* Outputs configuration as JavaScript variable
*
* @var $block \Gladior\CurrencySymbol\Block\JsConfig
*/
?>
<?php if ($block->isEnabled() && $block->getCustomSymbol()): ?>
<script type="text/x-magento-init">
{
"*": {
"Gladior_CurrencySymbol/js/gladior-currency": {
"enabled": true,
"currencyCode": "<?php echo $block->escapeJs($block->getCurrencyCode()); ?>",
"defaultSymbol": "<?php echo $block->escapeJs($block->getDefaultSymbol()); ?>",
"customSymbol": "<?php echo $block->escapeJs($block->getCustomSymbol()); ?>"
}
}
}
</script>
<?php endif; ?>
JAVASCRIPT Code
javascript
define(['jquery'], function ($) {
'use strict';
return function (config) {
if (!config || !config.enabled || !config.customSymbol) return;config
console.log(config.enabled);
}
}
[InvalidArgumentException] Could not find a matching version of package
Krijg je een foutmelding als:
masterfire@moc7:~/masterfire.nl$ php8.1 /usr/local/bin/composer require mageplaza/magento-2-italian-language-pack:dev-master
[InvalidArgumentException]
Could not find a matching version of package mageplaza/magento-2-italian-language-pack. Check the package spelling, your version constraint and that the packag
e is available in a stability which matches your minimum-stability (dev).
Dan moet je de update gaan uitvoeren met de nieuwste versie van de composer:
Download hier en plaats in je /root folder als composer.phar
https://getcomposer.org/download/
Voeg de eerste stuk snippet toe aan app/code/Gladior/Menu/Block/Menu.php
Vervang de loop van de submenu's in het menu door de tweede snippet in app/code/Gladior/Menu/frontend/templates/main-menu.phtml
Instellen Redis caching voor een Magento installatie
Als je voor een Magento installatie Redis cache hebt ingesteld, moet je het volgende controleren:
php bin/magento config:show system/full_page_cache/caching_application
Geeft dit 1 terug: Magento gebruikt Redis caching nog niet, omdat de database instelling nog op "1" (Built-in) staat.
Oplossing:
Je moet de full page cache instelling wijzigen naar Redis. Dit kun je via de command line doen:
php bin/magento config:set system/full_page_cache/caching_application 2
php bin/magento cache:flush
Vanaf nu gebruikt Magento je Redis configuratie voor full page cache in plaats van het bestandssysteem!
Cannot process definition to array for type tinytext
Er zijn twee verschillende foutmeldingen:
1. "Cannot process definition to array for type enum / tinytext"
Ga naar de database tabel: wp_icl_translation_status
Zoek entry: review_status
'enum' moet omgezet worden naar 'int'
=============
2. "Cannot process definition to array for type tinytext"
Ga naar database tabel: wp_comments (Indexen)
Selecteer de volgende Indexen: comment_author, comment_date, comment_date_gmt
Verander de volgende waarden:
comment_author -> VARCHAR (lengte: 100)
comment_date -> CURRENT_TIMESTAMP
comment_date_gmt -> CURRENT_TIMESTAMP
In het geval van een Magento X Wordpress koppeling, moet je als volgt een kopie maken:
1. Koppel de juiste database in je wp-config.php aanpassen
2. Zorg er voor dat de 4 store URLS van Magento in core_config eindigen op /shop/
3. Zorg er voor dat de 2 URL's van Wordpress niet eindigen op /shop/
4. Het pad dat je M2I plugin moet invullen is /home/gebruiker/store/shop/
In je rootfolder, ga een leven omhoog:
cd ..
totdat je met 'ls -a' de file .bashrc ziet staan.
Deze open je met:
nano .bashrc
Vul hier in:
alias php="php8.1"
Ctrl + X om op te slaan
Druk op Enter
In je .function.php plak je de content van de PHP snippet.
Maak een .js file aan: /scripts/the_ajax_script.js en plak hierin de content van de JavaScript snippet.
Magento WordPress integratie – Widgets uitschakelen in WYSIWYG
Als je Wordpress erg traag wordt van alle Widgets die hij wil inladen vanuit
Voeg de snippet toe in je functions.php , om er voor te zorgen dat de Widgets niet wordt ingeladen. Zorgt namelijk voor enorme snelheidsverlies bij veel categories.
PHP Code
php
add_action('init', function () {
// Loop through all callbacks for media_buttons
global $wp_filter;
if ( isset( $wp_filter['media_buttons'] ) ) {
foreach ( $wp_filter['media_buttons']->callbacks as $priority => $callbacks ) {
foreach ( $callbacks as $id => $callback ) {
// Check if the callback belongs to M2I_Editor_Button
if (
is_array($callback['function']) &&
is_object($callback['function'][0]) &&
get_class($callback['function'][0]) === 'M2I_Editor_Button'
) {
unset($wp_filter['media_buttons']->callbacks[$priority][$id]);
}
}
}
}
});
Zorg dat je een HTML structuur hebt zoals in de Snippet:
<div class="your_class_name">
<div class="g_card">1</div>
....
</div>
Nu kun je eenvoudig de responsiveness aangeven met:
.g_slide(3); Hierin in 3 natuurlijk de perPage.
Heb je veel last van verkeer van een crawl bot, zoals bijv.
18-214-124-6.crawl.amazonbot.amazon
44-208-193-63.crawl.amazonbot.amazon
3-213-85-234.crawl.amazonbot.amazon
23-21-175-228.crawl.amazonbot.amazon
Sluit deze bot dan uit via .htaccess
# Blokkeer de Amazonbot
RewriteCond %{HTTP_USER_AGENT} Amazonbot [NC]
RewriteRule .* - [F,L]
Met de volgende commands kun je de diverse zaken omtrend Magento cronjobs analyseren.
> ps aux
Toont alle actieve processen op de server — dus alles wat op dat moment draait: PHP-scripts, cronjobs, system services (zoals Redis, MySQL), enzovoort.
> kill -id van crontaak-
Vastgelopen taken kun je killen middels:
> php bin/magento indexer:status
Geeft weer of de Magento-indexen up-to-date zijn, of dat er nog herindexatie nodig is.
> crontab -l
Toont welke cronjobs zijn ingesteld voor de gebruiker waarmee je bent ingelogd.
Site Health / Sitediagnose verbergen voor gebruikers zonder @gladior.com account
PHP Code
php
function hide_site_health_for_specific_users() {
// Definieer de string die in het emailadres moet voorkomen
$email_string = '@gladior.com'; // Pas dit aan naar de gewenste string
// Controleer of de gebruiker is ingelogd
if (!is_user_logged_in()) {
return;
}
// Haal de huidige gebruiker op
$current_user = wp_get_current_user();
$user_email = $current_user->user_email;
// Controleer of de string voorkomt in het emailadres
if (strpos($user_email, $email_string) === false) {
// Verwijder de Site Health menu items
remove_submenu_page('tools.php', 'site-health.php');
// Blokkeer directe toegang tot de pagina
add_action('current_screen', 'block_site_health_access');
}
}
/**
* Blokkeert directe toegang tot de Site Health pagina
*/
function block_site_health_access() {
$screen = get_current_screen();
if ($screen && $screen->id === 'site-health') {
// Redirect naar dashboard met foutmelding
wp_redirect(admin_url('index.php?site-health-blocked=1'));
exit;
}
}
function site_health_blocked_notice() {
if (isset($_GET['site-health-blocked'])) {
echo '<div class="notice notice-error is-dismissible">
<p><strong>Toegang geweigerd:</strong> U heeft geen toegang tot de Site Health pagina.</p>
</div>';
}
}
// Hook de functies aan de juiste WordPress acties
add_action('admin_menu', 'hide_site_health_for_specific_users', 999);
add_action('admin_notices', 'site_health_blocked_notice');
function hide_site_health_by_capability() {
// Alleen administrators kunnen Site Health zien
if (!current_user_can('manage_options')) {
remove_submenu_page('tools.php', 'site-health.php');
add_action('current_screen', 'block_site_health_access');
}
}
add_action('admin_menu', 'hide_site_health_by_capability', 999);
function checkForElement() {
const element = document.querySelector('#element_id .element_class');
if (element) {
console.log('found');
} else {
setTimeout(checkForElement, 100); // Controleer opnieuw na 100 milliseconden
}
}
// Start de controle
checkForElement();
Magento verwijder links uit Klantaccount (Downloads en Nieuwsbriefabbonementen)
Voeg toe aan je thema:
/webshop.nl/app/design/frontend/Gladior/GladiorTheme/Magento_Customer/layout/customer_account.xml
Met de inhoud als volgt:
customer/account/logoutLog out
Installeer deze module: https://github.com/experius/Magento-2-Module-Experius-WysiwygDownloads
composer require experius/module-wysiwygdownloads
> indien problemen met de dependencies, gebruikt --ignore-platform-reqs
composer require experius/module-wysiwygdownloads --ignore-platform-reqs
function initialsHelper(element) {
console.log(element);
const initials = element ? document.getElementById(element) : document.getElementById("voorletters");
const char = [
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
];
// Bijhouden van de vorige waarde om backspace/delete te detecteren
let previousValue = '';
let isBackspacing = false;
// Directe key event listeners voor backspace/delete detectie
initials?.addEventListener("keydown", (e) => {
// Detecteer backspace (8) of delete (46) toetsen
if (e.keyCode === 8 || e.keyCode === 46) {
isBackspacing = true;
}
});
initials?.addEventListener("keyup", (e) => {
// Reset de backspace vlag na keyup
if (e.keyCode === 8 || e.keyCode === 46) {
isBackspacing = false;
}
});
// Helper functie om initialen juist te formatteren
const formatInitials = () => {
// Als gebruiker aan het backspacen is, niets doen
if (isBackspacing) {
return;
}
// Als de waarde korter is geworden, waarschijnlijk door backspace
if (initials.value.length < previousValue.length) {
previousValue = initials.value;
return;
}
// Verwijder dubbele punten (..)
let value = initials.value.replace(/\.{2,}/g, '.');
// Verwijder spaties
value = value.replace(/\s/g, '');
// Zorg ervoor dat elke letter wordt gevolgd door één punt
let formatted = '';
for (let i = 0; i < value.length; i++) {
if (char.includes(value[i])) {
// Als het een letter is, voeg hoofdletter toe
formatted += value[i].toUpperCase();
// Voeg een punt toe als het volgende karakter niet al een punt is
if (i + 1 >= value.length || value[i + 1] !== '.') {
formatted += '.';
}
} else if (value[i] === '.' && formatted.length > 0 && formatted[formatted.length - 1] !== '.') {
// Voeg punt toe als laatste karakter nog geen punt is
formatted += '.';
}
}
// Update de waarde alleen als het echt veranderd is
if (formatted !== initials.value) {
initials.value = formatted;
}
previousValue = initials.value;
};
// Input event handler
const handleInput = () => {
// Wacht een kort moment voor het formatteren
setTimeout(formatInitials, 10);
};
// Gebruik input event voor normale invoer
initials?.addEventListener("input", handleInput);
// Voor oudere browsers of specifieke apparaten
initials?.addEventListener("change", handleInput);
// Bewaar initiële waarde
if (initials) {
previousValue = initials.value;
}
}
Wanneer een upgrade niet werkt in een Magento X Wordpress omgeving die vertaald wordt door PolyLang krijg je de voglende melding:
"Cannot process definition to array for type enum / tinytext"
Ga naar de database tabel: wp_icl_translation_status
Zoek entry: review_status
'enum' moet omgezet worden naar 'int'
=============
Cannot process definition to array for type tinytext
Ga naar database tabel: wp_comments (Indexen)
Selecteer de volgende Indexen:
comment_author, comment_date, comment_date_gmt
Verander de volgende waarden:
comment_author -> VARCHAR (lengte: 100)
comment_date -> CURRENT_TIMESTAMP
comment_date_gmt -> CURRENT_TIMESTAMP
Staat een Magento in productie modus:
Modus checken:
php bin/magento deploy:mode:show
Na een wijziging geen ca:cl, maar:
rm -rf var/view_preprocessed/* rm -rf pub/static/frontend/*
php bin/magento cache:clean
php bin/magento setup:static-content:deploy -t Gladior/Avinter -f -s
Om ook de admin te verversen:
php bin/magento setup:static-content:deploy en_US nl_NL
Eerst token verkrijgen via POST
https://webshop.stulz-benelux.com/rest/V1/integration/admin/token
In Header tab:
Content-Type : application/json
In Body tab:
selecteer 'raw'
{
"username" : ""
"password" : ""
}
Send.
Je krijgt nu een token.
======
Maak een nieuwe GET - request aan
In Authorization > Selecteer Bearer Token
Viel hier de zojuist verkregen token in. (zonder aanhalingstekens)
https://webshop.stulz-benelux.com/rest/default/V1/orders/1 of
https://webshop.stulz-benelux.com/rest/default/V1/customers/1
JavaScript inline inladen in module.
https://gitlab.indenty.nl/magento/OciPunchout/-/commit/b1a965af837ea9586e6fccb42b12f366f08ae91f
====================
In je .phtml bestand:
Hetgeen in de JS Snippet
====================
Dan in je require-config.js
var config = {
map: {
'*': {
'oci_post': 'Gladior_OciPunchout/js/post'
}
}
};
====================
En dan in je module:
define([] , function ($) {
return function () {
document.getElementById("oci-submitbutton").style.display="none";
document.getElementById("oci-checkout").submit()
};
});
Als server er uit vlieg, kun je kijken naar een IP adres met heel veel connecties.
0. Zet httpd uit onder > Service Monitor
1. Message System
2. Kijk naar een ticket met titel 'Warning: The system load average is 47.31'
3. Kijk naar een IP adres met veel connecties
4. Wil je hem blokkeren?
5. Ga in Direct Admin naar > Extra Featues > ConfigServer Security & Firewall
6. Quick Deny > Vul hier het IP adres in met reden
7. Start nu pas de httpd weer op (anders werkt de block niet)
Email check regex
OUD: pattern="[^@\s]+@[^@\s]+\.[^@\s]{2,}
Hij checkt nu op minimaal 2 karakters achter de .
dus a@a.a is fout
maar a@a.aa is goed
=== UPDATE 12-9-2023 ===
pattern="[A-Za-z0-9!#$&.+-=_]+@[A-Za-z0-9.-]+\.[^@\s]{2,}"
Hier wordt extra gecheckt op dat het stuk voor het @-teken enkel de karakters !#$&.+-=_ bevat.
Een ~ wordt bijv. niet geaccepteerd door AFAS
Als een normale composer update niet werkt, kun je via een hogere PHP versie updaten.
Dit doe je zo:
which composer
- /usr/local/bin/composer
En dan:
php8.1 /usr/local/bin/composer update amasty/module-abandoned-cart-email-subscription-package