Форум 1С-Битрикс

Задавайте свои вопросы и отвечайте на вопросы других участников форума

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Задержка исполенения функции при вводе символов (чисел) в строке input
 
Написал рабочий кусок кода, выполнение функции с ожиданием.
Код
$('input').on('keyup', function(){
        var $this = $(this);
        var $delay = 500;

        clearTimeout($this.data('timer'));

        $this.data('timer', setTimeout(function(){
                $this.removeData('timer');
                         
            $.ajax({
                type: 'POST',
                url: "/ajax/basket_ubdate.php",
                data: {id:id,quantity:quantity},
                success: function(data){
            
            }
           });
        }, $delay));

});
  • $this - хранит ссылку на объект строки ввода input
  • $delay - время ожидания (timeout) в миллисекундах.

Перед выполнением функции, мы сбрасываем таймер который мог быть ранее  создан.

Далее скрипт присваивает новый таймер и выполнит ваш код, который запустится после ввода значения.

В нашем случае это AJAX запрос на сервер/

Очистить email от ненужных символов php
 
В названии электронной почты разрешены следующие символы
  1. Заглавные и строчные буквы латинского алфавита (a-z, A-Z), хотя с сегодняшним бумом на национальные домены, я думаю, что все буквы уже разрешены.
  2. Цифры 0-9
  3. Символы ! # $ % & ' * + - / = ? ^ _ ` { | } ~
  4. Точка (.) Но если она стоит не в начале, не в конце и их не две подряд.
1. Допустим есть емайл

$email= "   .Jб,! # $ % & ' * + - / = ? ^ _ ` { | } ~ohn#% ^.@@@@&*()@(.doe)@.ex_-a//m#p%l...e.com. ";


2. Применим очищающий фильтр FILTER_SANITIZE_EMAIL, который удаляет все символы, кроме букв, цифр и !#$%&'*+-=?^_`{|}~@.[]

$email =  filter_var ( $email, FILTER_SANITIZE_EMAIL);


3.  Удалим повторяющиеся точки

$email  = preg_replace('/\.{2,}/', ".", $email );


4.  Разделим емайл на имя и домен по последнему символу собаки @

preg_match('/(.*)@(.*)$/', $email, $arResult);

$arResult[1]; //имя

$arResult[2]; //домен


5. Вычистим имя

$arResult[1] = preg_replace('/^\./', "", $arResult[1]); //удаляем первый символ точки

$arResult[1] = preg_replace('/\.$/', "", $arResult[1]); //удаляем последний символ точки

$arResult[1] = preg_replace('/@/', "", $arResult[1]); //удаляем собачки


6.  Вычистим домен

$arResult[2] = preg_replace('/^\./', "", $arResult[2]); //удаляем первый символ точки

$arResult[2] = preg_replace('/\.$/', "", $arResult[2]); //удаляем последний символ точки

$arResult[2] = preg_replace('/[^a-z0-9_\.-]/iu', "", $arResult[2]); //удаляем все запрещенные символы в домене кроме, латинских букв, точек, знака тире и нижнего подчеркивания


7. Удалим, т.к. там лежит еще не обработанный email из 3 пункта

unset($arResult[0]);  


8. Выведем результат

$strResult = implode("@", $arResult);

print "<pre>";print_r($strResult);print "</pre>";


Если у кого есть дополнения или более изящный вариант решения, напишите пожалуйста
Ошибка new crontab file is missing newline before EOF,can't install
 
В файле crontab.cfg в конце последней задачи нажмите ENTER для перевода курсора на новую строку. При этом в конце строки добавится невидимый символ перехода на новую строку.
И не забудьте сохранить
Как сопоставить текстовое название города из гео-базы с местоположениями 1С-Битрикс
 
Для определения города по ip подойдут стандартные средства битрикс
Цитата
use \Bitrix\Main\Service\GeoIp;
GeoIp\Manager::useCookieToStoreInfo(true);
$ipAddress = GeoIp\Manager::getRealIp();
$result = GeoIp\Manager::getDataResult($ipAddress, "ru");

$getLocationId = \Bitrix\Sale\Location\GeoIp::getLocationId($ipAddress, "ru");
$getLocationCode = \Bitrix\Sale\Location\GeoIp::getLocationCode($ipAddress, "ru");
Если есть название города, можно использовать следующий функционал для определения кода местоположения

Цитата
\Bitrix\Main\Loader::includeModule('sale');
$ol["city"] = "Москва";

           $result = array();

           $res = \Bitrix\Sale\Location\LocationTable::getList(array(
               'filter' => array(
                   '=NAME.NAME_UPPER' => ToUpper($ol["city"]),
                   '=NAME.LANGUAGE_ID' => "ru"
               ),
               'select' => array('ID', 'CODE')
           ));

           if($loc = $res->fetch())
               $resultCity = $loc;
   }
$getLocationCode = $resultCity['CODE'];
$getLocationId = $resultCity['ID'];
Как добавить команду в cron на виртуальной машине битрикс vm
 
В консоли SSH для редактирования файла crontab используются команды

crontab -l //просмотр
crontab -e //редактирование
i //начать редактирование
выход + сохранение Esc далее :wq
выход Esc далее :q

При редактировании нужно написать строчку

* * * * * /usr/bin/php -f /home/bitrix/ext_www/site.ru/script.php > /home/bitrix/ext_www/site.ru/cron.log 2>&1

Разберем эту строчку по пунктам:
1.  Звездочки позволяют указать время, в которое будет запущен скрипт
{ пример
# выполнять задание раз в час в 0 минут
0 */1 * * *

# выполнять задание каждые три часа в 0 минут
0 */3 * * *

# выполнять задание по понедельникам в 1 час 15 минут ночи
15 1 * * 1

# выполнять задание 5 апреля в 0 часов 1 минуту каждый год
1 0 5 4 *

# выполнять задание в пятницу 13 числа в 13 часов 13 минут
13 13 13 * 5

# выполнять задание ежемесячно 1 числа в 6 часов 10 минут
10 6 1 * *


поле1 поле2 поле3 поле4 поле5 команда
Значения первых пяти полей:

минуты — число от 0 до 59
часы — число от 0 до 23
день месяца — число от 1 до 31
номер месяца в году — число от 1 до 12
день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)
}

2. /usr/bin/php  -f  
- путь к интерпретатору php с ключем.
Путь можно узнать исполнив команду в консоли whereis php

3. /home/bitrix/ext_www/site.ru/script.php
- путь к скрипту от корня сервера
$_SERVER["DOCUMENT_ROOT"] указывать как при распечатке <?echo $_SERVER["DOCUMENT_ROOT"];?>
в cron адрес писать как в winscp

4.  > /home/bitrix/ext_www/site.ru/cron.log 2>&1
- по этому пути будет писаться все ошибки или echo при выполнении скрипта.
Вообщем все что выводится на экране монитора, если бы мы запустили скрипт из браузера

5. В самом файле запускаемого скрипта необходимо первой строчкой указать строку  #!/usr/bin/php -q
, где /usr/bin/php путь к интерпретатору php
window.__jsonp_ymaps_map is not a function Ошибка в консоле
 
Цитата
Лось написал:
Здравствуйте. На странице оформления заказа в консоль вываливается ошибка вида window.__jsonp_ymaps_map is not a function
В чем может быть проблема?
Проверьте подключение api яндекс карт. Возможно подключается несколько раз на странице.
У меня такое было, когда присутствовало несколько служб доставок, и каждый из них подключал свой АПИ
net::ERR_ABORTED 429 (Too Many Requests) Ошибка карт Яндекс
 
Здравствуйте.
Ошибка 429 означает, Вы делаете слишком много запросов к сервису Yandex Maps API. Проверьте условия предоставления услуг.
Для решения проблемы Вам необходимо обновить модуль СДЕК до последней версии и получить ключ АПИ карт.
Как получить ключ для карты яндекса
1. Перейдите по ссылке https://developer.tech.yandex.ru/
1. Нажмите кнопку Получить АПИ и в показавшемся окне выберете JavaScript API и HTTP Геокодер и нажмите Продолжить
2. Заполните все поля
3. Далее Вам яндекс сгенерирует ключ, который необходимо будет вставить в настройках модуля СДЕК, в поле API-ключ Яндекс.карт https://yadi.sk/i/EKn-aDtfzsx4lw
Перестали приходить письма из Битрикс на почту gmail
 
Чтобы письма отправлялись не с домена по умолчанию и для них можно было настроить DNS-записи, необходимо помимо заголовка From передавать почтовому серверу в функции mail аргумент -f

Пример: mail("получатель", "тема", "текст", "заголовки", "-f адрес отправителя")

Информация по данному вопросу доступна в документации PHP - http://www.php.net/function.mail

Например, в CMS Битрикс, аргумент устанавливается так:
https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/1750/
Как можно скопировать папку в другую директорию по ssh
 
Скопировать можно используя команду консоли
cp -r /home/bitrix/www/bitrix/components/bitrix/catalog  /home/bitrix/www/local/components/bitrix
здесь
cp команда копирования
-r  ключ для копирования папки рекурсивно
первый параметр это сама папка
второй параметр это директория куда копировать

можно посмотреть мануал
команда консоли man cp

Для копирования папки с другого сервера можно попробовать команду
scp -r user@host:/home/bitrix/www/bitrix/components/bitrix/catalog  /home/bitrix/www/local/components/bitrix
Как сделать, чтобы была возможность отправлять заказ в шиптор, даже если отгрузка не разрешена
 
Стандартного функционала для этого нет. Если только дорабатывать программно.

Необходимо в init.php разместить событие OnSaleOrderSaved, в котором изменять флаг доставки на разрешено. При этом проверить условие, что доставка та, которая вам нужна.  Данное событие происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены.

use Bitrix\Main;
Main\EventManager::getInstance()->addEventHandler(
   'sale',
   'OnSaleOrderSaved',
   'OnSaleOrderSavedHandler'
);

function OnSaleOrderSavedHandler(Main\Event $event)
{
   /** @var Order $order */
   $order = $event->getParameter("ENTITY");
   $oldValues = $event->getParameter("VALUES");
   $isNew = $event->getParameter("IS_NEW");
   $shiptor_id = array(211, 216, 212);

if ($isNew)
{

$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment)
{
    if (!$shipment->isSystem())
{
$originalDeliveryId = $shipment->getDeliveryId();

if(in_array($originalDeliveryId, $shiptor_id)){

$shipment->allowDelivery();
$shipment->setField('DEDUCTED', 'N');
$order->setField('STATUS_ID', 'N');

$order->save();

}
}
}
}
}
Страницы: 1