Новости Joomla

Вышли релизы безопасности Joomla 5.3.4 и Joomla 4.4.14

Релиз безопасности Joomla 5.3.4

Проект Joomla спешит сообщить о выпуске Joomla 5.3.4 и Joomla 4.4.14. Это релиз безопасности для серии Joomla 5.3 и релиз безопасности для серии Joomla 4.4.

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

leha111

  • Захожу иногда
  • 226
  • 0 / 0
При создании компонента создается база данных. Надо достать данные из неё и, пока что, абы как вывести на странице в админке.

Код
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" method="upgrade">
<!-- атрибут 'version' для тега расширения больше не используется -->
 
    <name>School Tech</name>
    <!-- Следующие элементы являются необязательными и не содержат ограничений на форматирование -->
    <creationDate></creationDate>
    <!-- Фиктивный автор, не стесняйтесь заменять его в любом месте, где вы его видите -->
    <author>Mu Compani</author>
    <authorUrl></authorUrl>
    <copyright></copyright>
    <license>0.0.1</license>
    <!-- Строка 'version' записывается в таблицу компонентов -->
    <version>0.0.8</version>
    <!-- Описание является необязательным и по умолчанию используется имя сомпонента -->
    <description>
        Контент для сайта
    </description>
 
    <namespace path="src/">MuCompani\Component\SchoolTech</namespace>

<files folder="site/">
<folder>language</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>

<languages>
<language tag="en-GB">site/language/en-GB/en-GB.com_schooltech.ini</language>
<language tag="ru-RU">site/language/ru-RU/ru-RU.com_schooltech.ini</language>
</languages>
           
    <administration>
        <!-- Ссылка, которая появится в меню админки Joomla "Components" -->
        <menu>SchoolTech</menu>
<submenu>
<menu link="option=com_schooltech&amp;view=trainingprograms">COM_SCHOOLTECH_TRAINING_PROGRAMS</menu>
</submenu>

        <!-- Список файлов и папок для копирования.
             Обратите внимание на атрибут "folder".
             Это имя папки в пакете компонентов для копирования в CMS Joomla 4. -->
        <files folder="admin/">
<folder>language</folder>
            <folder>services</folder>
<folder>sql</folder>
            <folder>src</folder>
            <folder>tmpl</folder>
        </files>

<languages>
            <language tag="en-GB">admin/language/en-GB/en-GB.com_schooltech.ini</language>
            <language tag="en-GB">admin/language/en-GB/en-GB.com_schooltech.sys.ini</language>
<language tag="ru-RU">admin/language/ru-RU/ru-RU.com_schooltech.ini</language>
            <language tag="ru-RU">admin/language/ru-RU/ru-RU.com_schooltech.sys.ini</language>
        </languages>
    </administration>

<install>
        <sql>
            <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
        </sql>
    </install>
    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>
<update>
        <schemas>
            <schemapath type="mysql">sql/mysql</schemapath>
        </schemas>
    </update>
 
</extension>

sql/install.mysql.utf8.sql

Код
CREATE TABLE `#__schooltech_training_programs` ( 
    `id` SERIAL NOT NULL,
    `name` VARCHAR(200) NOT NULL,
    `published` BOOLEAN NOT NULL DEFAULT FALSE,
`description` MEDIUMTEXT,
`education_time` INT,
`document` MEDIUMTEXT,
    PRIMARY KEY (`id`)
) ENGINE = InnoDB;

INSERT INTO `#__schooltech_training_programs` (`name`) VALUES
    ('TEST1'),
    ('TEST2');

src/View/Trainingprograms/HtmlView.php
Код
namespace MuCompani\Component\SchoolTech\Administrator\View\Trainingprograms;

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Toolbar\Toolbar;
use Joomla\CMS\Toolbar\ToolbarHelper;
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * [member=126442]copyright[/member]   Copyright (C) 2021 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

/**
 * Основной вид в админке "SchoolTech"
 */
class HtmlView extends BaseHtmlView {

//Массив значений для вывода учебных программ
protected $items;
    /**
     * Отображение основного вида "SchoolTech"
     *
     * @param   string  $tpl  Имя файла шаблона для анализа; автоматический поиск путей к шаблону.
     * @return  void
     */
    function display($tpl = null) {

$this->items= $this->get('Items');//Объекты для отображения
var_dump($this->items);

        parent::display($tpl);
    }


}

src/Model/TrainingprogramsModel.php
Код
namespace MuCompani\Component\SchoolTech\Administrator\Model;

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Utilities\ArrayHelper;

class ContactsModel extends ListModel
{
protected function getListQuery(){

//Создаем новый query объект
$db = $this->getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser();

//Выберем необходимые поля из таблицы
$query->select(
$db->quoteName(
explode(
', ',
$this->getState(
'list.select',
'a.id, a.name, a.alias'
)
)
)
);

$query->from($db->quoteName('#__schooltech_training_programs', 'a'));
return $query;
}
}

tmpl/trainingprograms/default.php
Код
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;

HTMLHelper::_('behavior.multiselect');

$user      = Factory::getUser();//Информация о текущем пользователе
$userId    = $user->get('id');



// Нет прямого доступа к этому файлу
defined('_JEXEC') or die('Всем кыш! =D');
?>
<h2>Здесь будут программы обучения</h2>

Выдает null. Что ещё надо сделать, чтобы компонент получил доступ к этим записям в БД ?
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
У Вас нет столбца alias
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

leha111

  • Захожу иногда
  • 226
  • 0 / 0
Переделал

sql/install.mysql.utf8.sql
Код
CREATE TABLE `#__schooltech_training_programs` ( 
    `id` SERIAL NOT NULL,
    `name` VARCHAR(200) NOT NULL,
    `published` BOOLEAN NOT NULL DEFAULT FALSE,
`alias` MEDIUMTEXT,
`description` MEDIUMTEXT,
`education_time` INT,
`document` MEDIUMTEXT,
    PRIMARY KEY (`id`)
) ENGINE = InnoDB;

src/Model/TrainingprogramsModel.php
Код
<?php
namespace MuCompani\Component\SchoolTech\Administrator\Model;

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Utilities\ArrayHelper;

class ContactsModel extends ListModel
{
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'name', 'a.name',
'alias', 'a.alias',
);

if (Associations::isEnabled())
{
$config['filter_fields'][] = 'association';
}
}

parent::__construct($config);
}
   
protected function populateState($ordering = 'a.name', $direction = 'asc')
{
$app = Factory::getApplication();

$forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd');

// Adjust the context to support modal layouts.
if ($layout = $app->input->get('layout'))
{
$this->context .= '.' . $layout;
}

// Adjust the context to support forced languages.
if ($forcedLanguage)
{
$this->context .= '.' . $forcedLanguage;
}

// List state information.
parent::populateState($ordering, $direction);

// Force a language.
if (!empty($forcedLanguage))
{
$this->setState('filter.language', $forcedLanguage);
}
}

protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
$id .= ':' . $this->getState('filter.published');
$id .= ':' . serialize($this->getState('filter.category_id'));
$id .= ':' . $this->getState('filter.access');
$id .= ':' . $this->getState('filter.language');
$id .= ':' . serialize($this->getState('filter.tag'));
$id .= ':' . $this->getState('filter.level');

return parent::getStoreId($id);
}

protected function getListQuery()
{
//Создаем новый query объект
$db = $this->getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser();

//Выберем необходимые поля из таблицы
$query->select(
$db->quoteName(
explode(
', ',
$this->getState(
'list.select',
'a.id, a.name, a.alias'
)
)
)
);

$query->from($db->quoteName('#__schooltech_training_programs', 'a'));


return $query;
}
}
?>

Все равно null. Может, с контроллерами проблема ?

src/Controller/TrainingprogramsController.php
Код
namespace MuCompani\Component\SchoolTech\Administrator\Controller;

\defined('_JEXEC') or die;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\AdminController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\Input\Input;
use Joomla\Utilities\ArrayHelper;

public function featured()
{
// Check for request forgeries
$this->checkToken();

$ids    = $this->input->get('cid', array(), 'array');
$values = array('featured' => 1, 'unfeatured' => 0);
$task   = $this->getTask();
$value  = ArrayHelper::getValue($values, $task, 0, 'int');

// Get the model.
/** @var \Joomla\Component\Contact\Administrator\Model\ContactModel $model */
$model  = $this->getModel();
}


public function getModel($name = 'SchoolTech', $prefix = 'Administrator', $config = array('ignore_request' => true))
{
return parent::getModel($name, $prefix, $config);
}

Или я какой-то важный файл пропустил ? Знает кто, откуда $this->items= $this->get('Items'); берется ?
« Последнее редактирование: 14.02.2022, 08:49:33 от leha111 »
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Знает кто, откуда $this->items= $this->get('Items'); берется ?
вот от сюда https://github.com/joomla/joomla-cms/blob/4.1-dev/libraries/src/MVC/View/AbstractView.php#L131

Все равно null. Может, с контроллерами проблема ?
Проверьте существование модели в файле представления (tmpl/trainingprograms/default.php)
Код: php
$model = $this->getModel();
echo get_class($model). '<br>';
2 вариант! В файле (src/Model/TrainingprogramsModel.php)
выведите SQL запрос в выполните его напрямую в phpMyAdmin

Код: php
echo $query . '<hr>';
return $query;
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

leha111

  • Захожу иногда
  • 226
  • 0 / 0
Цитировать
Проверьте существование модели в файле представления (tmpl/trainingprograms/default.php)
Код: php
Код
$model = $this->getModel();
echo get_class($model). '<br>';

Проблема в том. что в компоненте com_contact, с которым я сверяюсь,

Код
$this->items         = $this->get('Items');
var_dump($this->get('Items'));

в /src/View/Contacts/HtmlView.php без этого нормально работает (по крайнее мерее, я там такого представления не нащел). И суть не в том, чтобы просто вывести надпись. Факт её выведения является доказательством того, что нормально получен доступ к базе данных.
*

sivers

  • Живу я здесь
  • 2593
  • 360 / 0
$this->items         = $this->get('Items');
эта строка в представлении вызывает метод getItems модуля (!), который, в свою очередь, вызывает метод (в модуле же) getListQuery(), в котором собственно и формируется запрос к БД (метод должен вернуть сформированную строку запроса БД). Вот в getListQuery вы и должны учесть все переданные параметры и сформировать запрос (только сформировать, саму выборку не делать).
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

leha111

  • Захожу иногда
  • 226
  • 0 / 0
Собственно, у меня ест файл
src/Model/TrainingprogramsModel.php

А в нем
Код
namespace MuCompani\Component\SchoolTech\Administrator\Model;

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Utilities\ArrayHelper;

class ContactsModel extends ListModel
{
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'name', 'a.name',
'alias', 'a.alias',
);

if (Associations::isEnabled())
{
$config['filter_fields'][] = 'association';
}
}

parent::__construct($config);
}
   
protected function populateState($ordering = 'a.name', $direction = 'asc')
{
$app = Factory::getApplication();

$forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd');

// Adjust the context to support modal layouts.
if ($layout = $app->input->get('layout'))
{
$this->context .= '.' . $layout;
}

// Adjust the context to support forced languages.
if ($forcedLanguage)
{
$this->context .= '.' . $forcedLanguage;
}

// List state information.
parent::populateState($ordering, $direction);

// Force a language.
if (!empty($forcedLanguage))
{
$this->setState('filter.language', $forcedLanguage);
}
}

protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
$id .= ':' . $this->getState('filter.published');
$id .= ':' . serialize($this->getState('filter.category_id'));
$id .= ':' . $this->getState('filter.access');
$id .= ':' . $this->getState('filter.language');
$id .= ':' . serialize($this->getState('filter.tag'));
$id .= ':' . $this->getState('filter.level');

return parent::getStoreId($id);
}

protected function getListQuery()
{
//Создаем новый query объект
$db = $this->getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser();

//Выберем необходимые поля из таблицы
$query->select(
$db->quoteName(
explode(
', ',
$this->getState(
'list.select',
'a.id, a.name, a.alias'
)
)
)
);

$query->from($db->quoteName('#__schooltech_training_programs', 'a'));


return $query;
}
}

Собственно, что с ним не так ? Или надо что-то ещё ? Или с вышеописанным src/Controller/TrainingprogramsController.php ?
« Последнее редактирование: 18.02.2022, 08:48:20 от leha111 »
*

sivers

  • Живу я здесь
  • 2593
  • 360 / 0
Собственно, что с ним не так ? Или надо что-то ещё ?
Делайте вывод логов, чтоб разобраться. Поставьте перед return $query; строчку echo $query->dump(); exit; - увидите какой запрос формируется (если ничего не увидите - значит метод не отрабатывает). Попробуйте полученный запрос выполнить вручную в пхпМуАдмин - посмотрите возвращает ли он что-нибудь. А там дальше - по результатам.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

leha111

  • Захожу иногда
  • 226
  • 0 / 0
Судя по реакции, метод вообще не отрабатывается. Я как-то неправильно название файла прописал или надо его как-то в контроллерах указать ?
*

leha111

  • Захожу иногда
  • 226
  • 0 / 0
Проблема оказалась в том, что я, не подумав что это важно, тупо передрал название класса ContactsModel, вместо того, чтобы переименовать в TrainingprogramsModel
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сохранить в файле txt информацию из поля input?

Автор GuDeVic

Ответов: 1
Просмотров: 826
Последний ответ 20.11.2023, 14:34:09
от GuDeVic
Скрыть информацию на гостевой странице

Автор Andrew_Shi

Ответов: 10
Просмотров: 1344
Последний ответ 05.11.2023, 20:32:33
от Andrew_Shi
Есть ли способ уменьшить вес таблиц в БД у компонента Finder?

Автор denxio

Ответов: 1
Просмотров: 474
Последний ответ 15.10.2023, 12:27:02
от Andrew_Shi
Фильтр type=&quot;sql&quot; для компонента J! 4

Автор GuDeVic

Ответов: 0
Просмотров: 395
Последний ответ 11.08.2022, 13:14:21
от GuDeVic
Проблема вывода компонента на Front-end

Автор GuDeVic

Ответов: 23
Просмотров: 2905
Последний ответ 09.08.2022, 16:09:21
от GuDeVic