0 Пользователей и 1 Гость просматривают эту тему.
  • 23 Ответов
  • 1475 Просмотров
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Добрый день.
Для перехода с J! 3 на J! 4 надо переписать собственные компоненты. Для административной части все сделано - вывод списка из таблиц, добавление и редактирование записей.
Но с выводом на front-end я что-то запуталась. Руководствовалась https://mb4.ru/cms/joomla4/883-j4-component-tutorial-mywalks-part-1-the-site-code.html и https://mb4.ru/cms/joomla4/727-j4-component-tutorial-mywalks-part-2-the-admin-code.html
Надо вывести по пункту меню index.php?option=com_card&view=cards записи из таблицы card (условно id и title)
Структура site компонента com_card:
Спойлер
[свернуть]
Файлы:
файл DisplayController.php   
Спойлер
[свернуть]
файл RouteHelper.php
--------------------------------
Спойлер
[свернуть]
===========================
файл router.php
---------------------------
Спойлер
[свернуть]
============================
файл CardNomenuRules.php
----------------------------
Спойлер
[свернуть]
После вызова компонента - сообщение
0 - Некорректный класс контроллера: display

Call stack
#   Function   Location
1   ()   JROOT\libraries\src\Dispatcher\ComponentDispatcher.php:178
2   Joomla\CMS\Dispatcher\ComponentDispatcher->getController()   JROOT\libraries\src\Dispatcher\ComponentDispatcher.php:145
3   Joomla\CMS\Dispatcher\ComponentDispatcher->dispatch()   JROOT\libraries\src\Component\ComponentHelper.php:389
4   Joomla\CMS\Component\ComponentHelper::renderComponent()   JROOT\libraries\src\Application\SiteApplication.php:204
5   Joomla\CMS\Application\SiteApplication->dispatch()   JROOT\libraries\src\Application\SiteApplication.php:243
6   Joomla\CMS\Application\SiteApplication->doExecute()   JROOT\libraries\src\Application\CMSApplication.php:278
7   Joomla\CMS\Application\CMSApplication->execute()   JROOT\includes\app.php:63
8   require_once()   JROOT\index.php:32
==================================
JROOT\libraries\src\Dispatcher\ComponentDispatcher.php:178
   // Check if the controller could be created
      if (!$controller)
      {
         throw new \InvalidArgumentException(Text::sprintf('JLIB_APPLICATION_ERROR_INVALID_CONTROLLER_CLASS', $name));
      }

Прошу помочь, пожалуйста.







*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Вы создавали файл СardsController.php ?
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Вы создавали файл СardsController.php ?
Нет, не создавала. Тупо Следовала руководству, на которое я ссылалась. Я этот компонент Mywalks скачала и установила, он работает.
В своих компонентах для административной части у меня контроллеры есть и для Card и для Cards.
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
В своих компонентах для административной части у меня контроллеры есть и для Card и для Cards.
Для front-end аналогично!

Для каждого представления (view) нужен свой файл контроллера!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Для front-end аналогично!

Для каждого представления (view) нужен свой файл контроллера!
В административной части для компонента com_card (работает!) такие контроллеры:

=========================
DisplayController.php
------------------------
Спойлер
[свернуть]
==========================
файл CardsController.php
-------------------
Спойлер
[свернуть]

А в компоненте com_card для J!3 (работающая версия ) для front-end

Спойлер
[свернуть]

Не могли бы Вы проконсультировать, как должны выглядеть контроллеры для сайта на J!4 (front-end)?
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Код: php
<?php namespace Nioch\Component\Card\Site\Controller;

defined('_JEXEC') or die;

use \Joomla\CMS\MVC\Controller\BaseController;

class CardsController extends BaseController {}
У Вас namespace не верно прописан!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Код: php
<?php namespace Nioch\Component\Card\Site\Controller;

defined('_JEXEC') or die;

use \Joomla\CMS\MVC\Controller\BaseController;

class CardsController extends BaseController {}
У Вас namespace не верно прописан!
Где именно у меня  namespace не верно прописан?
В предыдущем сообщении я привела:
1. тексты контроллеров для административной части компонента com_card для J!4
2. текст контроллера для фронт-енд для моего компонента com_card в J!3

Контроллера для фронт-енд компонента com_card для J!4 у меня вообще пока нет.
Ваш код для контроллера для фронт-енд ?
Код: php
<?php namespace Nioch\Component\Card\Site\Controller;

defined('_JEXEC') or die;

use \Joomla\CMS\MVC\Controller\BaseController;

class CardsController extends BaseController {}
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Контроллера для фронт-енд компонента com_card для J!4 у меня вообще пока нет.
Он должен быть!
Где именно у меня  namespace не верно прописан?
Простите, это я не там посмотрел!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0

Он должен быть!Простите, это я не там посмотрел!
Там, там Вы посмотрели! Действительно, в файле DisplayController.php   в моем первом сообщении была ошибка. Извините!
Вот такие контроллеры (front-end)
DisplayController.php
Спойлер
[свернуть]
и CardsController.php
Спойлер
[свернуть]
Теперь новая ошибка
0 - Attempt to assign property "hideEmptyLimitstart" on null

Call stack
#   Function   Location
1   ()   JROOT\components\com_card\src\View\Cards\HtmlView.php:80
2   Nioch\Component\Card\Site\View\Cards\HtmlView->display()   JROOT\libraries\src\MVC\Controller\BaseController.php:697
3   Joomla\CMS\MVC\Controller\BaseController->display()   JROOT\components\com_card\src\Controller\DisplayController.php:44
4   Nioch\Component\Card\Site\Controller\DisplayController->display()   JROOT\libraries\src\MVC\Controller\BaseController.php:735
5   Joomla\CMS\MVC\Controller\BaseController->execute()   JROOT\libraries\src\Dispatcher\ComponentDispatcher.php:146
6   Joomla\CMS\Dispatcher\ComponentDispatcher->dispatch()   JROOT\libraries\src\Component\ComponentHelper.php:389
7   Joomla\CMS\Component\ComponentHelper::renderComponent()   JROOT\libraries\src\Application\SiteApplication.php:204
8   Joomla\CMS\Application\SiteApplication->dispatch()   JROOT\libraries\src\Application\SiteApplication.php:243
9   Joomla\CMS\Application\SiteApplication->doExecute()   JROOT\libraries\src\Application\CMSApplication.php:278
10   Joomla\CMS\Application\CMSApplication->execute()   JROOT\includes\app.php:63
11   require_once()   JROOT\index.php:32

В файле View/Cards/HtmlView.php
Спойлер
[свернуть]
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
0 - Attempt to assign property "hideEmptyLimitstart" on null
Закоментите 3 строки
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #10 : 08.08.2022, 20:48:58 »
Закоментите 3 строки
Закоментировала.
Новое сообщение: 0 - count(): Argument #1 ($value) must be of type Countable|array, null given
JROOT\components\com_card\src\View\Cards\HtmlView.php:85
Вот эта строка:
// Check for errors.
      if (count($errors = $this->get('Errors')))
      {
         throw new GenericDataException(implode("\n", $errors), 500);
      }
=============
Вообще я print_r(&params) поставила,
params: Joomla\Registry\Registry Object
(
    [data:protected] => stdClass Object
        (
            [show_page_heading] => 0
            [menu_text] => 1
            [menu_show] => 1
            [page_title] => Наука
            [page_description] =>
            [page_rights] =>
            [robots] =>
        )

    [initialized:protected] => 1
    [separator] => .
)
И еще. Хотя в пункте меню вызова компонента ссылка index.php?option=com_card&view=cards

В строке навигации http://nioch/index.php/ru/nauka?view=cards
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #11 : 08.08.2022, 20:54:08 »
Сделайте вот так (замените полностью функцию display в файле View/Cards/HtmlView.php)!
Код: php
public function display($tpl = null)
{
    echo __FILE__;
}
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #12 : 08.08.2022, 21:17:04 »
Сделайте вот так (замените полностью функцию display в файле View/Cards/HtmlView.php)!
Код: php
public function display($tpl = null)
{
    echo __FILE__;
}
404 - Не удалось найти представление [name, type, prefix]: cards, HTML, site.
Call stack
#   Function   Location
1   ()   JROOT\libraries\src\MVC\Controller\BaseController.php:903
2   Joomla\CMS\MVC\Controller\BaseController->getView()   JROOT\libraries\src\MVC\Controller\BaseController.php:646
3   Joomla\CMS\MVC\Controller\BaseController->display()   JROOT\components\com_card\src\Controller\DisplayController.php:44
4   Nioch\Component\Card\Site\Controller\DisplayController->display()   JROOT\libraries\src\MVC\Controller\BaseController.php:735
5   Joomla\CMS\MVC\Controller\BaseController->execute()   JROOT\libraries\src\Dispatcher\ComponentDispatcher.php:146
6   Joomla\CMS\Dispatcher\ComponentDispatcher->dispatch()   JROOT\libraries\src\Component\ComponentHelper.php:389
7   Joomla\CMS\Component\ComponentHelper::renderComponent()   JROOT\libraries\src\Application\SiteApplication.php:204
8   Joomla\CMS\Application\SiteApplication->dispatch()   JROOT\libraries\src\Application\SiteApplication.php:243
9   Joomla\CMS\Application\SiteApplication->doExecute()   JROOT\libraries\src\Application\CMSApplication.php:278
10   Joomla\CMS\Application\CMSApplication->execute()   JROOT\includes\app.php:63
11   require_once()   JROOT\index.php:32
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #13 : 08.08.2022, 21:19:26 »
Страшно даже представить как Вы заменили функцию!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #14 : 08.08.2022, 21:27:18 »
echo __FILE__;
Дауж!
Исправила, получилось на экране
F:\OpenServer\domains\nioch\components\com_card\src\View\Cards\HtmlView.php
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #15 : 08.08.2022, 22:14:12 »
Значит страница у Вас работает! Добавьте нужный функционал в функцию display и файл представления и страница готова!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #16 : 09.08.2022, 09:54:22 »
[
Значит страница у Вас работает! Добавьте нужный функционал в функцию display и файл представления и страница готова!
К сожалению, нет...
И не по тому, что на этой странице неправильный код
Код: php
public function display($tpl = null)
{
//echo __FILE__;
$app    = Factory::getApplication();
$params = $app->getParams();

// Get some data from the models
$state      = $this->get('State');
//echo '<pre>state'; print_r($state); exit();
$items      = $this->get('Items');

$pagination = $this->get('Pagination');
//echo '<pre>pagination'; print_r($pagination); exit();
// Flag indicates to not add limitstart=0 to URL
$pagination->hideEmptyLimitstart = true;

// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new GenericDataException(implode("\n", $errors), 500);
}

$this->state      = &$state;
$this->items      = &$items;
$this->params     = &$params;
$this->pagination = &$pagination;

return parent::display($tpl);
}
а потому, как я понимаю, что по пути на эту страницу я уродую ссылку $app    = Factory::getApplication(); Поэтому ни
$state      = $this->get('State');
ни
$items      = $this->get('Items'); и пр. не выполняются правильно (вообще в модель не заходит)


Пункт меню, по которому должен выводиться список из таблицы index.php?option=com_card&view=cards
а на странице с указанием на ошибку навигатор показывает http://nioch/index.php/ru/nauka?view=cards и ошибка
0 - count(): Argument #1 ($value) must be of type Countable|array, null given
Спойлер
[свернуть]
(((
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #17 : 09.08.2022, 10:31:43 »
Файл модели для этой страницы создавали?
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #18 : 09.08.2022, 11:22:27 »
Ea
Файл модели для этой страницы создавали?
Создавала. Но с ошибкой: namespace Nioch\Component\Administrator\Site\Model;
Исправила.
Огромное Вам спасибо!
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #19 : 09.08.2022, 11:57:25 »
Страница заработала как надо?
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #20 : 09.08.2022, 13:25:40 »
Страница заработала как надо?
Да, список выводится. Это телефонный справочник, поэтому объединены несколько таблиц. Надо еще добавить поисковые возможности (по фио и/или из списка лабораторий).
Еще раз - огромное спасибо.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #21 : 09.08.2022, 15:45:42 »
Еще раз прошу помочь.

Если файл tmpl\cards\default.php не содержит форму, то выводятся первые X записей справочника
Спойлер
[свернуть]

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

<form action="<?php echo Route::_('index.php?option=com_card'); ?>" method="post" name="adminForm" id="adminForm">
....
....
....

               <?php // load the pagination. ?>
               <?php echo $this->pagination->getListFooter(); ?>

            
            <input type="hidden" name="task" value="">
            <input type="hidden" name="boxchecked" value="0">
            <?php echo HTMLHelper::_('form.token'); ?>
</form>
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Проблема вывода компонента на Front-end
« Ответ #22 : 09.08.2022, 15:52:09 »
Изучите данный функционал в стандартном компоненте менеджера материалов (view category)
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Re: Проблема вывода компонента на Front-end
« Ответ #23 : 09.08.2022, 16:09:21 »
Изучите данный функционал в стандартном компоненте менеджера материалов (view category)
Спасибо
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменение порядка вывода Сustom Fields в админке

Автор muzzy76

Ответов: 0
Просмотров: 87
Последний ответ 16.04.2024, 15:01:40
от muzzy76
Проблема с Менеджером пользователей

Автор AlexanderFyodorov

Ответов: 0
Просмотров: 391
Последний ответ 05.02.2024, 19:13:06
от AlexanderFyodorov
Проблема с пользовательскими полями

Автор Lemonez

Ответов: 1
Просмотров: 218
Последний ответ 04.12.2023, 09:19:13
от sivers
Проблема с: Расширения: Серверы обновлений

Автор artemnaum

Ответов: 6
Просмотров: 365
Последний ответ 03.12.2023, 09:10:38
от artemnaum
Модуль с возможностью вывода списка выбранных тегов

Автор dron

Ответов: 0
Просмотров: 203
Последний ответ 26.10.2023, 14:21:42
от dron