if (CModule::IncludeModule(«iblock»)):
1) Модуль может быть удален
2) Битрикс может быть загружен в safe_mode, там есть только fileman&kernel
3) Ну и вправду, вдруг не подключится? =)
4) До инициализации модуля в автозагрузчике нет классов модуля, т.е. при вызове \Bitrix\Iblock\ElementTable::getById() получите fatal error.
В догонку. Чтобы не проверять постоянно условие включения этого модуля, я обычно прописываю его в init.php, т.к. представить функционал без молуля инфоблоков весьма сложно.
Но нужно иметь в виду, что теоретически такой функционал действительно может быть. Кроме того, некто может эту строку из init.php ислючить, и тогда всё рухнет, и т.п. Т.е. данное действите тоже должно быть осознанным, а не правилом в каждом проекте.
Коллеги, прошу поправить меня, если я жестоко не прав.
| Цитата |
|---|
| Юрий Удовиченко написал: В догонку. Чтобы не проверять постоянно условие включения этого модуля, я обычно прописываю его в init.php, т.к. представить функционал без молуля инфоблоков весьма сложно. Но нужно иметь в виду, что теоретически такой функционал действительно может быть. Кроме того, некто может эту строку из init.php ислючить, и тогда всё рухнет, и т.п. Т.е. данное действите тоже должно быть осознанным, а не правилом в каждом проекте. |
Коллеги, прошу поправить меня, если я жестоко не прав.
| Цитата |
|---|
| Вячеслав Большагин написал: Мне кажется лучше его подключать самому, потому что он не всегда нужен, а если он не нужен то зачем его подключать? Тратить на это ресурсы? |
Ресурс довольно небольшой, в виде нескольких классов, которые нужны почти везде. Если, конечно у вас много своих наработок, ajax-запросов и т.п. — тогда конечно. Об этом я и упомянул выше, сказав, что это не должно быть правилом.
Вообще, если поразмыслить, любой компонент подключает модуль автоматически. А одним из главным правилом битрикса является — всё должно быть в компонентах. Соответственно вопрос должен отпадать сам собой
Источник
if (CModule::IncludeModule(«iblock»)):
1) Модуль может быть удален
2) Битрикс может быть загружен в safe_mode, там есть только fileman&kernel
3) Ну и вправду, вдруг не подключится? =)
4) До инициализации модуля в автозагрузчике нет классов модуля, т.е. при вызове \Bitrix\Iblock\ElementTable::getById() получите fatal error.
В догонку. Чтобы не проверять постоянно условие включения этого модуля, я обычно прописываю его в init.php, т.к. представить функционал без молуля инфоблоков весьма сложно.
Но нужно иметь в виду, что теоретически такой функционал действительно может быть. Кроме того, некто может эту строку из init.php ислючить, и тогда всё рухнет, и т.п. Т.е. данное действите тоже должно быть осознанным, а не правилом в каждом проекте.
Коллеги, прошу поправить меня, если я жестоко не прав.
| Цитата |
|---|
| Юрий Удовиченко написал: В догонку. Чтобы не проверять постоянно условие включения этого модуля, я обычно прописываю его в init.php, т.к. представить функционал без молуля инфоблоков весьма сложно. Но нужно иметь в виду, что теоретически такой функционал действительно может быть. Кроме того, некто может эту строку из init.php ислючить, и тогда всё рухнет, и т.п. Т.е. данное действите тоже должно быть осознанным, а не правилом в каждом проекте. |
Коллеги, прошу поправить меня, если я жестоко не прав.
| Цитата |
|---|
| Вячеслав Большагин написал: Мне кажется лучше его подключать самому, потому что он не всегда нужен, а если он не нужен то зачем его подключать? Тратить на это ресурсы? |
Ресурс довольно небольшой, в виде нескольких классов, которые нужны почти везде. Если, конечно у вас много своих наработок, ajax-запросов и т.п. — тогда конечно. Об этом я и упомянул выше, сказав, что это не должно быть правилом.
Вообще, если поразмыслить, любой компонент подключает модуль автоматически. А одним из главным правилом битрикса является — всё должно быть в компонентах. Соответственно вопрос должен отпадать сам собой
Источник
Проблемы с внутренними ссылками
Добрый день.
Сайт работал успешно до момента добавления второго и установки на него купленного шаблона.
Как выяснилось были неверно указаны корневые папки сервера в настройках сайта.
В итоге запустились нормально и основной сайт и дополнительный, но наблюдается следующая проблема.
На основном сайте при попытке зайти в каталог товаров можно увидеть ссылку вида ru/catalogsublimatsiya_i_termoperenos — перейдя по ней можно наблюдать ошибку 404. если ручками привести ее к виду .ru/catalog/sublimatsiya_i_termoperenos/ она заходит туда куда надо.
Второй пример .ru/catalog/rezaki_diskovye/catalogrezaki_diskovye_bulros приводим к виду .ru/catalog/rezaki_diskovye_bulros/ заходит нормально.
На втором сайте ссылки вида ru/catalog/ работают, позиции видно, когда пытаюсь попасть на любую позицию внутри присваивает им ссылки вида ru/catalog/catalogdivany но тут подобрать руками правильный вариант сходу не вышло.
Собственно вопрос, куда смотреть, где вероятнее всего проблема и метод ее решения?
Заранее спасибо.
| Цитата |
|---|
| Артём Сербин написал: Смотрите ЧПУ у Вас наверно не хватает слеша «/», сейчас наверно так — /catalog, должно быть так — /catalog/Либо в компоненте либо в настройке инфоблока. |
Денис Сон, установили шаблон Factory
а где именно находятся настройки слэшей и если дело не в настройках компоненты или инфоблока, то куда надо будет копать?
| Цитата |
|---|
| Игорь Акулич написал: установили шаблон Factory |
А, не, мой клиент устанавливал шаблон Хамелеон.
Значит проблема не в решении.
Сначала нужно сделать подготовительные работы:
- проверить настройки нужного инфоблока, чтобы шаблоны ссылок были верными,
- затем сделать проверку сайта чтобы она не показывала ошибок,
- проверить монитором качества чтобы в модуле инфоблоков не было измененных файлов ядра,
- сбросить кеш,
- проверить, отдает ли CIBlockSection::GetList() правильные или неправильные ссылки.
Далее я уже не успел разобраться (как и говорил, клиент развернул бэкап). Но я бы попробовал еще установить все стабильные обновления Битрикса, если не установлены, временно отключить htaccess и urlrewrite.php (после этого также проверить). И затем если проблема останется — проводить отладку, т.е. смотреть где выполняется CIBlockElement::GetList() и делать проверки там, затем выше по коду, затем еще выше. Работка нескучная, но может быть сложной. В итоге, как часто бывает, может оказаться что все работает правильно, а где-то какая-то настройка (или недонастройка) все ломает.
измененные файлы ядра есть и даты вроде бы совпадают со временем установки:
Источник
Как в админском модуле подключить модуль.
В общем проблема слудующая.Есть модуль расширяющий функционал инфоблоков, а именно переносит элемент из одного ИБ в Другой.
Но при этом цены он не переносит.
Хочу его дописать.
И вот вся загвоздка в том что не пашет этот код CModule::IncludeModule(‘catalog’);
И следовательно класс СPrice неопределенн.
Как подключить этот класс?
ну вообще да. заходит.
if(CModule::IncludeModule(‘catalog’)) <
$res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => $ID,
)
);
if ($arr = $res->Fetch())
<
CCatalogProduct::Add($PRODUCT_ID);
$arr[‘PRODUCT_ID’]=$PRODUCT_ID;
CPrice::Add($arr);
>
>
В строке CPrice::Add($arr); ошибка. не пойму что не так.
| Цитата |
|---|
| kudinsasha пишет: включай вывод ошибок в пхп и гледи что не так |
Говорю же проблемный скрипт аяксом выполняется
| Цитата |
|---|
| MyIEpenza пишет: addmessage2log |
Чувак.
Проверь наличие класса cprice и ccatalogpoduct. class_exists
и запиши по рузульттам проверки слово «класс подключен» или «класс не подключен».
добавь в лог $ID
добавь в лог $PRODUCT_ID
добавь в лог $arr
если не умеешь отлаживать скрипты, почитай про отладку (тестирование) как про шаг разработки ПО в целом
—————
Ты ленивый, жесть — CPrice::Add
| Цитата |
|---|
| Возвращает идентификатор добавленной цены в случае успешного сохранения и false — в противном случае. Для получения детальной информации об ошибке следует вызвать $APPLICATION->GetException(). |
| Цитата |
|---|
| Алексей Гребнев пишет: Ты ленивый, жесть |
Спасибо! Учел, исправляюсь.
Вот какая ошибка при добавлении цены
2012-05-22 14:51:23 — main — File: /home/technora/public_html/tr/bitrix/modules/catalog/mysql/p rice.php
Line: 35 MySql Query Error: INS ERT INTO b_catalog_price(`QUANTITY_TO`, `QUANTITY_FROM`, `TIMESTAMP_X`, `CURRENCY`, `PRICE`, `CATALOG_GROUP_ID`, `PRODUCT_ID`, `ID`) VAL UES( NULL , NULL , ‘21.05.2012 17:55:55’, ‘RUB’, ‘110’, ‘1’, ‘2063’, ‘737’) [Duplicate entry ‘737’ for key ‘PRIMARY’]
Duplicate entry ‘737’ for key ‘PRIMARY’ — беда вылечилась unset($arr[‘ID’]);
Источник
Для разработчиков
Описание
Модуль Информационные блоки — мощный и в то же время гибкий механизм для хранения и выборки информации различными способами. API модуля состоит из нескольких высокоуровневых функций для выборки данных в публичном разделе сайта и набора классов с низкоуровневыми методами для более специализированной работы.
Перед использованием модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:
Для получения данных при показе в публичном разделе сайта можно пользоваться функциями с простыми параметрами и предустановленными фильтрами. Эти функции выбирают по умолчанию те значения, которые подходят для места выборки, а именно только активные, привязанные к текущему сайту, подходящие по правам доступа и т.п.
Вся работа с датами через API (вставка, выборка, фильтры и т.п.) производится в формате текущего сайта или, если в административной части, в формате текущего языка.
Публичные функции и возвращаемые значения
| Метод | Описание | С версии |
|---|---|---|
| GetIBlockList | Возвращает список информационных блоков по фильтру. | 3.0.5 |
| GetIBlock | Возвращает информационный блок по заданному коду. | 3.0.5 |
| GetIBlockElementListEx | Возвращает список элементов по фильтру. | 3.0.5 |
| GetIBlockElementList | Возвращает список элементов из определённого информационного блока. | 3.0.5 |
| GetIBlockElement | Возвращает элемент по заданному коду. | 3.0.5 |
| GetIBlockSectionList | Возвращает список папок из определённого информационного блока. | 3.0.5 |
| GetIBlockSection | Возвращает раздел по заданному коду. | 3.0.5 |
Если ваша задача более специфична и публичных функций недостаточно, или необходимо не только выбрать, но и изменить данные, то необходимо воспользоваться набором классов для работы с объектами модуля информационных блоков.
Классы модуля информационных блоков
| Класс | Описание | С версии |
|---|---|---|
| CIBlock | Класс для работы с информационными блоками. | 3.0.3 |
| CIBlockCMLExport | Класс для экспорта данных инфоблока в xml-формате. | 6.5.0 |
| CIBlockCMLImport | Класс для импорта данных инфоблока в xml-формате. | 6.5.0 |
| CIBlockElement | Класс для работы с элементами информационных блоков. | 3.0.5 |
| CIBlockFormatProperties | 5.9.0 | |
| CIBlockPriceTools | 5.9.0 | |
| CIBlockProperty | класс для работы со свойствами информационных блоков. | 3.0.3 |
| CIBlockPropertyEnum | Класс для работы с вариантами значений для свойств типа «список». | 3.1.3 |
| CIBlockResult | Вспомогательный класс для работы с объектами результатов выборок. | 3.0.5 |
| CIBlockRSS | Класс для работы с RSS лентами. | 3.0.14 |
| CIBlockSection | Класс для работы с группами информационных блоков. | 3.0.4 |
| CIBlockType | Класс для работы с типами информационных блоков. | 3.1.3 |
| CIBlockXMLFile | Класс для работы с файлами XML. | 6.5.0 |
| Пользовательские свойства | Позволяют изменять представление (формы ввода и т.п.) стандартных свойств расширяя их возможности. | 5.1.0 |
| _CIBElement | Вспомогательный класс для работы с объектом выборки элемента. | 3.1.3 |
Компоненты 2.0
Модуль включает в себя следующие Компоненты 2.0:
| Компоненты модуля | ||
|---|---|---|
| Название | Имя в пространстве имен bitrix | Описание |
| Новости | ||
| Новости (комплексный компонент) | news | Позволяет создать новостной раздел на сайте. |
| Календарь | news.calendar | Служит для формирования и вывода календаря новостей или событий. |
| Новость детально | news.detail | Осуществляет вывод детального описания новости. |
| Все новости | news.index | Выводит новости из различных инфоблоков. |
| Лента | news.line | Осуществляет вывод списка элементов инфоблоков с датой и заголовком со ссылкой на страницу с подробной информацией. |
| Список новостей | news.list | Выводит список новостей из одного информационного блока. |
| Фотогалерея | ||
| Фотогалерея (комплексный компонент) | photo | Позволяет получить полнофункциональную фотогалерею, создавая физически только одну страницу. |
| Фотография детально | photo.detail | Выводит детальную информацию по фотографии. |
| Случайное фото | photo.random | Служит для показа одной произвольной фотографии. |
| Фотографии раздела | photo.section | Выводит все фотографии из выбранного раздела. |
| Разделы с TOP’ом фотографий | photo.sections.top | Служит для вывода TOP’а фотографий, сгруппированных по разделам. |
| Фотогалерея 2.0 | ||
| Фотогалерея 2.0 (комплексный компонент) | photogallery | Позволяет получить полнофункциональную фотогалерею, создавая физически только одну страницу. |
| Фото | photogallery.detail | Выводит детальную информацию по фотографии. |
| Фото (комментарии) | photogallery.detail.comment | Служит для создания комментариев к фотографии. |
| Фото (редактирование) | photogallery.detail.edit | Служит для редактирования свойств фотографии. |
| Фото (список) | photogallery.detail.list | Выводит список фотографий. |
| Список фото со слайдером | photogallery.detail.list.ex | Выводит список фотографий во всплывающем окне со слайдером и комментариями. |
| Фотогалерея (редактирование) | photogallery.gallery.edit | Выводит форму редактирования параметров фотогалереи пользователя. |
| Фотогалерея (список) | photogallery.gallery.list | Выводит список фотогалерей пользователя. |
| Фотогалерея (шаблоны) | photogallery.interface | Подключает библиотеку вспомогательных шаблонов. Компонент ничего не выводит. |
| Flash-слайдшоу (Не поддерживается с версии 15.0.0) | photogallery.imagerotator | Циклически проигрывает фотографии из фотогалереи. |
| Альбом | photogallery.section | Выводит полную информацию об одном альбоме. |
| Альбом (редактирование) | photogallery.section.edit | Позволяет отредактировать данные альбома: изменить название, дату создания, ввести описание, ограничить доступ к альбому по паролю. |
| Альбом (редактирование обложки) | photogallery.section.edit.icon | Служит для редактирования обложки альбома. |
| Альбом (список) | photogallery.section.list | Выводит список альбомов с информацией о количестве фотографий, вложенных альбомов в каждом и ссылками на просмотр содержимого альбомов. |
| Фото (загрузка) | photogallery.upload | Служит для загрузки фотографии. |
| Панель | photogallery.user | Выводит информацию о галерее пользователя. |
| Фотогалерея 2.0 (многопользовательская) (комплексный компонент) | photogallery_user | Позволяет получить полнофункциональную многопользовательскую фотогалерею, создавая физически только одну страницу. |
| Каталог | ||
| Каталог (комплексный компонент) | catalog | Осуществляет вывод полного каталога товаров из определенного инфоблока. |
| Список сравниваемых элементов каталога | catalog.compare.list | Выводит список сравниваемых элементов каталога в виде небольшой таблицы. |
| Таблица сравнения | catalog.compare.result | Выводит таблицу сравниваемых элементов каталога. |
| Элемент каталога детально | catalog.element | Выводит детальную информацию по элементу каталога. |
| Фильтр по элементам | catalog.filter | Выводит форму фильтра для фильтрации элементов информационых блоков. |
| Список связанных элементов | catalog.link.list | Выводит список элементов, связанных с заданным. |
| Список информационных блоков заданного типа | catalog.main | Выводит список всех информационных блоков заданного типа. |
| Элементы раздела | catalog.section | Выводит список элементов раздела с указанным набором свойств. |
| Структура разделов | catalog.section.list | Выводит список разделов инфоблока с указанным количеством элементов в каждом разделе. |
| Разделы с top’ом элементов | catalog.sections.top | Выводит Top элементов сгруппированных по разделам; элементы выводятся в таблице. |
| Top элементов каталога | catalog.top | Выводит в таблице Top элементов из всех разделов в соответствии с заданной сортировкой (используется как правило на главной странице сайта). |
| RSS | ||
| RSS новости (экспорт) | rss.out | Предназначен для создания страницы, которая отдает выбранные новости вашего сайта в формате RSS. |
| RSS новости (импорт) | rss.show | Предназначен для импорта новостей с другого сайта. |
| Добавление элементов | ||
| Добавление элементов инфоблока (комплексный компонент) | iblock.element.add | Осуществляет вывод списка элементов указанного инфоблока, добавление/редактирование элементов и их удаление в зависимости от прав пользователя. |
| Форма добавления / редактирования | iblock.element.add.form | Осуществляет вывод формы создания (редактирования) элемента указанного информационного блока. |
| Список своих элементов | iblock.element.add.list | Осуществляет вывод списка доступных пользователю элементов указанного инфоблока, ссылок Добавить, Редактировать, Удалить. |
| Инфоблоки | ||
| Голосование | iblock.vote | Реализует возможность голосования для пользователей. |
| Универсальные списки | ||
| Универсальные списки | lists | Позволяет вести полнофункциональную работу с универсальными списками, создавая физически только одну страницу. |
| Списки | lists.lists | Выводит таблицу универсальных списков, доступных для просмотра и изменения. |
| Список | lists.list | Выводит разделы и элементы универсального списка с возможностью навигации и редактирования. |
| Разделы списка | lists.sections | Позволяет удалить и изменить разделы универсального списка. |
| Редактирование элемента | lists.element.edit | Выводит форму редактирования элемента списка. |
| Настройки списка | lists.list.edit | Показывает форму настроек универсального списка. |
| Поля списка | lists.fields | Показывает поля универсального списка и позволяет их редактировать. |
| Настройки поля списка | lists.field.edit | Показывает форму настройки поля универсального списка. |
| Навигационная цепочка | lists.element.navchain | Добавляет к выводу обычного компонента Навигационная цепочка (bitrix:breadcrumb) элемент списка. |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник