Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/brandymint/bitrix_on_rails
Работа с Инфоблоками 1С-Битрикс на Ruby On Rails (BitrixOnRails)
https://github.com/brandymint/bitrix_on_rails
Last synced: about 2 months ago
JSON representation
Работа с Инфоблоками 1С-Битрикс на Ruby On Rails (BitrixOnRails)
- Host: GitHub
- URL: https://github.com/brandymint/bitrix_on_rails
- Owner: BrandyMint
- License: mit
- Created: 2011-08-02T05:00:36.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2023-01-09T22:11:33.000Z (almost 2 years ago)
- Last Synced: 2023-03-10T22:28:47.902Z (almost 2 years ago)
- Language: Ruby
- Homepage:
- Size: 94.7 KB
- Stars: 15
- Watchers: 13
- Forks: 6
- Open Issues: 10
-
Metadata Files:
- Readme: README.rdoc
- License: LICENSE.txt
Awesome Lists containing this project
README
= bitrix_on_rails
{}[http://travis-ci.org/BrandyMint/bitrix_on_rails] {}[https://codeclimate.com/github/BrandyMint/bitrix_on_rails]
Приблуды для использования под рельсами базы 1С:Битрикс.
Для каждого инфоблока что лежит в b_iblock есть своя таблица название которой с номером инфоблока, например b_iblock_element_prop_s7
prop_s - для одиночных свойтсв, prop_m - для множестенный.
У каждого инфоблока нескоолько секций (iblock_section), в каждой секции несколько элементов (iblock_element) у каждого элемента разные свойства которые лежат в prop_s/_m.
Соответсвенно я эти свойства вытащил в одно место - они все доступны из модели IblockElement. Или напрямую; IblockElement.find(123).НАЗВАНИЕ_СВОЙСТВА или через метод properties== Авторизация
https://gist.github.com/1562013
== Установка
gem 'bitrix_on_rails'
В файл `config/initialize/bitrix_on_rails.rb` впишите:
BitrixOnRails.init
== Что есть:
=== mysql2_downcase адаптер
1. Адаптер mysql2_downcase для автоматической конвертации заглавных наименований полей в прописные.=== Инфоблоки
Для создания модели элемента инфоблока:
- наследуем модель от IblockElement
- в конце файла добавляем BitrixOnRails.send :create_iblock_class, _номер_инфоблока_, _имя_модели_ unless Rails.application.config.cache_classes
- в config/initializers/bitrix_on_rails.rb в блок BitrixOnRails.configure добавляем c.infoblock _номер_инфоблока_, :extended_class => _имя_модели_
Далее работаем с инфоблоком, как с обычной моделью.1. Все модели для таблиц b_iblock_*
2. Автоматическая установка свойств из таблиц prop_s*/prop_m* в методы объекта IblockElement.
Например IblockElement.find(1).name_emittents, где name_emittent - свойство из prop_s.
Все подобные свойства также доступны через метод IblockElement#properties.3. IblockElementS*
1. Тоже самое и для моделей IblockElementPropertyS*, плюс в них значения полей можно еще и устанавливать:p = IblockElementPropertyS3.find(1)
p.name_emittents='новое имя'
p.save2. Поиск по кодовым названиям полей таблицы
IblockElementPropertyS3.find_by_post_id(123)
вместо
.find_by_property_149(123)
Таким образом если мы знаем что инфоблок S3 связан с таблицей постов и хотим получить все свойства поста 63, делаем:
IblockElementPropS3.find_by_post_id(63).iblock_element.properties
3. IblockElement.properties выдает хеш соответсвия кодов свойств и названия их полей в prop_s
Автоматическое определение привязки элемента к объекту. Например: если мы спрашиваем iblock_element.post
то он ищет ключ :post_id в свойствах элемента, и если находит, то возвращает Post.find_by_id(properties[:post_id])4. Все свойства IblockProperty кешируются и доступны через find(id)
5. В IblockElement автоматически добавляются has_one :iblock_element_prop_s* и has_many :iblock_element_prop_m* при создании соответвующих классов.
6. Модель можно расширять инфоблоком с помощью:
class Post << ActiveRecord::Base
has_infoblock(3, :property_19) # где property_19 поле ссылающееся на Post
Создастся класс Post::Elemnt наследуемый от IblockElement
для этой модели автоматически создадутся ассоциации
:iblock_element - класс Post::Element
Класс PostElement будет иметь ассоциации
:property_set (он же iblock_element_prop_sNUMBER) и
:m_prop_valuesа также default_scope с номером инфоблока, поэтому Post::Element.all выдаст только элементы к специфичному инфоблоку
== Примерчики:
=== Хеш кодов свойств инфоблока и их идентификаторов
Iblock.get_property_codes(3)
# => {:blog_id=>9, :glob_class=>11, :post_id=>13, :post_cafe=>15, :post_analitik=>16, :post_type=>17, :anonim=>18, :file=>20, :status=>21, :auto_rubric=>37, :link_change=>38, :link_company=>123, :post_kitchen=>124, :analyst=>152, :post_toilet=>193, :theme=>280, :post_analitik_bloger=>290, :num_comments=>309, :cnt_thanks=>327, :preview_mpage=>341, :name2=>342, :cnt_complaint=>349, :pr_subscribe=>410, :was_published=>421, :vip_subscribe=>422, :post_skyline=>430, :vip_send_date=>438}# Тоже что и
Iblock.find(3).property_codes=== Кешированный список всех свойств инфоблока хешем с ключом-идентификатором
Iblock.get_properties(3)
# Тоже самое
Iblock.find(3).get_properties(3)[13]
# => #=== Конретное свойство
Iblock.get_property(ibock_id, property_id)
# Тоже самое
Iblock.find(3).get_property(13).code
# => :post_id=== Битрикс-авторизация
== mysql2_downcase
Подключать просто:
development:
adapter: mysql2_downcase
encoding: cp1251
...== Тесты
bundle exec guard
или
bundle exec rake test
== TODO
* Больше примернов использования
* Спеки== Contributing to bitrix_on_rails
* С нетерпением жду форков, пулеквестов, замечаний и предложений.
== Разработчики
Данил Письменный, Дмитрий Максимов
== Copyright
Copyright (c) 2011 Red Green Development. See LICENSE.txt for
further details.