- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть сайт на Джумле 3.10 под нее написан самописный компонент (не мной). Есть желание перейти с php 7.4 на 8.2. Взял тестовый серв, перенес сайт. На фронте вроде без ошибок, все работает. Сайм функционал джумлы версии 3.10 тоже стабильно пашет под PHP 8.2, но вот с самописным компонентом есть ошибки. Некоторые смог исправить сам, а для других не хватает знаний, прошу помочь.
Первая ошибка - при попытки сохранить материал получаю ошибку
Я так понимаю в конструктор класса Тайбл приходит 1 значение, а нужно три. Вот конструктор родного класса джумлы (148 строка)
Я предполагаю, что проблема в модели (конкретно в конструкторе) самописного компонента (но возможно ошибаюсь). Логика такая - раз сохранение и редактирование родных материалов джумлы работает. Значит дело не в классе ядра, а в самописе.
Как это выяснить?
P.S. я проверил - в главный контструктор все три значения приходят и мне не понятно чего он ругается что пришло одно вместо трех
328 строка это уже не конструктор
328 строка это уже не конструктор
Это вызов конструктора, с одним аргументом вместо трёх.
Это вызов конструктора, с одним аргументом вместо трёх.
Почему тогда сохранение материалов родных Джумлы работает, а через самописный компонент нет? Все же идет через этот файл. Т.е. родной функционал Джумлы работает. Занчит причина где то в самописном компоненте, разве нет?
Почему тогда сохранение материалов родных Джумлы работает, а через самописный компонент нет? Все же идет через этот файл. Т.е. родной функционал Джумлы работает. Занчит причина где то в самописном компоненте, разве нет?
Посмотрите как вызывается класс в самописном компоненте
Посмотрите как вызывается класс в самописном компоненте
Насколько я понимаю, класс самописного компонента наследуется от стандартного класса JModelLegacy Джумлы (вероятно этот класс далее уже перекидывает запрос в класс Тейбл где и случается ошибка), а далее уже идут обычные CRUD методы
При нажатии сохранить запрос уходит в контроллер, метод apply
оттуда уже запрос идет в модель итем, метод store (class VuzModelItem extends JModelLegacy - начало этого класса в начале этого поста)
Вот тут меня смущает строка
$row =& $this->getTable();
я не совсем понимаю как работает передача по ссылке и вроде бы она может вызывать ошибку (но убирание ампеданса проблему не решает)
Но дальше этой строки запрос не идет, я проверил.
Изменения в версиях: https://www.php.net/manual/ru/migration80.incompatible.php
Я тоже в этом не разбираюсь, если что, но единственное что нашел подходящее - parent::__construct();
Но это я так, пальцем в небо. Больше для поднятия темы ))
Изменения в версиях: https://www.php.net/manual/ru/migration80.incompatible.php
Я тоже в этом не разбираюсь, если что, но единственное что нашел подходящее - parent::__construct();
Спасибо, так вроде же есть родитель, класс самописного компонента, где используется конструктор наследуется от стандартного класса ядра Джумлы
Но дальше этой строки запрос не идет, я проверил.
А внутри `getTable` на чём сыпется?
Я продвинулся немного дальше.
В общем в файле модели, в которм прописана логика сохранения/редактирования класс называется
VuzModelItem
в нем же в этом же файле есть метод
store()
который отвечает за кохранение, в нем и был вызов
getTable()
который вызывал ошибку, в сети нашел что в него нужно явно передать название класса, что я и сделал так
в результате запрос прошел дальше внутри этого метода и споткнулся о bind() внутри этого же метода чуть ниже. Ошибка такая
Call to undefined method VuzModelItem::bind()
/var/www/vuz/administrator/components/com_vuz/models/item.php:236
а вот весь код метода store(), вызов bind в нем же внизу...
Я посмотрел вывод $row - с виду выглядит как объект базы данных с названием VuzModelItem Object (данных много), но метода bind в нем реально нет. Данные передающиеся в $data для сохранения вполне правильные.
P.S. на хостинге с PHP 7.4. я тоже проверил объект$row
там он значительно меньше и называется TableItem Object, но что самое интересное в нем так же нет упоминания bind и тем не менее
на хостинге с PHP 7.4. возвращает 1 (единицу), хз откуда, но это факт.
при попытки сохранить материал получаю ошибку
Это исключение, которое отлавливает Джумла. Я при смене версий и прочих аналогичных действиях предпочитаю выводить все ошибки PHP - самые грубые в логе, а попроще - на экране. Бывает, что ошибка уровня "Замечание" приводит к потере данных, вследствие чего вываливается то, что на скрине в стартпосте.