208 похожих чатов

Добрый вечер. Нужно компонент news.list переделать из структурного в ООП.

То есть, насколько я понял все файлы остаются теми же, кроме component.php . Вместо него теперь class.php . И в классе описывается логика компонента, только теперь в ООП.
Проблема в том, что официальная документация Битрикса не помогает мне понять логику компонента. Если на уровне даты и время я понимаю логику, потому что там в файле component.php строчки 3-4, то у самого news.list ее понять проблематично, поскольку здесь уже около 600 строчек.
Какая логика в component.php у news.list? Как ее перенести в ООП в class.php? Где этот вопрос можно изучить, поскольку примеров конкретно на news.list я не нашел.

38 ответов

63 просмотра

Для нормального опп не достаточно просто class.php

Андрей
А что ещё нужно?

Я к тому что в одном классе все описывать не круто

Андрей
А что именно всё?

там 18кб кода по уму это все нужно разбивать не на 1 класс

Андрей- Автор вопроса
GX. ⚡️
там 18кб кода по уму это все нужно разбивать не на...

Да вот именно что его много, реально ли вообще такое выполнить?

Андрей
Да вот именно что его много, реально ли вообще так...

Реально. Хоть и незачем. Но раз у тебя нет понимания как компонент перевести на классы, значит либо плохо читал/смотрел курсы, либо недостаточный уровень знаний по php. Начни с чего-то попроще. Например, напиши свой несложный компонент (какой нибудь типа news list, только с простой логикой - обработка параметров, выборка, формирование массива, вывод). Потом перепиши его через класс. Или сразу напиши через класс, просто чтоб понять как оно работает. Если класс компонента перегружен логикой, то в битриксе обычно эта логика выносится в модуль. Но в твоём случае это не нужно, потому что задача ради задачи, а не для какой-то реальной пользы.

Андрей- Автор вопроса
Alexey Nazarov
Реально. Хоть и незачем. Но раз у тебя нет пониман...

О class.php очень мало информации, по крайней мере, в тексте.

Андрей
Да вот именно что его много, реально ли вообще так...

напоминает мою историю древнего мира: мне как то лет -цать назад поставили тестовую задачу - перенести лендинг с какого-то конструкта (возможно тильда, не помню) на битрикс, функционально писать оценил в неделю, но т.к. это была проверочная задача, я сохранил страницу целиком, накинул шаблон с админ панелью, и через полчаса сказал "готово", дольше битрикс разворачивал, чем задачу выполнял, проверка была пройдена, а скорость впечатлила заказчика)

Андрей
О class.php очень мало информации, по крайней мере...

Там насколько помню рассказано про методы для обработки параметров и вызова шаблона. Собственно, всё. Остальное это уже твоя логика. То есть в твоём случае, ты рефакторишь типовой компонент, разбивая эту портянку кода на небольшие понятные методы своего класса. По итогу работы методов должен быть сформирован $arResult ($this->arResult) Потом посмотри в курсе или типовых компонентах что происходит в методе executeComponent(). Про кэш в курсе тоже должно быть 100% (StartResultCache) Ну и для расширения кругозора и изучения темы под другими углами зрения можно просто погуглить. Сразу выползает что-то типа этого: https://www.youtube.com/watch?v=F0jYQdTEJEo https://ut11-web.ru/learning-eshop-on-1c-bitrix/support-class-in-components-bitrix/ и другие ссылки

Андрей- Автор вопроса
Михаил Сычев
напоминает мою историю древнего мира: мне как то л...

Ага, скорее всего так и есть. Знать бы что это за две волшебные строчки, которые нужно написать в class.php

Андрей- Автор вопроса
Андрей
Ага, скорее всего так и есть. Знать бы что это за ...

берешь класс, запихиваешь все в какой-нибудь метод, меняешь $arResult на $this->arResult $arParams на $this->arParams а вызов шаблона переносишь в метод executeComponent или сразу прям в него пихаешь все. и сдаешь постановщику со словами "какая задача, такое и решение"))) задача была в class.php перенести по факту выполнена, а как выполнена уже не обговаривалось, а это косяк постановщика, что не декомпозировал задачу)

Андрей- Автор вопроса

class.php Вот параметры в функции var1(); $arParams не может определить, скорее всего надо эту переменную прописать в скобках у var1(); но как потом это всё вывести в шаблон, подскажите пожалуйста?

Андрей- Автор вопроса
Samuel Green
подключить шаблон нужно

Так в функции executeComponent() внизу он разве не подключен?

Андрей
Так в функции executeComponent() внизу он разве не...

подключен, не обратил внимания, её обычно первой объявляют

Андрей- Автор вопроса
Андрей
Ребята, помогите, пожалуйста.

$this->arParams а также можно просто вызвать $this->var1() в executeComponent а в нем определить $this->arResult кто-то говорил что знает ООП🤔

Андрей- Автор вопроса
Андрей
Сейчас попробую

к томуже в шаблоне $arParams доступно

Андрей
screenshot Вот так что-ли?

$arResult и $arParams в классе не надо писать

Андрей
А где их писать?

в классе компонента $this->arResult $this->arParams в шаблоне $arResult $arParams

Андрей- Автор вопроса
Дмитрий Муравьёв
в шаблоне

Не понимаю, в шаблоне пишется только $arResult для вывода, зачем там $arParams

Андрей
Не понимаю, в шаблоне пишется только $arResult для...

если нужно использовать параметры компонента

Андрей- Автор вопроса
Артём Листиков
в классе компонента $this->arResult $this->arPara...

$this->arParams вывел данные - уже что-то. Спасибо

Андрей
screenshot Вот так что-ли?

‘’’private function var1()’’’)

Андрей- Автор вопроса
;) ))
‘’’private function var1()’’’)

Типа чтобы нельзя было ей воспользоваться за пределами класса?

Андрей
Типа чтобы нельзя было ей воспользоваться за преде...

Скорее придирка. Не приятно на такое смотреть

Андрей- Автор вопроса

Ребята! Задание выполнено! Всем спасибо, кто помогал! Без Вас бы я не уложился 🙏

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта