bitrix class ciblockelement not found

Занимаетесь разработкой дополнений для 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

Настоятельно рекомендую прочитать документацию или хотя бы посмотреть видео с академии битрикс. Сама система не подарок, а другой программист который увидит ваш код будет говорить что это битрикс виноват.

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: