Category: Статьи

Вывод в bitrix:catalog товаров из нескольких инфоблоков

Имеется тип инфоблока 1c_catalog, а в нем несколько инфоблоков с товарами выгружаемых из разных 1С. Нам нужно вывести все эти товары из всех инфобоков в комплексном компоненте bitrix:catalog. Как не печально, но я не нашел решения этой задачи без кастомизации. Ну и вот, что у меня получилось читайте далее…

Read More

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

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

Read More

Базовые функции pymongo (MongoDB для python)

import pymongo

from pymongo import Connection
connection = Connection()

# Удаляем базу данных, если она существует
connection.drop_database("my_database")

# Выбираем базу данных
db = connection.test_database
# или так
db = connection["my_database"]

# Удалить коллекцию
db.drop_collection('users')

# Добавление документов в колекцию 'users'
db.users.save( { 'name':'user 1', 'level':1 } )
db.users.save( { 'name':'user 2', 'level':2 } )
db.users.insert( { 'name':'user 3', 'level':3 } )

# Узнаем полное имя коллекции
print db.users.full_name

# Получаем все документы в коллекции
for user in db.users.find():
    print user

# Выбрать конкретные атрибуты
users = db.users.find({},{ 'login':1, 'name':1 })

# Получить один документ по условию
user = db.users.find_one({'name':'user 1'})

# Получить/установить значение
print user['level']
user['level'] = 7

# Сохранить документ
db.users.save(user)

# Удалить документ
db.users.remove(user)

# Установить значение в документе
db.users.update({ 'name':'user 2' }, { "$set": { 'level':5 } })

# Кол-во документов
print 'Count',db.users.count()
print 'Count lvl=2',db.users.find({'level':2}).count()

# Сортировка
for user in db.users.find().sort('level'):
    print user
# в обратном порядке: .sort('level',pymongo.DESCENDING)
# Сортировка по нескольким атрибутам
    db.users.find({}).sort( [('status',1),('level',-1)] )

# Ограничение выборки, пропустить один документ и выбрать не более двух
for user in db.users.find().skip(1).limit(2):
    print user

# Условия
for user in db.users.find().where('this.name == "user 2" || this.level>3'):
    print user

# Выбрать неповторяющиеся записи
for user in db.users.distinct('level'):
    print user

# Поиск регулярным выражением
import re
regex = re.compile('^us', re.I | re.U) 
result = db.collection.find({ 'name':regex })

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",
);

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

Ошибка Ruby (kernel_require.rb:55:in `require’) при использовании brew на mac os

Получил вот такую ошибку:

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mach (LoadError)
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/Homebrew/extend/pathname.rb:2:in `<top (required)>'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/Homebrew/global.rb:3:in `<top (required)>'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/brew.rb:16:in `<main>'

Лечим в консоли:

$ sudo chown -R $(whoami):admin /usr/local
$ cd /usr/local  
$ git reset --hard  
$ git clean -df
$ brew update

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)

django.db.utils.IntegrityError: (1215, ‘Cannot add foreign key constraint’)

Получил в Django при выполнении миграции вот такую ошибку

django.db.utils.IntegrityError: (1215, ‘Cannot add foreign key constraint’)

связано это с тем что в базе смесь таблиц InnoDB и MyISAM. Лечим просто -> переводим все таблицы в InnoDB.

ipython notebook — ImportError: IPython.html requires pyzmq >= 13

Получил ошибку при запуске ipython notebook

macbook-air:~ MacBookAir132013$ ipython --version
3.2.1
macbook-air:~ MacBookAir132013$ ipython notebook
Traceback (most recent call last):
  File "/usr/local/bin/ipython", line 11, in <module>
    sys.exit(start_ipython())
  File "/Library/Python/2.7/site-packages/IPython/__init__.py", line 120, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 573, in launch_instance
    app.initialize(argv)
  File "<string>", line 2, in initialize
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/IPython/terminal/ipapp.py", line 321, in initialize
    super(TerminalIPythonApp, self).initialize(argv)
  File "<string>", line 2, in initialize
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/IPython/core/application.py", line 369, in initialize
    self.parse_command_line(argv)
  File "/Library/Python/2.7/site-packages/IPython/terminal/ipapp.py", line 316, in parse_command_line
    return super(TerminalIPythonApp, self).parse_command_line(argv)
  File "<string>", line 2, in parse_command_line
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 471, in parse_command_line
    return self.initialize_subcommand(subc, subargv)
  File "<string>", line 2, in initialize_subcommand
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/IPython/config/application.py", line 402, in initialize_subcommand
    subapp = import_item(subapp)
  File "/Library/Python/2.7/site-packages/IPython/utils/importstring.py", line 42, in import_item
    module = __import__(package, fromlist=[obj])
  File "/Library/Python/2.7/site-packages/IPython/html/notebookapp.py", line 30, in <module>
    check_for_zmq('13', 'IPython.html')
  File "/Library/Python/2.7/site-packages/IPython/utils/zmqrelated.py", line 12, in check_for_zmq
    raise ImportError("%s requires pyzmq >= %s"%(required_by, minimum_version))
ImportError: IPython.html requires pyzmq >= 13

лечим

sudo pip install --upgrade pyzmq

и радуемся

1С-Битрикс: страница 404.php (велосипед)

<?
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
$sapi_type = php_sapi_name();
if ($sapi_type=="cgi") 
   header("Status: 404");
else 
   header("HTTP/1.1 404 Not Found");
@define("ERROR_404","Y");
//Тут уже подключение верней части шаблона и присваивание заголовка
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Данная страница не существует!");
//Код страницы
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
?>
<style>
	h1 { text-align:center;font-size:16px; }
</style>
<p style="text-align:center;font-size:15px;">Вы можете <a href="/">перейти на главную страницу сайта</a></p>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>