Новости Joomla

Вышли релизы Joomla 6.1 и Joomla 5.4.5: новые возможности и стабильность

Релиз Joomla 6.1.0

Проект Joomla! объявил о доступности Joomla 6.1 [Nyota] — новой минорной версии шестой серии, а также о выпуске релиза исправлений ошибок Joomla 5.4.5. Релиз 6.1 приносит ряд долгожданных функций, повышающих удобство управления контентом и защиту от спама.

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

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

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

  • Глобальный модератор
  • 7288
  • 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

  • Живу я здесь
  • 2610
  • 363 / 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

  • Живу я здесь
  • 2610
  • 363 / 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
Просмотров: 1012
Последний ответ 20.11.2023, 14:34:09
от GuDeVic
Скрыть информацию на гостевой странице

Автор Andrew_Shi

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

Автор denxio

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

Автор GuDeVic

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

Автор GuDeVic

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