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

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

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

38 ответов

57 просмотров

Для нормального опп не достаточно просто 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()’’’)

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

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

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

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

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта