По какой-то причине разработчики Virtuemart решили что письмо покупателю сразу после сделанного заказа отправлять не нужно. Письма шлются только после смены статуса заказа администратором магазина в админке. Да, это немного странное решение и как я понял не настраиваемое из коробки.
Так как решать вопрос надо было быстро то не обошлось без вмешательства в код Virtuemart:
administrator/components/com_virtuemart/models/orders.php
// Send the email
//$res = shopFunctionsF::renderMail('invoice', $order['details']['BT']->email, $vars, null,$vars['doVendor'],$this->useDefaultEmailOrderStatus);
$sendMail = false;
if(!$this->useDefaultEmailOrderStatus and isset($vars['newOrderData']['customer_notified']) and $vars['newOrderData']['customer_notified']==1){
$sendMail = true;
} else {
$orderstatusForShopperEmail = VmConfig::get('email_os_s',array('U','C','S','R','X'));
if(!is_array($orderstatusForShopperEmail)) $orderstatusForShopperEmail = array($orderstatusForShopperEmail);
//TODO: Фикс для того чтобы письма отправлялись покупателю сразу после заказа
$orderstatusForShopperEmail[] = 'P';
if ( in_array((string) $vars['orderDetails']['details']['BT']->order_status,$orderstatusForShopperEmail) ){
$sendMail = true;
vmdebug('renderMail by default orderstati');
}
}
Решение в виде одной строки сразу после коммента. Это мы добавляем статус "Pending" в список статусов при которых письма отправляются.
Вот и все)
1) Отключаем в .htaccess auto_prepend_file /bitrix/modules/security/tools/start.php
2) Включаем логи в Битрикс /bitrix/.settings.php
'exception_handling' =>
array (
'value' =>
array (
'debug' => true,
'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
'ignore_silence' => true,
'assertion_throws_exception' => false,
'assertion_error_type' => 256,
'log' => array (
'settings' => array (
'file' => 'bitrix/modules/error.log',
'log_size' => 1000000,
),
),
),
'readonly' => true,
),
3) Или в php.ini
display_errors display_startup_errors error_log
4) Отладка выгрузки 1С
init.php
AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent");
function ChangeMyContent($content)
{
if (strpos($_SERVER['REQUEST_URI'],'/bitrix/admin/1c_exchange.php')!==false) {
$codabra = date("Y-m-d H:i:s")."\n";
$codabra.= $content."\n";
$codabra.= $_SERVER['REQUEST_URI']."\n";
$codabra.= "------------------------------\n";
file_put_contents($_SERVER["DOCUMENT_ROOT"].'/schmex.log', $codabra, FILE_APPEND);
}
}
Пишу сюда некоторые запросы чтобы быстро скопипастить их в случае чего:
Получить 10 таблиц из всех БД на сервере с самым большим количеством записей
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES ORDER BY TABLE_ROWS DESC LIMIT 10;
Получить 10 самых объемных таблиц из всех БД на сервере в мегабайтах
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, round(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC LIMIT 10;
Получить 10 таблиц из БД dbname с самым большим количеством записей
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='dbname' ORDER BY TABLE_ROWS DESC LIMIT 10;
Получить 10 самых объемных таблиц из БД dbname в мегабайтах
SELECT TABLE_NAME, TABLE_ROWS, round(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE TABLE_SCHEMA='dbname' ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC LIMIT 10;
Всем привет!
Нередко возникает такая ситуация когда пароль от админки сайта забыт, но при этом есть FTP/SSH или еще какой-либо другой доступ к файлам CMS.
Итак, тут все очень просто
Открываем файл cockpit/modules/core/Auth/bootstrap.php и закомменчиваем 20 строчку:

И авторизуемся под необходимым пользователем с ЛЮБЫМ паролем. После того как войдете не забудьте расскомментировать строчку обратно иначе на сайт сможет зайти кто угодно.
Привет!
Как ни странно в официальной документации данной CMS, а также в документации роутера Lime который по умолчанию идет в комплекте с ней отсутствуют упоминания о том как добавить корректные обработчики страниц 404 и 500.
Ответ нашелся в одном из issue на гитхабе посвященном вообще другому вопросу =)
Итак, чтобы все заработало перед маршрутами добавляем вот этот обработчик:
$app = new Lime\App();
$app->on("after", function() {
switch($this->response->status){
case "404":
$this->response->body = $this->render(__DIR__."/views/404.php");
break;
case "500":
$this->response->body = $this->render(__DIR__."/views/500.php");
break;
}
});
$app->bind('/', function () use ($app) {
Как вы видите тут тоже кроется небольшой баг который мы обходим прописыванием абсолютного пути к вьюшкам. Вот и все, теперь все работает =)
Привет!
Не факт что это кому то еще понадобится кроме меня, но записать решение стоит. Итак, есть CockpitCMS в которой из коробки есть микрофреймворк Lime используюийся для роутинга и рендера вьюх. Так вот, если у вас PHP работает через FastCGI вся эта балалайка работать не будет.
Проблема в том что в роутере используется $_SERVER['PATH_INFO'] которая в данном случае будет пуста. Я починил вот так:
index.php
...
include_once('cockpit/bootstrap.php');
$_SERVER["PATH_INFO"] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); //чиним этой строкой
$app = new Lime\App();
$app->bind('/', function () use ($app) {
...
Заодно также добавил фикс в .htaccess убираюший лишние слеши:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]