Новости Joomla

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Доброго дня уважаемые!

Реализую онлайн фильтр для своего компонента. В компоненте есть вид filter и он собственно и понимает/принимает все переменные в различных видах (так вышло). А модуль это лишь форма которая опрашивает компонент на предмет по каким свойствам фильтровать и какие ссылки подставлять.

Загвоздка встала в чтении переменных input в модуле. Да прочитать я их могу, но в модели компонента уже есть готовые данные (прочитанные, собранные определенным образом). Данные в моделе обрабатываются в populaState функции и выносятся в отдельную переменную и окружение(не знаю как правильно сказать) в setState().

Так вот... когда я публикую модуль в позиции LEFT - видимо еще не отрабатывает компонент и переменная пустая.
Пока вышел из положения, создав доп.функцию getПеременная() а внутри инициировал populaState и возврат переменной.

Но мне кажется это плохо... Если у кого какие мысли?

*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Может я туплю, но если в компоненте есть фильтр - значит есть форма, которая POST\GET отправляет данные в обработчик, вот эти массивы и читайте в модуле, без всяких окружений

Так вот... когда я публикую модуль в позиции LEFT - видимо еще не отрабатывает компонент и переменная пустая.
Это вообще не важно, в какой позиции публиковать модуль
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Не до конца понял вашу идею, но...

1.Формы нет, есть обработка входящих параметров.
  • обработка входящих параметров напрямую
  • обработка filter_id (из меню прилетает), а уже по нему получаем все параметры

2.Если как вы говорите, форма тут вообще не причем, главное обработка параметров - она у меня есть и... не могу получить без доп.дергания функции обработки входящих параметров.
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Не уверен, что правильно понял вопрос. Как всегда описание максимально абстрактное... Но если суть вопроса в этом -
... в модуле.
...но в модели компонента уже есть готовые данные ...Данные в моделе обрабатываются в populaState функции
, то посмотрите (не только в этот раз), как реализован ваш вопрос в дефолтных расширениях.
Например, в mod_articles_latest/helper.php : получают инстанс модели и меняют / устанавливают ее состояние через setState . Да, в компоненте и в модуле будут разные экземпляры и разные состояния. Но ведь вам и нужны разные состояния?
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Да вообще ничего не понятно. ТС, излагайте на пальцах: мол, сделал так
Код
блаблабла
, но вместо блаблабла получил блаблабла.
Пришлось добавить
Код
блаблабла
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
А модуль это лишь форма которая опрашивает компонент на предмет по каким свойствам фильтровать и какие ссылки подставлять.
Ну если я правильно понял то...
В ListModel есть метод `getFilterForm` вот через нее в модуле форму и выводите. Ну или если нужны только значения то getActiveFilters
То бишь инициализируем модель БЕЗ ignore_request ('ignore_request' => true) в модуле и получаем форму со всем значениями.

Кстати есть мини подводный камень. Приоритетом для получения sate будет getUserState, а не get post пост параметры.
Это стоит подправить в методе. getUserStateFromRequest

А если неправильно все равно принцип тот же.
Делаете все моделе компонента, а модуле ее еще раз инициализируете и получите то что вам нужно.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Попробую еще раз написать..., но мне казалось все ясно...

итак, модель компонента JModelList
Спойлер
[свернуть]

Тоесть во время обработки входящего потока в модели компонента собрали неную переменную $this->prop_ids

в модуле хотелось сделать просто вот так
Код
        $model_filter = JModelLegacy::getInstance('filter', 'HzcatalogModel');
        $prop_ids = $model_filter->prop_ids;

Этого не вышло.

Сделал вот так:
1. Добавил метод в модель компонента
Код
public function getPropIds(){
        $this->populateState();
        return $this->prop_ids;
    }
в модуле стал обращаться к функции -> данные стали приходить.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
В ListModel есть метод `getFilterForm` вот через нее в модуле форму и выводите. Ну или если нужны только значения то getActiveFilters
Форму генерю в ручную в самом модуле
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
в модуле хотелось сделать просто вот так
Код
        $model_filter = JModelLegacy::getInstance('filter', 'HzcatalogModel');
        $prop_ids = $model_filter->prop_ids;

Этого не вышло.
Нет, конечно.
populateState() придуман именно для заполнения состояния (state), дальнейший доступ к которому обеспечивает getState(), а вы хотите его использовать как конструктор.
Кстати, у него есть нюанс
Код
	 * This method should only be called once per instantiation and is designed
* to be called on the first call to the getState() method unless the model
* configuration flag to ignore the request is set.
Он не будет вызван, если __state_set === true.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
populateState() придуман именно для заполнения состояния (state), дальнейший доступ к которому обеспечивает getState(), а вы хотите его использовать как конструктор.
Просто, когда писался populaState() в нем были решены различные моменты обработки входящих данных, вот я и решил данные дополнительно отправить в переменную, чтоб потом кто-то (модуль) мог получить уже обработанные данные.

Вопрос наверное в том что экземляры класса разные, в момент когда вызывается функция из модуля и в нем не содержаться данные - это может быть объяснением...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Еще раз - populaState() вызывается внутри getState(), и только 1 раз. Если вы, конечно, вручную не будете его вызывать.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Еще раз - populaState() вызывается внутри getState(), и только 1 раз. Если вы, конечно, вручную не будете его вызывать.
Я не понимаю что это может мне дать? Ну вынесу я обработку данных в другую функцию модели и там соберу свою переменную public $prop_ids, мне все равно придется запустить функцию в populaState или getListQuery. И при этом вы хотите сказать будет доступ (из любого места/в моем случае из модуля) к переменной, содержащей весь набор параметров?

Мой вопрос вот в чем. И по-моему я начинаю понимать, что сделано у меня примерно верно, надо только вынести обработку из populaState и запускать ее все-равно придутся.

Я не сказал одного (сам только понял): модуль публикуется лишь на одном виде компонента и мне казалось очевидным не прогонять формирование данных input два раза и в виде компонента и в модуле. Но сама суть модуля (может и ООП) в том, что модуль может быть опубликован где угодно и должен иметь свои данные (т.е. свой экземпляр). Ну и соответственно в экземпляре модуля надо запускать обработку данных заново либо выносить данные за экземпляр (session или userState).

Подскажите, на верном ли я пути?
*

sivers

  • Живу я здесь
  • 2465
  • 336 / 0
самое простое - в модели (или виде) компонента объявить глобальную переменную (объект/массив) и сунуть в нее необходимые данные. А в модуле потом получить их и использовать.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
мне все равно придется запустить функцию в populaState или getListQuery
Почему?
И при этом вы хотите сказать будет доступ (из любого места/в моем случае из модуля) к переменной, содержащей весь набор параметров?
Да, если вы объявите свою переменную в констркуторе, например.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
самое простое - в модели (или виде) компонента объявить глобальную переменную (объект/массив) и сунуть в нее необходимые данные. А в модуле потом получить их и использовать.
Да, если вы объявите свою переменную в констркуторе, например.

Не понял я вас... Как объявить? я же вроде объявил  public $prop_ids; в моделе и в нее собираю все, ее и пытался запросить из модуля - результат = пустая переменная.
*

sivers

  • Живу я здесь
  • 2465
  • 336 / 0
Не понял я вас... Как объявить? я же вроде объявил  public $prop_ids; в моделе и в нее собираю все, ее и пытался запросить из модуля - результат = пустая переменная.

Перед первым использованием:
Код
global $prop_ids;
далее:
Код
$prop_ids = array();
.....
после этого в модуле:
Код
global $prop_ids;
print_r($prop_ids);
Компонент отрабатывает раньше модулей, поэтому глобальная переменная будет инициализирована (заполнена данными) до вызова модуля.
а public - это правило для использования внутри класса/объекта.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
@sivers
Спасибо! расжевали... использование global нормальный тон. Как-то встречал, отговорки от использования глобала.
*

sivers

  • Живу я здесь
  • 2465
  • 336 / 0
Как-то встречал, отговорки от использования глобала.
Да и я встречал не раз. Стараюсь лишний раз не использовать их. Но иногда это удобней и экономней в плане ресурсов.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не понял я вас... Как объявить? я же вроде объявил  public $prop_ids; в моделе и в нее собираю все, ее и пытался запросить из модуля - результат = пустая переменная.
Ну не объявить, а заполнять. Примерно так
Код
	public function __construct($config = [])
{
parent::__construct($config);
$this->prop_ids = blablabla;
}
Стараюсь лишний раз не использовать их.
Лучше вообще не использовать, геморрой еще тот.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Счётчик полей в админке модуля

Автор zeus07

Ответов: 9
Просмотров: 561
Последний ответ 28.06.2021, 13:40:31
от zeus07
Почему id не назначается переменной?

Автор borro

Ответов: 3
Просмотров: 657
Последний ответ 29.06.2020, 12:59:51
от borro
Не занимать место под пустой вывод модуля

Автор platonische

Ответов: 11
Просмотров: 670
Последний ответ 28.04.2020, 07:53:11
от sivers
Проблема вызова модели компонента из модуля

Автор platonische

Ответов: 1
Просмотров: 574
Последний ответ 24.04.2020, 18:32:32
от platonische
Pagination компонента и данные из формы модуля

Автор platonische

Ответов: 4
Просмотров: 627
Последний ответ 29.01.2020, 11:32:43
от mardok