Category: Development

Убираем всплывающее окно popup в битрикс при добавлении товара в корзину

В битриксе, при добавлении товара в корзину из списка товаров, есть два вида действия:

1. После добавления товара в корзину перенаправляет в корзину на оформление товара
2. Всплывающее окно говорящее об успешном добавлении товара в корзину

Но нам не нужно это всплывающее окно и тем более мы не хотим после добавления товара переходить в корзину. Что делать? Читаем дальше…

Read More

Делаем ajax формы в битрикс на страницах и в всплывающих окнах

Рано или поздно, разработчик 1с-битрикс, задается вопросом: а как же мне сделать аякс форму в битриксе?
Не секрет, что в 1с-битрис «режим AJAX» можно включить практически в каждом компоненте в его настройках, но есть и такие компоненты в которых по каким то причинам нет этой настройки.
Попробуем разобраться как это делается на примере компонента «Добавление элементов инфоблока». Читаем дальше…

Read More

Bitrix: вывод не активного элемента в публичной части

Так завелось, что при неактивном элементе, когда снята галочка «Активность» у элемента, то возникает сложность вывести его в публичной части сайта. Для этого забираем компонент в папку с вашими компонентами. Например: копируем /bitrix/components/bitrix/news.detail/ в /bitrix/components/ak/news.detail/
Далее в файле component.php ищем строки

$arFilter = array(
    "IBLOCK_LID" => SITE_ID,
    "IBLOCK_ACTIVE" => "Y",
    "ACTIVE" => "Y",
    "CHECK_PERMISSIONS" => "Y",
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    "SHOW_HISTORY" => $arParams["SHOW_WORKFLOW"]? "Y": "N",
);

и необходимо за комментировать или убрать строку «ACTIVE» => «Y»,

$arFilter = array(
    "IBLOCK_LID" => SITE_ID,
    "IBLOCK_ACTIVE" => "Y",
    "CHECK_PERMISSIONS" => "Y",
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    "SHOW_HISTORY" => $arParams["SHOW_WORKFLOW"]? "Y": "N",
);

Вот и все. Теперь на вашем сайте можно вывести не активный элемент.

Виджет календаря для поля инпут в Битрикс

Для того чтобы красило оформить поле указания даты в битриксе можно использовать стандартный инструмент:

<input type="text" value="03.02.2015" name="date" onclick="BX.calendar({node: this, field: this, bTime: false});">

Вот офф. апи https://dev.1c-bitrix.ru/api_help/main/js_lib/data/calendar.php

/usr/lib/libmysqlclient.18.dylib: Operation not permitted

После обновления ОС на Capitan мускуль не нашел библиотеку по пути /usr/lib/libmysqlclient.18.dylib и соответственно нужно создать симлин в эту директорию, но при это дало ошибку

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Для лечения необходимо перезагрузить систему с удержанием cmd+R и в терминале выполнить:

csrutil disable

Bad Request (400) в django на поле ForeignKey

Возникла ошибка Bad Request (400) на вот таком примере (не буду приводить всю модель, только то что важно):

models.py

class Institution(models.Model):
    '''
    Образовательно учреждение
    '''
    name = models.CharField(max_length=255, verbose_name=u'Название')
    address = models.CharField(max_length=255, verbose_name=u'Адрес')

class CustomUser(models.Model):
    '''
    Расширяем пользовательскую модель под педагогов
    '''
    user = models.OneToOneField(User)
    phone = models.CharField(max_length=11, blank=True, null=True, verbose_name=u'Телефон')
    middle_name = models.CharField(max_length=100, blank=True, verbose_name=u'Отчетсво')
    institution = models.ForeignKey(Institution, blank=True, null=True, verbose_name=u'Учереждение')

admin.py

class CustomUserInline(admin.StackedInline):
    model = CustomUser
    can_delete = False

class CustomUserAdmin(UserAdmin):
    list_display = ('username', 'email', 'last_name', 'first_name')
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

На официальном сайте есть тикет по этому поводу https://code.djangoproject.com/ticket/23552 и следовательно лечим добавлением класса CustomUserAdmin

Новый admin.py

class CustomUserInline(admin.StackedInline):
    model = CustomUser
    can_delete = False

class CustomUserAdmin(admin.ModelAdmin):
    def get_inline_instances(self, request, obj=None):
        return [inline(self.model, self.admin_site) for inline in [CustomUserInline]]
admin.site.register(CustomUser, CustomUserAdmin)

class CustomUserAdmin(UserAdmin):
    list_display = ('username', 'email', 'last_name', 'first_name')
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

Увеличиваем максимальный размер вложений в Postfix на Bitrix Virtual

На свежем развернутом сервере на bitrix virtual не уходила почта из модуля «Рассылки» с вложением больше 7 мегабайт.

Увеличиваем размер до 50 мегабайт.

postconf -e message_size_limit=51200000
postfix reload

и что бы на верняка, перезапускаем Postfix

service postfix restart

Быстрое восстановление пароля root на сервер

Как быстро восстановить пароль на root пользователя для mysql.
Для этого выполните пошаговую инструкцию приведенную ниже.

1) Сначала остановите mysql.
 service mysqld stop
 2) И запустите mysql командой:
 /usr/bin/mysqld_safe --skip-grant-tables --user=root &
 3) После чего запустите клиент mysql
 mysql -u root
 4) Сделайте запрос sql
 UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
 где newpwd - новый пароль.
 5) Примените изменения
 FLUSH PRIVILEGES;
 6) Выходим из клиента mysql с помощью команды exit
 7) Прописываем команду
 killall mysqld
 Перезагрузите mysql сервер командой:
 service mysqld restart

Узнаем e-mail покупателя по заказу

В Битрикс нельзя просто взять и получить e-mail владельца заказа путем обращения к базе пользователей. Быть может для данного заказа покупатель указал иной e-mail. Вот код, который вернет e-mail покупателя конкретного заказа исходя из всех условий:

 

/*
    * Узнаем e-mail пользователя по заказу.
    */
   private static function getOwnerEmail($order)
   {
      //пробежимся по св-вам заказа, ища e-mail
      $res = CSaleOrderPropsValue::GetOrderProps($order);
      while ($row = $res->fetch()) {
         if ($row['IS_EMAIL']=='Y' && check_email($row['VALUE'])) {
            return $row['VALUE'];
         }
      }
      //если такого не нашли, берем просто mail пользователя
      if ($order = CSaleOrder::getById($order)) {
         if ($user = CUser::GetByID($order['USER_ID'])->fetch()) {
            return $user['EMAIL'];
         }
      }
      return false;
   }

Спасибо.

Количество выбранных элементов в битриксе c SelectedRowsCount

Как оказывается не многие программисты, с чьим кодом мне приходится работать, не знают что не нужно обходить все полученные элементы в цикле, что бы посчитать их. Для этого битрикс уже сделал необходимый инструмент:

$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
$res->SelectedRowsCount()

Товарищи!!! Не ленитесь читать документацию. В ней даже поиск есть. Удачи Вам.