Если у Вас установлено несколько версий Питона и нужно по умолчанию выбрать для использования какую то определенную версию, нужно сделать следующее: Открыть командную строку и ввести [crayon-6a6bc916012ea033282510/] отобразиться установленные версии python затем выбрать допустим версию 3.10 по умолчанию [crayon-6a6bc916012f4067546868/] получиться как то так […] Сообщение Изменить версию Python на компьютере появились сначала на ТеМаТуТ.
Если у Вас установлено несколько версий Питона и нужно по умолчанию выбрать для использования какую то определенную версию, нужно сделать следующее: Открыть командную строку и ввести py --list отобразиться установленные версии python <img class="img-responsive alignleft wp-image-813 size-full" src="https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132041.png" alt="" width="363" height="94" srcset="https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132041.png 363w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132041-300x78.png 300w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132041-250x65.png 250w" sizes="(max-width: 363px) 100vw, 363px" /> затем выбрать допустим версию 3.10 по умолчанию py -3.10 -m pip install --upgrade pip получиться как то так <img class="img-responsive alignleft wp-image-814 size-full" src="https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655.png" alt="" width="1101" height="467" srcset="https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655.png 1101w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655-300x127.png 300w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655-1024x434.png 1024w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655-768x326.png 768w, https://tematut.ru/wp-content/uploads/2026/06/Snimok-ekrana-2026-06-14-132655-250x106.png 250w" sizes="(max-width: 1101px) 100vw, 1101px" /> проверяем установленную версию py —list и вывод: Python 3.10.6 Сообщение Изменить версию Python на компьютере появились сначала на ТеМаТуТ.
Как массово изменить формат изображения в WordPress Wocommerce?
При добавлении товаров в woocommerce вручную иногда контент менеджеры вставляют не оптимизированные картинки, а иногда ну прям совсем уж большие ненужные PNG с прозрачным фоном которые занимают десятки мегабайт. Было решено сделать полу-автоматическую обработку изображений и изменение информации о этих изображений в базе. Первым делом делаем внутри скрипта подключение к базе данных и выбор нужных […] Сообщение Как массово изменить формат изображения в WordPress Wocommerce? появились сначала на ТеМаТуТ.
При добавлении товаров в woocommerce вручную иногда контент менеджеры вставляют не оптимизированные картинки, а иногда ну прям совсем уж большие ненужные PNG с прозрачным фоном которые занимают десятки мегабайт. Было решено сделать полу-автоматическую обработку изображений и изменение информации о этих изображений в базе. Первым делом делаем внутри скрипта подключение к базе данных и выбор нужных данных для последующей обработки изображений. В моем случае я выбрал только товары у которых изображения в формате PNG Ищем в базе все записи по соответствующим условиям и выбираем путь к файлу. Затем ищем этот файл физически на сервере, открываем его — преобразуем и сохраняем его в JPG, оригинал PNG решил удалять. После изменении этих файлов, нужно изменить значения в самой базе данных. В скрипте выводятся на экран запросы с перечнем ID прикрепленных файлов. Вставляем или вручную или можно прям в скрипте сделать выполнение запросов UPDATE — и картинки начинают корректно отображаться на сайте. Набросок скрипта all_image_png_to_jpg_wordpress_wocommerce.php <?php $link = mysqli_connect("host", "username", "password", "database", "port", "socket"); //mysqli_set_charset($link, "utf8mb4"); // Выбирайс все значения прикрепленных файлов только png именно к продуктам $sql = "SELECT * FROM `wp_posts` WHERE `post_type`='attachment' AND `post_mime_type`='image/png' AND `post_parent` IN (SELECT ID FROM `wp_posts` WHERE `post_type`='product')"; $result = $link->query($sql); echo "Vibor image png for product: "; if ($result->num_rows > 0) { $i=1; $spisok_ids = ""; while ($row = $result->fetch_assoc()) { $url_image = preg_replace('#^.+://[^/]+#', '', $row['guid']); $url_image2 = str_replace('/wp-content', '', $url_image); echo $i." -|- ".$row['ID']." -|- ".$row['post_title']." -|- ".$row['post_type']." -|- ".$row['post_date']." -|- ".$row['guid']." |||| ".$url_image."-".$url_image2." "; $filePath = dirname(__FILE__).$url_image2; $image = imagecreatefrompng($filePath); $bg = imagecreatetruecolor(imagesx($image), imagesy($image)); imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255)); imagealphablending($bg, TRUE); imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)); //imagedestroy($image); $quality = 100; // 0 = low / smaller file, 100 = better / bigger file $newParh = dirname($filePath); $fileName = basename($filePath, "." . "png"); imagejpeg($bg, $newParh.DIRECTORY_SEPARATOR.$fileName.".jpg", $quality); //imagedestroy($bg); unlink($filePath); if ($i==1){ $spisok_ids .= $row['ID']; }else{ $spisok_ids .= ",".$row['ID']; } $i++; } echo " IDS-image png product: ".$spisok_ids; } echo " "; // Вывод генерированных запросов в базу для обновления картинок, можно вручную или внутри скрипта сделать выполнение. echo "UPDATE `wp_posts` SET `post_mime_type`='image/jpg', `guid`=REPLACE(`guid`, '.png', '.jpg') WHERE `post_type`='attachment' and `post_mime_type`='image/png' AND `id` IN ($spisok_ids);"; echo " "; echo " "; echo "UPDATE `wp_postmeta` SET `meta_value`=REPLACE(`meta_value`, '.png', '.jpg') WHERE `meta_key`='_wp_attachment_metadata' AND `post_id` IN ($spisok_ids);"; echo " "; echo " "; echo "UPDATE `wp_postmeta` SET `meta_value`=REPLACE(`meta_value`, '.png', '.jpg') WHERE `meta_key`='_wp_attached_file' AND `post_id` IN ($spisok_ids);"; echo " "; ?> После выполнения скрипта — все выбранные PNG преобразуются в JPG физически, старые файлы удаляются, база с информацией обновляется. И картинки становятся намного меньше, тем самым и сайт быстрей грузиться да и места меньше занимает. Сообщение Как массово изменить формат изображения в WordPress Wocommerce? появились сначала на ТеМаТуТ.
Показать нужный контент в период времени PHP
В преддверии Новогодних праздников задумался а не автоматизировать хотя бы как то примитивно вывод сообщений с поздравлениями, чтобы с какого то определенного числа по какое то число выводилась картинка или текст. Вот небольшой php код для определения текущей даты и сравнение с началом старта и концом праздника. [crayon-6a6bc91601ca2798413990/] Сообщение Показать нужный контент в период времени PHP появились сначала на ТеМаТуТ.
В преддверии Новогодних праздников задумался а не автоматизировать хотя бы как то примитивно вывод сообщений с поздравлениями, чтобы с какого то определенного числа по какое то число выводилась картинка или текст. Вот небольшой php код для определения текущей даты и сравнение с началом старта и концом праздника. <?php $year_now = date('Y-m-d'); $year_old = date("Y",strtotime($year_now)-60*60*24*30); // чтобы правильно отображался год минусуем от текущей даты 30 дней. if($year_old != date('Y')) { $god = $year_old; }else{ $god = date('Y'); } $datestart = $god."-12-20"; // дата начала показа новогодних праздников $datefinish = date("Y-m-d",strtotime($datestart)+60*60*24*30);// дата окончания новогодних праздников (к дате начала прибавляем 30 дней) if($year_now <= $datefinish) // Тут проверяем если текущая дата меньше финишной то показываем блок { echo "С новым Годом! "; echo ' '; } $current_time = date("Y-m-d"); // текущий год-месяц-день $current_time_str = strtotime($current_time); // перевод в строчный формат $year = date("Y"); // переменная год для всех остальных праздников в году $start_23=strtotime($year.'-02-19'); $end_23=strtotime($year.'-02-28'); if ($current_time_str>=$start_23 && $current_time_str<=$end_23){ echo "23 февраля "; echo ' '; } $start_8M=strtotime($year.'-03-01'); $end_8M=strtotime($year.'-03-15'); if ($current_time_str>=$start_8M && $current_time_str<=$end_8M){ echo "8 марта "; echo ' '; } $start_1M=strtotime($year.'-04-28'); $end_1M=strtotime($year.'-05-03'); if ($current_time_str>=$start_1M && $current_time_str<=$end_1M){ echo "мир труд май "; echo ' '; } $start_9M=strtotime($year.'-05-04'); $end_9M=strtotime($year.'-05-14'); if ($current_time_str>=$start_9M && $current_time_str<=$end_9M){ echo "9 мая "; echo ' '; } $start_DR=strtotime($year.'-06-08'); $end_DR=strtotime($year.'-06-15'); if ($current_time_str>=$start_DR && $current_time_str<=$end_DR){ echo "День России "; echo ' '; } ?> Сообщение Показать нужный контент в период времени PHP появились сначала на ТеМаТуТ.
Как то вечером на одном из сайтов где множество товаров и большой выбор фильтров — пошла сильная нагрузка на ресурсы сервера. Немного изучив кто и что это, пришел к следующему выводу. Встречался с подобными нагрузками и переборами всего, что есть на сайте где то в 2017 и 2020 году, так, что небольшой скриптик остался где-то. […] Сообщение Защита от спам ботов и DDOS атак появились сначала на ТеМаТуТ.
Как то вечером на одном из сайтов где множество товаров и большой выбор фильтров — пошла сильная нагрузка на ресурсы сервера. Немного изучив кто и что это, пришел к следующему выводу. Встречался с подобными нагрузками и переборами всего, что есть на сайте где то в 2017 и 2020 году, так, что небольшой скриптик остался где-то. Проблема в следующем: Хостинг объявил, что нагрузка на базу данных выросла примерно в 100 раз. Сайт отказывался работать и уходил в Ошибку 503 В поддержке сказали что очень медленные запросы в базу данных и то что они ничего сделать не могут. Решено было искать причину, так как до этого все работало норм и нагрузка не превышала лимиты даже при большом трафике. Что было сделано: Первым делом зашел в админку сайта и перевел его в режим обслуживания, ошибки пропали так как все кроме админа видели заглушки страниц. А у администратора все страницы открывались и работали в штатном режиме. Далее зашел через putty на сервер и решил посмотреть что да как: Узнать какие процессы и кто их создает на сервере: ps aux Увидел что большинство самых трудоресурсных процессов вызвано с левых IP адресов. Просканировал айпишники, штук так 40 были с bc.googleusercontent.com и большинство начинаются с 35., 45., 46.,5. и т.д. <img class="img-responsive aligncenter wp-image-773 size-full" src="https://tematut.ru/wp-content/uploads/2025/05/ddos-google.png" alt="" width="548" height="488" srcset="https://tematut.ru/wp-content/uploads/2025/05/ddos-google.png 548w, https://tematut.ru/wp-content/uploads/2025/05/ddos-google-300x267.png 300w, https://tematut.ru/wp-content/uploads/2025/05/ddos-google-168x150.png 168w" sizes="(max-width: 548px) 100vw, 548px" /> И все эти злокачественные IP вели на провайдера — Google LLC. Сначала подумал, что бот, а потом вспомнил, что можно было когда то с помощью гугла положить сайт, но это уже другая история:) Да и еще: Чтобы понять, почему порождаются много процессов, нужно во время самой ошибки сделать трассировку системных процессов с помощью утилиты strace. Для этого после запуска ps aux запускаем следующую команду с указанием PID strace -ttfp PID Далее начал поиски того, что когда то делал, и нашел две версии. Версия №1: сделать ссылку на страницы с пикселем для того, чтобы бот перешел по ней и попал в ловушку-бан. Размещаем где то в конце странице, допустим какую то ссылку с картинкой. Далее создаем в корне сайта папку bot_ban и помещаем туда картинку 1х1 px и создаем файлик block_bot.php Внутри файла block_bot.php вставляем следующий код: <?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } $bot = $_SERVER['HTTP_USER_AGENT']; if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) { $bot = 'Yandex'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) { $bot = 'Google'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail.Ru')) { $bot = 'Mail'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'StackRambler')) { $bot = 'Rambler'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'bing')) { $bot = 'Bing'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) { $bot = 'Yahoo'; } if ($bot != 'Yandex' and $bot != 'Google' and $bot != 'Mail' and $bot != 'Rambler' and $bot != 'Bing' and $bot != 'Yahoo') { echo ' Ошибка 404 '; echo ' вернуться на главную страницу '; if (phpversion() >= "4.2.0") { extract($_SERVER); } $bad_bot = 0; /* Создаем в этой же папке пустой файл и называем его bot_block.dat. */ /* Далее смотрим, имеется ли такой же IP в базе, если нет то заносим его в список, так как простые люди просто так не найдут эту ссылку в один пиксель*/ $file_name = "bot_block.dat"; $fp = fopen($file_name, "r") or die("Ошибка файла "); while ($line = fgets($fp, 255)) { $u = explode(" ", $line); if (preg_match("/" . $u[0] . "/", $REMOTE_ADDR)) { $bad_bot++; } } fclose($fp); if ($bad_bot == 0) { $tmestamp = time(); $datum = date("H:i:s d.m.Y", $tmestamp); mail("ваша@почта", "Атака ботов на вашсайт", "Бот с IP $REMOTE_ADDR пришел с $REQUEST_URI; Проверить расположение https://2ip.ru/info/$REMOTE_ADDR; User-agent: $HTTP_USER_AGENT; Со страницы: $HTTP_REFERER; Время блокировки: $datum "); $fp = fopen($file_name, 'a+'); fwrite($fp, "$REMOTE_ADDR $datum $REQUEST_URI $HTTP_REFERER $HTTP_USER_AGENT\r\n"); fclose($fp); }else{ $tmestamp = time(); $datum = date("H:i:s d.m.Y", $tmestamp); mail("ваша@почта", "Атака ботов на вашсайт", "Бот с IP $REMOTE_ADDR пришел с $REQUEST_URI; Проверить расположение https://2ip.ru/info/$REMOTE_ADDR; User-agent: $HTTP_USER_AGENT; Со страницы: $HTTP_REFERER; Время блокировки: $datum "); $fp = fopen($file_name, 'a+'); fwrite($fp, "$REMOTE_ADDR $datum $REQUEST_URI $HTTP_REFERER $HTTP_USER_AGENT\r\n"); fclose($fp); } echo ' '; } Так вот этот метод не сработал, так как этот типо гуглбот не переходил по ссылкам на сайте, а заранее по подготовленному списку урл переходил на страницу где есть фильтры и самая большая нагрузка на базу данных. Версия №2: более продвинутый блокировщик Было принято решение — сделать немного другую защиту от бота. В шаблоне сайта, в самом низу, вставил php код: <?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } $bot = $_SERVER['HTTP_USER_AGENT']; if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) { $bot = 'Yandex'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) { $bot = 'Google'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) { $bot = 'Yahoo'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) { $bot = 'Mail'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Bing')) { $bot = 'Bing'; } if ($bot != 'Bing' and $bot != 'Yandex' and $bot != 'Google' and $bot != 'Yahoo' and $bot != 'Mail') { $config['time'] = 3; /*Время обращения к скрипту, после которого будет(возможно) выдан бан.*/ $config['countaban'] = 5; /*количество возможных нарушений времени обращения, такая возможность введена для более детально точного отделения пользователей от атакующих ботов.*/ $config['directory'] = 'bot_ban/_temp'; /*временна директория, должна существовать, и иметь права на запись.*/ $config['checkmask'] = 'check'; /*маска для проверки, не стоит трогать.*/ $config['banmask'] = 'ban'; /*маска для бана, не стоит трогать.*/ /*Команды после нарушения времени и кол-ва обращений. Используйте константу [IP] - IP Бота.*/ /* iptables -A INPUT -m string --algo bm --string "bc.googleusercontent.com" -j DROP */ /* которые запускаются после того как превышено кол-во попыток */ $config['commands'][] = 'iptables -A ISPMGR -s [IP] -j DROP'; $config['commands'][] = 'iptables -I INPUT -s [IP] -j DROP'; /*Сообщение для пользователя. HTML Работает.*/ $config['message'] = "Сервер перегружен, пожалуйста обновите страницу"; $ip = $_SERVER['REMOTE_ADDR']; $useragent = $_SERVER['HTTP_USER_AGENT']; if (!is_dir($config['directory'])) { exit("Temp directory not found."); } if (!is_writable($config['directory'])) { exit("Temp directory is not writable."); } if (file_exists($config['directory'] . "/" . $config['checkmask'] . $ip)) { $time = filemtime($config['directory'] . "/" . $config['checkmask'] . $ip); $f = fopen($config['directory'] . "/" . $config['checkmask'] . $ip, 'w'); fclose($f); if ($time >= time() - $config['time']) { if (file_exists($config['directory'] . "/" . $config['banmask'] . $ip)) { $count = file_get_contents($config['directory'] . "/" . $config['banmask'] . $ip); if ($count >= $config['countaban']) { for ($i = 0; $i <= count($config['commands']) - 1; $i++) { @system(str_replace("[IP]", $ip, $config['commands'][$i])); } } else { $time = filemtime($config['directory'] . "/" . $config['banmask'] . $ip); if ($time >= time() - $config['time']) { $count++; $f = fopen($config['directory'] . "/" . $config['banmask'] . $ip, 'w'); fwrite($f, $count); fclose($f); } else { $f = fopen($config['directory'] . "/" . $config['banmask'] . $ip, 'w'); fwrite($f, "1"); fclose($f); } } } else { $f = fopen($config['directory'] . "/" . $config['banmask'] . $ip, 'w'); fwrite($f, "0"); fclose($f); } /* Также оставил возможность отправлять письма на почту с указанием что произошло*/ $tmestamp = time(); $datum = date("H:i:s d.m.Y", $tmestamp); $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; $REQUEST_URI = $_SERVER['REQUEST_URI']; $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT']; $HTTP_REFERER = $_SERVER['HTTP_REFERER']; mail("Ваша@почта", "DDOS атака на вашсайт", "Бот с IP $REMOTE_ADDR пришел с $REQUEST_URI; Проверить расположение https://2ip.ru/info/$REMOTE_ADDR; User-agent: $HTTP_USER_AGENT; Со страницы: $HTTP_REFERER; Время блокировки: $datum "); exit($config['message']); } } else { $f = fopen($config['directory'] . "/" . $config['checkmask'] . $ip, 'w'); /* если нужно чтобы что то записывалось в этот файл с проверкой */ /*$HTTP_REFERER = $_SERVER['HTTP_REFERER']; $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT']; fwrite($f, $HTTP_REFERER."=".$HTTP_USER_AGENT);*/ fclose($f); } } ?> Вроде после этого, бот немного приутих, так как большинство Ip попало в BAN Да и еще, как то делал блокировку через htaccess, но только через IP, а вот через указание домена не получилось. Если кто знает, что да как, напишите буду благодарен! # Запрет googleusercontent переход на сайт <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REMOTE_HOST} ^bc\.googleusercontent\.com$ RewriteRule .* - [F,L] </IfModule> <img class="img-responsive aligncenter wp-image-775 size-full" src="https://tematut.ru/wp-content/uploads/2025/05/ddos-ban.png" alt="" width="812" height="286" srcset="https://tematut.ru/wp-content/uploads/2025/05/ddos-ban.png 812w, https://tematut.ru/wp-content/uploads/2025/05/ddos-ban-300x106.png 300w, https://tematut.ru/wp-content/uploads/2025/05/ddos-ban-768x271.png 768w, https://tematut.ru/wp-content/uploads/2025/05/ddos-ban-250x88.png 250w" sizes="(max-width: 812px) 100vw, 812px" /> PS: немного доработал вывод сообщения — добавил html в exit() $config['message'] = " Сервер перегружен, пожалуйста обновите страницу Возможно вы сильно частно обновляете страницу?. Использовано [D] из 10 попыток. "; А также, в message дополнительно встроил счетчик попыток обновления страницы для наглядности. exit(str_replace("[D]", $count , $config['message'])); <img class="img-responsive aligncenter wp-image-781 size-full" src="https://tematut.ru/wp-content/uploads/2025/05/alert-ban-block-2.png" alt="" width="706" height="444" srcset="https://tematut.ru/wp-content/uploads/2025/05/alert-ban-block-2.png 706w, https://tematut.ru/wp-content/uploads/2025/05/alert-ban-block-2-300x189.png 300w, https://tematut.ru/wp-content/uploads/2025/05/alert-ban-block-2-239x150.png 239w" sizes="(max-width: 706px) 100vw, 706px" /> Сообщение Защита от спам ботов и DDOS атак появились сначала на ТеМаТуТ.
Экспорт товаров Prestashop 1.7 через SQL запрос
Времени писать модуль не было, поэтому быстренько собрал запрос на экспорт товаров со всеми данными (с описаниями, картинками, характеристиками и т.д.) в один. Модуль для экспорта товаров из Prestashop стоит довольно не малых денег, и как бы покупать его для единоразовых потребностей не видел смысла. Этот запрос экспортирует все товары из заданной категории или множества […] Сообщение Экспорт товаров Prestashop 1.7 через SQL запрос появились сначала на ТеМаТуТ.
Времени писать модуль не было, поэтому быстренько собрал запрос на экспорт товаров со всеми данными (с описаниями, картинками, характеристиками и т.д.) в один. Модуль для экспорта товаров из Prestashop стоит довольно не малых денег, и как бы покупать его для единоразовых потребностей не видел смысла. Этот запрос экспортирует все товары из заданной категории или множества категорий со всеми информационными полями, а именно: id_product — ид продукта active — активность товара name — имя товара category — категория товара price — цена товара id_tax_rules_group — ИД правил wholesale_price — акционная цена on_sale — в продаже discount amount — скидка в единице discount percent — скидка в процентах from to reference — артикул supplier reference supplier manufacturer — Производитель ean13 upc ecotax width height depth weight quantity — количество minimal_quantity — минимальное кол-во visibility additional_shipping_cost unity единица — измерения unit_price_ratio description_short — краткое описание description — описание tags тэги meta_title meta_keywords meta_description link_rewrite link_rewrite available_now available_later available_for_order available_date date_add show_price url_image — адрес картинок delete existing img (0=no, 1=yes) feature(name:value:position) — Характеристики товаров online_only condition customizable uploadable_files text_fields out_of_stock id_shop_default advanced_stock_management depends_on_stock advanced_stock_management MIN(wpl.id_warehouse) Запрос для экспорта товаров можно сохранить в Менеджере SQL самого Prestashop 1.7 или выполнить в phpMyAdmin SELECT p.`id_product`, p.`active`, pl.`name`, GROUP_CONCAT(DISTINCT(cl.`name`) ORDER BY p.`id_category_default` ASC SEPARATOR ",") AS `category`, p.`price`, p.`id_tax_rules_group`, p.`wholesale_price`, p.`on_sale`, IF(sp.`reduction_type`="amount", sp.`reduction`, "") AS `discount amount`, IF(sp.`reduction_type`="percentage", sp.`reduction`, "") AS `discount percent`, sp.`from`, sp.`to`, p.`reference`, ps.`product_supplier_reference` AS `supplier reference`, su.`name` AS `supplier`, m.`name` AS `manufacturer`, p.`ean13`, p.`upc`, p.`ecotax`, p.`width`, p.`height`, p.`depth`, p.`weight`, psa.`quantity`, p.`minimal_quantity`, p.`visibility`, p.`additional_shipping_cost`, p.`unity`, p.`unit_price_ratio`, pl.`description_short`, pl.`description`, IF(t.`name` IS NOT NULL, GROUP_CONCAT(DISTINCT(t.`name`) SEPARATOR ","), "") AS `tags`, pl.`meta_title`, pl.`meta_keywords`, pl.`meta_description`, pl.`link_rewrite`, pl.`link_rewrite`, pl.`available_now`, pl.`available_later`, p.`available_for_order`, p.`available_date`, p.`date_add`, p.`show_price`, IF(pi.`id_product` IS NOT NULL, GROUP_CONCAT(DISTINCT(CONCAT( "https://АДРЕС-САЙТА-УКАЗАТЬ/img/p/",MID(pi.id_image,1,1),"/", IF (LENGTH(pi.id_image)>1, CONCAT(MID(pi.id_image,2,1),"/"),""),IF (LENGTH(pi.id_image)>2,CONCAT(MID(pi.id_image,3,1),"/"),""),IF (LENGTH(pi.id_image)>3,CONCAT(MID(pi.id_image,4,1),"/"),""),IF (LENGTH(pi.id_image)>4,CONCAT(MID(pi.id_image,5,1),"/"),""), pi.id_image, ".jpg" )) ORDER BY pi.`cover` DESC, pi.`position` ASC SEPARATOR ","), "") AS url_image, IF(pi.`id_product` IS NOT NULL,1, "") AS `delete existing img (0=no, 1=yes)`, GROUP_CONCAT(DISTINCT(CONCAT((fl.`name`), ":", (REPLACE(fvl.`value`,","," &")), ":" , (f.position))) SEPARATOR "^") AS `feature(name:value:position)`, p.`online_only`, p.`condition`, p.`customizable`, p.`uploadable_files`, p.`text_fields`, psa.`out_of_stock`, p.`id_shop_default`, p.`advanced_stock_management`, psa.`depends_on_stock`, p.`advanced_stock_management`, MIN(wpl.`id_warehouse`) FROM `presta_product` p LEFT JOIN `presta_product_lang` pl ON (p.`id_product` = pl.`id_product`) LEFT JOIN `presta_category_product` cp ON (p.`id_product` = cp.`id_product`) LEFT JOIN `presta_category_lang` cl ON (cp.`id_category` = cl.`id_category`) LEFT JOIN `presta_category` c ON (cp.`id_category` = c.`id_category`) LEFT JOIN `presta_specific_price` sp ON (p.`id_product` = sp.`id_product`) LEFT JOIN `presta_product_supplier` ps ON (p.`id_supplier` = ps.`id_supplier`) LEFT JOIN `presta_supplier` su ON (p.`id_supplier` = su.`id_supplier`) LEFT JOIN `presta_manufacturer` m ON (p.`id_manufacturer` = m.`id_manufacturer`) LEFT JOIN `presta_stock_available` psa ON (p.`id_product` = psa.`id_product`) LEFT JOIN `presta_product_tag` pt ON (p.`id_product` = pt.`id_product`) LEFT JOIN `presta_tag` t ON (pt.`id_tag` = t.`id_tag`) LEFT JOIN `presta_image` pi ON ( p.id_product = pi.id_product) LEFT JOIN `presta_feature_product` fp ON p.`id_product` = fp.`id_product` LEFT JOIN `presta_feature_lang` fl ON fp.`id_feature` = fl.`id_feature` LEFT JOIN `presta_feature_value_lang` fvl ON fp.`id_feature_value` = fvl.`id_feature_value` LEFT JOIN `presta_feature` f ON fp.`id_feature` = f.`id_feature` LEFT JOIN `presta_feature_value` fv ON fp.`id_feature_value` = fv.`id_feature_value` LEFT JOIN `presta_warehouse_product_location` wpl ON p.`id_product` = wpl.`id_product` AND pl.`id_lang` = 1 AND cl.`id_lang` = 1 AND fl.`id_lang` = 1 AND fvl.`id_lang` = 1 AND p.`id_shop_default` = 1 AND c.`id_shop_default` = 1 WHERE c.`id_category` IN ('10','12') GROUP BY p.`id_product` Если у вас в этих другие значения замените на свои ( это ID языка и ID магазина ) AND pl.`id_lang` = 1 AND cl.`id_lang` = 1 AND fl.`id_lang` = 1 AND fvl.`id_lang` = 1 AND p.`id_shop_default` = 1 AND c.`id_shop_default` = 1 Если нужно экспортировать товары из нескольких категорий укажите ID категории через запятую, если одна категория то просто ID нужной категории. WHERE c.`id_category` IN ('10','12') GROUP BY p.`id_product` Вот пожалуй и все ! Все работает и хорошо! Всем добра и мира! Будут вопросы задавайте:-) SQL запрос — экспорт товаров с характеристиками для ПрестаШоп 1.7 — Module Export product feature Prestashop 1.7 <img class="img-responsive aligncenter wp-image-757 size-large" src="https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-1024x501.png" alt="SQL запрос экспорт товаров с описанием картинками и характеристиками для Prestashop 1.7" width="1024" height="501" srcset="https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-1024x501.png 1024w, https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-300x147.png 300w, https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-768x376.png 768w, https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-1536x752.png 1536w, https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1-250x122.png 250w, https://tematut.ru/wp-content/uploads/2025/02/prestashop-17-export-product-1.png 1891w" sizes="(max-width: 1024px) 100vw, 1024px" /> Может позже сделаю модуль, если будет нужен! Сообщение Экспорт товаров Prestashop 1.7 через SQL запрос появились сначала на ТеМаТуТ.
Необязательное заполнение поля индекс в оформлении заказа WordPress WooCommerce?
Как отключить заполнение индекса или заполнить за клиента поле индекс при оформлении заказа можно следующим простым способом: Вставляем в форму оформления заказа WooCommerce или банально в footer.php (wp-content/themes/ваша-тема/) в самый низ: [crayon-6a6bc91602b5e652717035/] или [crayon-6a6bc91602b64909261838/] Вот пожалуй и все! На основе этого можно также и другие поля скрыть и заполнить за пользователя стандартными. Сообщение Необязательное заполнение поля индекс в оформлении заказа WordPress WooCommerce? появились сначала на ТеМаТуТ.
Как отключить заполнение индекса или заполнить за клиента поле индекс при оформлении заказа можно следующим простым способом: Вставляем в форму оформления заказа WooCommerce или банально в footer.php (wp-content/themes/ваша-тема/) в самый низ: или Вот пожалуй и все! На основе этого можно также и другие поля скрыть и заполнить за пользователя стандартными. <img class="img-responsive aligncenter wp-image-749 size-full" src="https://tematut.ru/wp-content/uploads/2025/02/adress-1.png" alt="" width="806" height="553" srcset="https://tematut.ru/wp-content/uploads/2025/02/adress-1.png 806w, https://tematut.ru/wp-content/uploads/2025/02/adress-1-300x206.png 300w, https://tematut.ru/wp-content/uploads/2025/02/adress-1-768x527.png 768w, https://tematut.ru/wp-content/uploads/2025/02/adress-1-219x150.png 219w" sizes="(max-width: 806px) 100vw, 806px" /> Сообщение Необязательное заполнение поля индекс в оформлении заказа WordPress WooCommerce? появились сначала на ТеМаТуТ.
Самые популярные: огонь, молния, медаль, сердечко, часы, замок, подарок 🔥 🎃 👻 🍬 🦇 💀 🧡 💣 💥 ♻ 🧨 🤔 ⚠ 🔎 😘 ❌ 📈 🍿 ☑ ✅ 🖤 🧠 ❓ ❗ ® ✉ 🔒 § © ☯ ☭ 📹 🔱 🎁 🧢 📊 💕 🤍 🥱 🛒 🦠 🍄 🍓 🧸 🧺 🪞 […] Сообщение UNICODE Юникод картинки для сайта появились сначала на ТеМаТуТ.
Самые популярные: огонь, молния, медаль, сердечко, часы, замок, подарок ® § © ☭ 🪞 Доллар — $, фунт — £, цент — ¢, российский рубль — ₽ U+20BD (в Юникоде) и &#8381; (в HTML-коде), биткоин — ₿, евро — € Погода: дождь, солнце, снег, облако, радуга ° ☼ ❆ ❅ Природа и животные: корова, сова, пингвин, змея, лошадь, лев, собака, кошка, дерево, паук, цветок Юникод смайлики, знаки с руками и транспорт ☜ ☞ ☟ ☻ ∞ © Символы квадрат, стрелки, треугольник, круг ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ ■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯ ◰ ◱ ◲ ◳ ◴ ◵ ◶ ◷ ◸ ◹ ◺ ◿ Спецсимволы вида «стрелка, крест, список, звезда, солнце, рука» ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☏ ☐ ☒ ☓ ☖ ☗ ☙ ☚ ☛ ☜ ☞ ☟ ☡ ☤ ☥ ☧ ☨ ☩ ☫ ☬ ☭ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ♮ ♯ ♰ ♱ ✁ ✃ ✄ ✆ ✇ ✎ ✐ ✑ ✓ ☬ 〄 ⌘ ✕ ✗ ✘ ✙ ✚ ✛ ✜ ✞ ✟ ✠ ✢ ✣ ✤ ✥ ✦ ✧ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❅ ❆ ❈ ❉ ❊ ❋ ❍ ❏ ❐ ❑ ❒ ❖ ❡ ❢ ❥ ❦ ❧ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ➱ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➘ ➙ ➚ ➛ ➜ ➝ ➞ ➟ ➠ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➩ ➪ ➫ ➬ ➭ ➮ ➯ ➔ ➹ ➺ ➻ ➼ ➽ ➾ ⟠ ⟡ ⟦ ⟧ ⟨ ⟩ ⟪ ⟫ ⟰ ⟱ ⟲ ⟳ ⟴ ⟵ Числа и нумерация от 1 до 20 и от A до Z в Юникод ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓿ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ Палочки, чёрточки и крестики в Unicode ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿ ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔ ▕ 𝌴 Греческий алфавит и прочие буквы ᴀ ᴁ ᴂ ᴃ ᴄ ᴅ ᴆ ᴇ ᴈ ᴉ ᴊ ᴋ ᴌ ᴍ ᴎ ᴏ ᴐ ᴑ ᴒ ᴓ ᴔ ᴕ ᴖ ᴗ ᴘ ᴙ ᴚ ᴛ ᴜ ᴝ ᴞ ᴟ ᴠ ᴡ ᴢ ᴣ ᴤ ᴥ ᴦ ᴧ ᴨ ᴩ ᴪ ᴫ ᴬ ᴭ ᴮ ᴯ ᴰ ᴱ ᴲ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴻ ᴼ ᴽ ᴾ ᴿ ᵀ ᵁ ᵂ ᵃ ᵄ ᵅ ᵆ ᵇ ᵈ ᵉ ᵊ ᵋ ᵌ ᵍ ᵎ ᵏ ᵐ ᵑ ᵒ ᵓ ᵔ ᵕ ᵖ ᵗ ᵘ ᵙ ᵚ ᵛ ᵜ ᵝ ᵞ ᵟ ᵠ ᵡ ᵢ ᵣ ᵤ ᵥ ᵦ ᵧ ᵨ ᵩ ᵪ ᵫ ᵬ ᵭ ᵮ ᵯ ᵰ ᵱ ᵲ ᵳ ᵴ ᵵ ᵶ ᵷ ᵸ ᵹ ᵺ ᵻ ᵼ ᵽ ᵾ ᵿ ᶀ ᶁ ᶂ ᶃ ᶄ ᶅ ᶆ ᶇ ᶈ ᶉ ᶊ ᶋ ᶌ ᶍ ᶎ ᶏ ᶐ ᶑ ᶒ ᶓ ᶔ ᶕ ᶖ ᶗ ᶘ ᶙ ᶚ ᶛ ᶜ ᶝ ᶞ ᶟ ᶠ ᶡ ᶢ ᶣ ᶤ ᶥ ᶦ ᶧ ᶨ ᶩ ᶪ ᶫ ᶬ ᶭ ᶮ ᶯ ᶰ ᶱ ᶲ ᶳ ᶴ ᶵ ᶶ ᶷ ᶸ ᶹ ᶺ ᶻ ᶼ ᶽ ᶾ ᶿ ῲ ῳ ῴ ῶ ῷ Ὸ Ό Ὼ Ώ ῼ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺ Все спец. символы используемые для математики и физики в Unicode × ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠ ℡ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟ ℵ ℶ ℷ ℸ ℺ ℻ ℽ ℾ ℿ ⅀ ⅁ ⅂ ⅃ ⅄ ⅅ ⅆ ⅇ ⅈ ⅉ ⅊ ⅋ ⅍ ⅎ Ⅽ Ⅾ Ⅿ ∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊊ ⊋ ⊌ ⊍ ⊎ ⋐ ⋑ ⋒ ⋓ ⋔ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋮ ⋯ ⋰ ⋱ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ ⌀ Все римские числа ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Наборы нестандартных стрелочек, указателей ← ↑ → ↓ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪ ⇫ ⇬ ⇭ ⇮ ⇯ ⇰ ⇱ ⇲ ⇳ ⇴ ⇵ ⇶ ⇷ ⇸ ⇹ ⇺ ⇻ ⇼ ⇽ ⇾ ⇿ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⊸ ⊹ ⊺ ⊻ ⊼ ⊽ ⊾ ⊿ ⋀ ⋁ ⋂ ⋃ ⋄ ⋅ ⋆ ⋇ ⋈ ⋉ ⋊ ⋋ ⋌ ⋍ ⋎ ⋏ ⌁ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⏎ ⟶ ⟷ ⟸ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿ ⤀ ⤁ ⤂ ⤃ ⤄ ⤅ ⤆ ⤇ ⤈ ⤉ ⤊ ⤋ ⤌ ⤍ ⤎ ⤏ ⤐ ⤑ ⤒ ⤓ ⤔ ⤕ ⤖ ⤗ ⤘ ⤙ ⤚ ⤛ ⤜ ⤝ ⤞ ⤟ ⤠ ⤡ Шахматные фигуры, масти, ноты ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♡ ♢ ♤ ♧ ♩ ♪ ♫ ♬ ♭ ♮ ♯ Сообщение UNICODE Юникод картинки для сайта появились сначала на ТеМаТуТ.
Подсчет количества определенного символа в ячейке OpenOffice
Нужно было посчитать количество определенных символов в ячейке опенофиса, нашел следующее решение: [crayon-6a6bc91602f0c740623146/] Так считает в каждой ячейке количество запятых, можно изменить на что-нибудь другое. Сообщение Подсчет количества определенного символа в ячейке OpenOffice появились сначала на ТеМаТуТ.
Нужно было посчитать количество определенных символов в ячейке опенофиса, нашел следующее решение: =LEN(A1)-LEN(SUBSTITUTE(A1;",";"")) Так считает в каждой ячейке количество запятых, можно изменить на что-нибудь другое. <img class="aligncenter size-full wp-image-722" src="https://tematut.ru/wp-content/uploads/2024/09/count-simbols-openoffice.png" alt="" width="475" height="231" srcset="https://tematut.ru/wp-content/uploads/2024/09/count-simbols-openoffice.png 475w, https://tematut.ru/wp-content/uploads/2024/09/count-simbols-openoffice-300x146.png 300w, https://tematut.ru/wp-content/uploads/2024/09/count-simbols-openoffice-250x122.png 250w" sizes="(max-width: 475px) 100vw, 475px" /> Сообщение Подсчет количества определенного символа в ячейке OpenOffice появились сначала на ТеМаТуТ.
Добрый день Всем! Так как информации мало по опенкарту 4 и модулей тоже, появилась необходимость сделать кнопки на товарах предыдущий и следующий товар. Решение подсмотрел из предыдущей версии опенкарта версии 2-3 Решение следующее. находим файл product.php по пути /public_html/catalog/controller/product Где то примерно после строки [crayon-6a6bc9160312d699416609/] вставляем [crayon-6a6bc91603133701842270/] Добавил также вывод изображения для предыдущего и […] Сообщение Предыдущий следующий товар OpenCart 4 появились сначала на ТеМаТуТ.
Добрый день Всем! Так как информации мало по опенкарту 4 и модулей тоже, появилась необходимость сделать кнопки на товарах предыдущий и следующий товар. Решение подсмотрел из предыдущей версии опенкарта версии 2-3 Решение следующее. находим файл product.php по пути /public_html/catalog/controller/product Где то примерно после строки $data['heading_title'] = $product_info['name']; вставляем $data['next_tovar'] = $next_tovar= $this->model_catalog_product->getProduct($product_id+1); $data['prev_tovar'] = $prev_tovar= $this->model_catalog_product->getProduct($product_id-1); if($next_tovar) { $data['next_product_url'] = $this->url->link('product/product', 'product_id=' . $next_tovar['product_id']); $data['next_product_name']= $next_tovar['name']; $this->load->model('tool/image'); if (is_file(DIR_IMAGE . html_entity_decode($next_tovar['image'], ENT_QUOTES, 'UTF-8'))) { $data['next_product_image'] = $this->model_tool_image->resize(html_entity_decode($next_tovar['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height')); } else { $data['next_product_image'] = ''; } } if($prev_tovar) { $data['prev_product_url'] = $this->url->link('product/product', 'product_id=' . $prev_tovar['product_id']); $data['prev_product_name']= $prev_tovar['name']; $this->load->model('tool/image'); if (is_file(DIR_IMAGE . html_entity_decode($prev_tovar['image'], ENT_QUOTES, 'UTF-8'))) { $data['prev_product_image'] = $this->model_tool_image->resize(html_entity_decode($prev_tovar['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height')); } else { $data['prev_product_image'] = ''; } } Добавил также вывод изображения для предыдущего и следующего товара. Также в самой теме в редакторе шаблона редактируем файл product.twig <img class="img-fluid aligncenter wp-image-708 size-medium" src="https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-300x164.png" alt="" width="300" height="164" srcset="https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-300x164.png 300w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-1024x560.png 1024w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-768x420.png 768w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-1536x840.png 1536w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36-250x137.png 250w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-05-36.png 1826w" sizes="(max-width: 300px) 100vw, 300px" /> Я вставил в самый конец div’a c id=product-info {% if prev_tovar%} {{ prev_product_name }} {%if prev_product_image %} {% endif %} {% endif %} {% if next_tovar%} {{ next_product_name }} {%if next_product_image %} {% endif %} {% endif %} В последующем еще добавил вывод картинки предыдущего и последующего товара. Вот что получилось:<img class="img-fluid aligncenter wp-image-707 size-medium" src="https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12-300x137.png" alt="" width="300" height="137" srcset="https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12-300x137.png 300w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12-1024x467.png 1024w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12-768x350.png 768w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12-250x114.png 250w, https://tematut.ru/wp-content/uploads/2024/07/2024-07-29_09-15-12.png 1532w" sizes="(max-width: 300px) 100vw, 300px" /> Сообщение Предыдущий следующий товар OpenCart 4 появились сначала на ТеМаТуТ.
Упрощённая корзина оформление заказа OpenCart 4
При оформлении заказа на OpenCart версии 4 нужно или зарегистрироваться или заполнить кучу информации. Решении по упрощению оформления заказа нужно было сделать быстро и без особо долгого вмешательства в структуру сайта. Решение было следующее. Добавить заполнение полей формы оформления заказа посредством java скрипта. Добавляем в шаблон оформления заказа следующей код. Заходим в Дизайн->редактор шаблона Выбираем […] Сообщение Упрощённая корзина оформление заказа OpenCart 4 появились сначала на ТеМаТуТ.
При оформлении заказа на OpenCart версии 4 нужно или зарегистрироваться или заполнить кучу информации. Решении по упрощению оформления заказа нужно было сделать быстро и без особо долгого вмешательства в структуру сайта. Решение было следующее. Добавить заполнение полей формы оформления заказа посредством java скрипта. Добавляем в шаблон оформления заказа следующей код. Заходим в Дизайн->редактор шаблона Выбираем редактировать шаблон checkout/register и добавляем скрипт перед вот пожалуй и все форма заполняется автоматически и нажимает на кнопку сохранить, тем самым дает возможность выбрать способы доставки и оплаты. <img class="img-responsive aligncenter wp-image-696 size-full" src="https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart.png" alt="" width="1331" height="836" srcset="https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart.png 1331w, https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart-300x188.png 300w, https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart-1024x643.png 1024w, https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart-768x482.png 768w, https://tematut.ru/wp-content/uploads/2024/05/opencart4-cart-239x150.png 239w" sizes="(max-width: 1331px) 100vw, 1331px" /> Решение так себе, но на первое время сойдет:) Версия Opencart4 Version 4.0.2.3 Сообщение Упрощённая корзина оформление заказа OpenCart 4 появились сначала на ТеМаТуТ.