Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#joomla #расширения

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #60 : 18.06.2011, 15:50:53 »
Цитировать
Fatal error: Call to a member function get() on a non-object in Y:\home\new\www\administrator\components\com_priceleaf\views\priceleafs\tmpl\default.php on line 11

Незнаю на сколько она поможет, дело в том что я не представляю как в 1.6 вообще сделать сортировку!
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #62 : 18.06.2011, 16:24:32 »
Передал я этот параметр ошибки нет. Но и ничего не работает! Значит чегото нехватает. вопрос только чего!?

Неужели ни кто не реализовывал сортировку! да быть такого не может, или лень код написать и привести пример! Или я прям и незнаю что!
« Последнее редактирование: 19.06.2011, 14:48:43 от klubnichkaaa »
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #63 : 20.06.2011, 14:18:23 »
После долгих и кропотливых мучений, я не скажу что сделал, но немного сдвинулся с места. Вообщем сортировка есть, но не по клику имени поля, а по запросу из бд.

Цитировать
      $orderCol   = $this->state->get('list.ordering');
      $orderDirn   = $this->state->get('list.direction');
      if ($orderCol == 'a.ordering' || $orderCol == 'category_title') {
         $orderCol = 'category_title '.$orderDirn.', a.ordering';
      }
      $query->order($db->getEscaped($orderCol.' '.$orderDirn));

В этом коде есть две строчки!

$orderCol = 'category_title '.$orderDirn.', a.ordering';     и     $query->order($db->getEscaped($orderCol.' '.$orderDirn)); 

Если убрать одну из них и убрать оператор if, то сортировка есть он сам автоматически при перезагрузке страницы сортирует. но опятьже надпись не работает.

У меня 2 версии это всё таже модель! и есть ещё одна. при наведении на имя поля появляется надпись внизу браузера javascript:tableOrdering('name','asc' '');
Вот tableOrdering это случайно не должен быть такой файл в папке models/fields/ordering.php ?

На последок приведу модель свою.
Цитировать
<?php
/*Модель через неё идут запросы в базу, соответственно модель работает на запись и вытаскивание данных,
*/

// Запрет к прямому доступу. Если кто то попытается обратиться к файлу напрямую, Joomla выдаст пустую страницу.
defined('_JEXEC') or die('Restricted access');
// import the Joomla modellist library
jimport('joomla.application.component.modellist');
/**
 * Класс модели
 */
class PriceleafModelPriceleafs extends JModelList
{
   /**
    * Метод для создания запросов SQL для загрузки данных списка.
    *
    * Возвращение строк запроса из бд.
    */
   
        protected function populateState($ordering = null, $direction = null)
{

      $app = JFactory::getApplication();
      $session = JFactory::getSession();

      // Adjust the context to support modal layouts.
      if ($layout = JRequest::getVar('layout')) {
         $this->context .= '.'.$layout;
      }
 parent::populateState('name', 'asc');
}

   
   protected function getListQuery()
   {
$db        = $this->getDbo();
 $query    = $db->getQuery(true);

 //Aqui nos dizemos quais colunas da tabela nos queremos retornar.
 $query->select(
 $this->getState(
 'list.select',
 '*'
 )
 );
      $query->from('#__priceleaf_razdel AS a');   
      $orderCol   = $this->state->get('list.ordering');
      $orderDirn   = $this->state->get('list.direction');
      if ($orderCol == 'a.ordering' || $orderCol == 'category_title') {
         $orderCol = 'category_title '.$orderDirn.', a.ordering';
      }
      $query->order($db->getEscaped($orderCol.' '.$orderDirn));
      return $query;
   }
   
}
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Написание компонента для Joomla 1.6
« Ответ #64 : 20.06.2011, 14:38:43 »
javascript:tableOrdering('name','asc' '');
Вот tableOrdering это случайно не должен быть такой файл в папке models/fields/ordering.php ?
это случайно - просто функция JS :)
klubnichkaaa
я с тебя поражаюсь, тебе говоришь что нужно по минимум добавить, а все равно этого не делаешь.
Метод тыка, конечно, хорошо, но какие-то знания, видимо, все таки должны быть :)
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #65 : 20.06.2011, 14:58:56 »
Рад что тебе подняло настроение! =) То что ты видишь конечно это не полный код, но его я тоже добавлял и успехов не было! И из кратких непонятных ответов естественно толку мало будет! Тема не раскрыта!
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

b2z

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

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Написание компонента для Joomla 1.6
« Ответ #67 : 20.06.2011, 15:19:59 »
Рад что тебе подняло настроение! =) То что ты видишь конечно это не полный код, но его я тоже добавлял и успехов не было! И из кратких непонятных ответов естественно толку мало будет! Тема не раскрыта!
да никто же не знает чего ты там написал в своем компоненте :)
если есть установочный архив, можешь выложить, сейчас пока есть немного времени могу глянуть и подправить.

То есть, то что описано тут, не работает?
я там не все писал, так как писалось давно.
Там еще в конструкторе фильтр нужно задать.
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #68 : 20.06.2011, 16:30:03 »
Если убрать одну из них и убрать оператор if, то сортировка есть он сам автоматически при перезагрузке страницы сортирует. но опятьже надпись не работает.
а по клику по заголовку страница хоть перезагружается?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #69 : 20.06.2011, 16:52:21 »
я там не все писал, так как писалось давно.
Там еще в конструкторе фильтр нужно задать.
Я так понимаю, что ты говоришь про это:
Код: php
	public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'id', 'a.id',
'name', 'a.name',
);
}

parent::__construct($config);
}

Я тут покапался, и понял, что фильтр по идее необязательно задавать. Этот фильтр попадает сюда:

class JModelList

Код: php
public function __construct($config = array())
{
parent::__construct($config);

// Add the ordering filtering fields white list.
if (isset($config['filter_fields'])) {
$this->filter_fields = $config['filter_fields'];
}
...

Но если его нет, то можно просто передать через populateState параметры и этого будет достаточно:

Код: php
protected function populateState($ordering = null, $direction = null){
//some code here
...
// Check if the ordering field is in the white list, otherwise use the incoming value.
$value = $app->getUserStateFromRequest($this->context.'.ordercol', 'filter_order', $ordering);
if (!in_array($value, $this->filter_fields)) { // если значения нет в фильтре
$value = $ordering; // то ставим его равным нашему значению
$app->setUserState($this->context.'.ordercol', $value);
}
$this->setState('list.ordering', $value);

Соответственно задавая parent::populateState('name', 'asc'); мы уже устанавливаем доп. поля для сортировки и в конструктор можно ничего не добавлять. Поправьте, если я не прав.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Написание компонента для Joomla 1.6
« Ответ #70 : 20.06.2011, 17:38:42 »
Поправьте, если я не прав.
не прав, если в нем не задавать поля для фильтра, то по этим полям не будет происходить сортировка.
Его добавили не помню когда, возможно даже на бете, помню что связано это было с возможной sql инъекцией.

метод populateState служит как бы для начальной установки значения сортировки, то есть по какому полю будет задаваться сортировка по умолчанию. Вот там как раз проверка и идет если этого поля нет в фильтре, то сортировка устанавливается в значение по умолчанию.
« Последнее редактирование: 20.06.2011, 17:43:00 от SmokerMan »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #71 : 20.06.2011, 17:45:41 »
Тогда что вот это такое, не пойму...

Цитировать
protected function populateState($ordering = null, $direction = null){
// Check if the ordering field is in the white list, otherwise use the incoming value.
Проверяем, есть ли значение в массиве значений фильтра ($config['filter_fields']) и если нету, то используем свое:
$value = $ordering // наше значение;
Код
$app->setUserState($this->context.'.ordercol', $value);
}
$this->setState('list.ordering', $value);
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #72 : 20.06.2011, 20:56:53 »
Цитировать
То есть, то что описано тут, не работает?
Нет не работает. Увы но там код неполный и поэтому рабочим его как бы назвать нельзя.

SmokerMan Я хочу сам понять как это сделать, свой опыт гораздо лучше! Ты не думай что я не ставил фильтры не разбирался в конструкции сторонних компонентов, просто не совсем приятно когда тебя как бы воспринимают как неопытного не шарящего человека, я образно говорю, понимаю что ты не имеешь это ввиду.

Цитировать
а по клику по заголовку страница хоть перезагружается?
Перезагружается но действий не происходит.

Щас буду ещё пробовать, чую что близок! Спс за подсказки, они мне помогают!
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #73 : 21.06.2011, 13:09:26 »
Решил я проблему и сортировка у меня работает, но саму суть как бы не выявил. Бился я вчера пол ночи, стандартный компонент com_weblinks урезал до вида своего компонента, затем начал перекидывать из этого компонента модель вид шаблон в свой компонент всё работает, но стоит мне перекинуть из com_weblinks не работает. Вообщем ушёл я ни с чем. Утром опять по новой начал всё тоже самое делать не пашет и всё тут. Вообщем возился я так часа 3 пока решил шаблон сделать по другому у меня он разбит на 4 части как из мануала на оф сайте.

default.php
default_body.php
default_foot.php
default_head.php

А в компоненте com_weblinks там просто один файл default.php я сделал так же и о чудо всё заработало закрутилось! Это хорошо конечно, но почему структура шаблона как у меня не работала, начал копировать код с com_weblinks но увы всё так же и осталось, вот поэтому как бы проблему нашёл, но саму суть корень её нет. Так что не буду мучаться дальше хватит, разобрался и ладно сделаю 1 шаблон. Просто делал по мануалу, но вот видите как оно бывает. Вроде тоже самое, а вроде и нет! Теперь сделаю на чистом не тестовом своём компоненте, читабельный вид и буду делать ordering порядок записей. Так что спс всем за внимание!
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #74 : 25.06.2011, 14:20:52 »
Народ а кто подключал в компоненте Submenu или правильнее сказать helpers. Навигацию на странице!?
Как я понял в админке в точке входа надо дописать (ну естественно поменять на своё)

Цитировать
// require helper file
JLoader::register('HelloWorldHelper', dirname(__FILE__). DS . 'helpers' . DS . 'helloworld.php');

Затем в виде прописать

Цитировать
      $canDo = HelloWorldHelper::getActions();

И добавить папку helpers поставить в ней свой класс и всё!

Но меню вверху у меня не выводится! Вот не пойму почему, может ещё гдето дописать нужно!? Стандартный компонент когда ковырял я увидел связь только между тремя файлами, точка входа вид и папкой helpers. Ни шаблон ни что либо ещё не влияют.

РЕШЕНО.

Не досмотрел что в контроллере в корневой папке admin нужно в функцию

function display($cachable = false)

дописать       

// Set the submenu
HelloWorldHelper::addSubmenu('messages');

Вот так всегда из за какойто строчечки столько проблем =)
« Последнее редактирование: 25.06.2011, 14:33:01 от klubnichkaaa »
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #75 : 26.06.2011, 16:06:11 »
Хотел бы узнать может кто сталкивался. Меню навигации для компонента в папке helpers. Там можно поставить языковой файл, так как у меня компонент на 2 языках. Так вот меню навигации переводит только первое меню а второе выводит как есть.

Ниже код файла
Цитировать
<?php
// Запрет к прямому доступу. Если кто то попытается обратиться к файлу напрямую, Joomla выдаст пустую страницу.
defined('_JEXEC') or die;

/**
 * Класс помощи.
 */
abstract class PriceleafHelper
{
   /**
    * Установка панели ссылок.
    */
   public static function addSubmenu($submenu)
   {
      JSubMenuHelper::addEntry(JText::_('COM_PRICELEAF_RAZDEL'), 'index.php?option=com_priceleaf', $submenu == 'messages');
      JSubMenuHelper::addEntry(JText::_('COM_PRICELEAF_CATIGORIES'), 'index.php?option=com_priceleaf&view=cats', $submenu == 'categories');
   }
   /**
    * Получение действий
    */
   public static function getActions($messageId = 0)
   {
      $user   = JFactory::getUser();
      $result   = new JObject;

      if (empty($messageId)) {
         $assetName = 'com_priceleaf';
      }
      else {
         $assetName = 'com_priceleaf.message.'.(int) $messageId;
      }

      $actions = array(
         'core.admin', 'core.manage', 'core.create', 'core.edit', 'core.delete'
      );

      foreach ($actions as $action) {
         $result->set($action,   $user->authorise($action, $assetName));
      }

      return $result;
   }
}

Файл рабочий ошибок не выдаёт. Там есть такая запись ('COM_PRICELEAF_CATIGORIES') Вот вместо того что бы перевести он прям так и выводит текст. Ошибок в языковом файле нет всё написано правильно проверял много раз, подставлял другие слова тоже самое, а вот если поставить точно так же как и в первом меню COM_PRICELEAF_RAZDEL то переводит. В чём может быть проблема!? У меня подозрение что вот из за этого $submenu == 'categories'); возможно тут должно быть что то другое!? пробовал назвать как называется страница cats но не помогло.
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #76 : 28.06.2011, 12:53:58 »
C предыдущим постом я разобрался! Всё близится к завершению, но тут у меня 2 проблемы появились!

В компоненте папка forms в ней XML через который выводятся данные. У меня есть меню, это меню принадлежит категории. Категории у меня в таблице 1 а меню в таблице 2 (бд). Как в XML вывести название из базы №2 а порядковые номера из таблицы №1. То есть человек выбирает название категории, а за ней кроется id который и пишется в базу. В 1.5 всё сам пишешь а тут как быть?

Есть пример просто вывода списком данных из 1 таблицы но ничего не выводит.
Цитировать
<field name="cat_naimenovanie" type="category" extension="com_priceleaf"
         label="JCATEGORY"
         class="inputbox" required="true"
      >
      </field>
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #77 : 29.06.2011, 16:11:33 »
Код: xml
<field 
name="myfield"
type="sql"
default="0"
label="Select an category"
query="SELECT t1.id, t2.title FROM #__table1 AS t1 LEFT JOIN #__table2 AS t2 ON t2.id=t1.id"
key_field="id"
value_field="title"
/>

Как то так. Запрос правим под свои нужды.
Охо, я о таком варианте даже и не предполагал. Плохо копался видимо в потрохах J! :)
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Написание компонента для Joomla 1.6
« Ответ #78 : 30.06.2011, 09:26:34 »
Спасибо zloyuser. Я честно в XML не сильно силён, но твой пример мне помог. Я даже не знал что в XML можно запросы в бд слать. *DRINK*
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #79 : 22.07.2011, 14:50:00 »
forms - для хранения форм - Поля в форме Joomla
fields - Для создания своих типов полей - Создание своего типа поля

Getting started with JForm

Добрый день.. сейчас пишу свой компонент под 1.6, и решил попробовать Jform  в нем, но не могу найти принцип его применения :(( по ссылка тоже не совсем понятно как и что... На примере стандартных компонентов ничего не выходит... Может есть еще какието ресурсы чтоб почитать про этот Jform? интересует применение во frontend
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #80 : 22.07.2011, 16:12:44 »
А в чем именно сложность? По моему в стандартных компонентах все есть. Возьмите com_content к примеру.
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #81 : 22.07.2011, 16:14:09 »
А в чем именно сложность? По моему в стандартных компонентах все есть. Возьмите com_content к примеру.
взял... сделал по аналогии не работает:)  сложность в том чтоб заставить форуму строить из XML.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #82 : 22.07.2011, 17:03:53 »
сложность в том чтоб заставить форуму строить из XML.
Нуу, это не сложность.

Беру свой реально работающий пример - вывести два текстовых поля name и picture, а также скрытое поле id. Для этого я сделал вот такой map.xml, который лежит в /models/forms/:

Код: xml
<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fieldset name="details">
        <field name="id" type="hidden"
            default="0" />
        <field name="name" type="text"
            class="inputbox"
            size="30"
            label="COM_ESPORTS_TITLE"
            description="COM_ESPORTS_FIELD_TITLE_DESC"
            required="true" />
        <field name="picture" type="text"
            class="inputbox"
            size="30"
            label="COM_ESPORTS_PICTURE"
            description="COM_ESPORTS_FIELD_PICTURE_DESC" />
    </fieldset>
</form>

Потом во View (/views/map/view.html.php), в методе display() необходимо инициализировать объект JForm, а также поместить этот объект в свойство $form. Вот кусок файла View:

Код: php
/**
 * View to edit a map.
 */
class EsportsViewMap extends JView
{
protected $form;
protected $item;
protected $state;

/**
* Display the view.
*/
public function display($tpl = null)
{
// Initialiase variables.
$this->form     = $this->get('Form');
$this->item     = $this->get('Item');
$this->state    = $this->get('State');
...
...
...
}

А далее выводим в шаблоне /views/map/tmpl/default.php:

Код: php
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset('details') as $field): ?>
<li>
<?php echo $field->label;
echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>

$this->form->getFieldset('details') - форма считывает fieldset с именем details (помните <fieldset name="details">). Потом мы по нему проходимся с помощью foreach и выводим label и input.
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #83 : 24.07.2011, 21:10:40 »
Нуу, это не сложность.

Беру свой реально работающий пример - вывести два текстовых поля name и picture, а также скрытое поле id. Для этого я сделал вот такой map.xml, который лежит в /models/forms/:

Код: xml
<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fieldset name="details">
        <field name="id" type="hidden"
            default="0" />
        <field name="name" type="text"
            class="inputbox"
            size="30"
            label="COM_ESPORTS_TITLE"
            description="COM_ESPORTS_FIELD_TITLE_DESC"
            required="true" />
        <field name="picture" type="text"
            class="inputbox"
            size="30"
            label="COM_ESPORTS_PICTURE"
            description="COM_ESPORTS_FIELD_PICTURE_DESC" />
    </fieldset>
</form>

Потом во View (/views/map/view.html.php), в методе display() необходимо инициализировать объект JForm, а также поместить этот объект в свойство $form. Вот кусок файла View:

Код: php
/**
 * View to edit a map.
 */
class EsportsViewMap extends JView
{
protected $form;
protected $item;
protected $state;

/**
* Display the view.
*/
public function display($tpl = null)
{
// Initialiase variables.
$this->form     = $this->get('Form');
$this->item     = $this->get('Item');
$this->state    = $this->get('State');
...
...
...
}

А далее выводим в шаблоне /views/map/tmpl/default.php:

Код: php
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset('details') as $field): ?>
<li>
<?php echo $field->label;
echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>

$this->form->getFieldset('details') - форма считывает fieldset с именем details (помните <fieldset name="details">). Потом мы по нему проходимся с помощью foreach и выводим label и input.


все равно не получается... выдает

Fatal error: Call to a member function getFieldset() on a non-object in
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #84 : 25.07.2011, 13:18:00 »
все равно не получается... выдает

Fatal error: Call to a member function getFieldset() on a non-object in
Во View объект JForm инициализирован?
Код: php
$this->form = $this->get('Form');
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #85 : 25.07.2011, 13:20:19 »
Во View объект JForm инициализирован?
Код: php
$this->form = $this->get('Form');
да...  видимо что то еще надо для инициализации
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #86 : 25.07.2011, 21:03:02 »
Модель унаследованная от JModelAdmin и функция в модели:

Код: php
class EsportsModelMap extends JModelAdmin
{
public function getForm($data = array(), $loadData = true)
{
$form = $this->loadForm('com_esports.map', 'map', array('control' => 'jform', 'load_data' => false));

$form->bind($this->getItem());

if (empty($form)) {
return false;
}
return $form;
}
}
вот это не понял совсем.... можно подробнее? вообще может есть где описания этого?

P/S/ Кажется разобрался. Всем спасибо.   
А дело было вот в чем.

В модель надо было дописать

Код
jimport( 'joomla.application.component.modelform' );

а также изменить название в классе: У меня было

Код
class SubModelSubscribe  extends JModelItem
а должно быть

Код
class SubModelSubscribe  extends JModelForm

может кому пригодится ;)
« Последнее редактирование: 25.07.2011, 22:17:57 от TrOn »
*

b2z

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

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #88 : 26.07.2011, 07:01:33 »
TrOn, для админки рекомендую всё же использовать JModelAdmin (она наследует от JModelForm). Избавляет от множества проблем.

bzzik, бывает :).

Про админку то я понял сразу... вопрос и был изначально про фронтенд
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Написание компонента для Joomla 1.6
« Ответ #89 : 26.07.2011, 11:47:26 »
TrOn, для админки рекомендую всё же использовать JModelAdmin (она наследует от JModelForm). Избавляет от множества проблем.

bzzik, бывает :).
какая разница что где использовать.
Если мне нужны методы JModelAdmin на морде, что мне мешает их использовать?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Документация по созданию модуля для Joomla 2.5 и Joomla 3.x

Автор b2z

Ответов: 1
Просмотров: 2284
Последний ответ 29.07.2015, 09:40:30
от b2z
Создание компонента MVC

Автор borodatych

Ответов: 36
Просмотров: 4476
Последний ответ 13.04.2015, 08:17:30
от flyingspook
Подскажите как сделать русификацию компонента)

Автор stardel

Ответов: 4
Просмотров: 6943
Последний ответ 08.04.2015, 09:08:00
от oxotnikkz
JPluginHelper::importPlugin('content') в Joomla 1.7

Автор Dutch

Ответов: 2
Просмотров: 4750
Последний ответ 30.03.2015, 14:22:51
от twins717
Документация по созданию компонента для Joomla 2.5

Автор Sulpher

Ответов: 74
Просмотров: 57240
Последний ответ 17.11.2014, 13:43:07
от limon142