Занимаетесь разработкой дополнений для CMS Bitrix и знаете своё дело? Казалось бы, в коде нет никаких изъянов и всё написано максимально четко и продуманно, но в конечном счете возникает ошибка?
Наверное многие сталкивались с таким досадным недоразумением и не могли понять в чем же кроется суть проблемы, а надоедливый «Class ‘CIBlockElement’ not found» продолжал мозолить и без того уставшие глаза.
Как оказалось, решить задачу несложно и нужно всего лишь добавить в верх вашего кода отсутствующий класс:
Проблема будто испарится сама по себе, а плагин вздохнет полной грудью! Впрочем, чтобы уж точно обезопасить свои нервы от подобного рода сюрпризов рекомендуем обернуть используемый код в следующее условие:
if(CModule::IncludeModule(«iblock»)) <
// Ваш код
>
Теперь вебмастер может спать спокойно, а если и появятся какие-нибудь ошибки, они не будут показаны пользователям, просматривающим элемент — зачастую такие нюансы портят и внешний вид дополнения, и мнение, которое складывается о нем у конечного пользователя.
рекомендованная Статья
Установка Bitrix должна выполняться с четким соблюдением всех нижеописанных правил. В противном случае система не заработает, и придется потратить время…
рекомендованная Статья2
Превью — это картинка в небольшом формате, которая весит гораздо меньше оригинала, не уступая ему по качеству. Вес изображения для…
При разработке дополнений для CMS Bitrix вы могли сталкиваться с ошибкой, которая звучит как «Class ‘CIBlockElement’ not found». Я в свое время тоже столкнулся с этой ошибкой, и было это, кстати говоря, в скрипте, который организовывает массовый ресайз изображений в этом движке.
Казалось бы, код не имеет никаких изъянов, но ошибка все равно есть. Оказывается, для ее решения в верх вашего кода нужно просто подключить отсутствующий класс:
А для еще большей надежности рекомендую ваш код обернуть в условие:
Тогда ошибки (если таковые возникнут) не будут показываться обычному пользователю.
От корня сайта создал класс:
/bitrix/templates/app/Pi/Test.php
Класс:
Пробую подключить в другом файле и заставить отработать:
Но пишет Class ‘appPi est’ not found
- Вопрос задан более трёх лет назад
- 3225 просмотров
Эээ. а что вы сделать то хотите ?
Я вот о чем говорю: при использовании ООП в bitrix вы сталкиваетесь сразу с 2 большими стенами — применение ооп и битрикс. Прежде чем разбирать конкретный код хотелось бы немножко просветить вас в самой архитектуре битрикса.
В терминологии Битрикса он использует концепцию MVC, но в рамках битрикса, а это означает что на любой странице где вы общаетесь с ним вы должны подключить пролог (хотя бы prolog_before) и эпилог (хотя бы epilog_after, ну в идеале). Именно «компонент» и является тем самым MVC (Вообще это скорее VC + row access, так как модели по сути нет). Есть класс CBitrixComponent (контроллер) и класс CBitrixComponentTemplate (который совместно с файлами шаблона и образует view).
Вызов компонента происходит из глобальной переменной $APPLICATION путем метода IncludeComponent. До версии 14 (если мне не изменяет память) вообще не было такого понятия как class.php, где можно было отнаследоваться от CBitrixComponent и перекрыть какие-нибудь функции (шаблонизатор к примеру сменить), а после нового ядра d7 появилась возможность отнаследоваться от CBitrixComponent и в файле class.php разместить свой код (таким образом мы сохраняем и class.php с новыми функциями и component.php с логикой), а перекрывая метод executeComponent вы можете избавиться и от component.php.
С точки зрения архитектуры (рекомендую изучить документацию, она очень обширна и познавательна) все компоненты должны лежать в так называемом пространстве имен, чем обычно служит ник-нейм или название компании (Естественно начинается не с цифры и содержит только латинские буквы), которые в свою очередь могут располагаться в /bitix/components/#пространство_имен#/#название_компонента#/
Теперь построчно разберем Ваш вопрос:
Вы положили свой класс сюда: /bitrix/templates/app/Pi/Test.php, что является неверным с точки зрения архитектуры, так как поместили класс отвечающий за контроллер в папку с шаблоном. Если вы не пишете свой модуль вы можете подключить его например в /local/php_interface/classes/ (пример надуманный, можете просто в /local/php_interface положить или сразу в init.php), однако для этого вы должны будете написать autoloader, так как у битрикса он работает только для модулей. Предположим вы в init.php напишете грубый require_once с файлом.
Затем вы делаете следующее:
Что является неверным, так как по сути вы обьявляете неймспейс для файла и это с точки зрения php выглядит вот так в конечном итоге:
class appPi est extends appPiCBitrixComponent
<
// .
>
А класса appPiCBitrixComponent не существует. Так что вам нужно поправить пример хотя бы так:
class test extends CBitrixComponent
Настоятельно рекомендую прочитать документацию или хотя бы посмотреть видео с академии битрикс. Сама система не подарок, а другой программист который увидит ваш код будет говорить что это битрикс виноват.