Форум русской поддержки Joomla!® CMS
10.12.2016, 14:53:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Одна функция для изменения состояний нескольких параметров элемента

 (Прочитано 112 раз)
0 Пользователей и 1 Гость смотрят эту тему.
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« : 13.10.2016, 14:08:59 »

У элементов есть несколько параметров, каждый из которых имеет два состояния (да или нет), по типу как у статуса элемента (опубликовано/не опубликовано).
Для этих параметров создан собственный тип поля, являющийся аналогом поля list.
Здесь на форуме мне посоветовали не писать отдельную функцию для переключения состояний каждого параметра, а использовать одну, куда аргументом передавать имя переключаемого параметра.
Ввиду того, что я недавно начал изучать программирование под Joomla, возник ряд вопросов:
1. Для фильтрации элементов по данным параметрам нужно будет писать отдельную функцию для каждого параметра или достаточно одной, в которую аргументом будет передаваться имя параметра.
2. Как взять имя параметра для передачи его в функцию?
Что бы было более понятно, приведу кусок кода /administrator/com_vmgtx/views/products/default_body.php:
Код
<tr class="row">
<td><?php echo JHtml::_('grid.id', $i, $item->id); ?></td>
<td><a href="index.php?option=com_vmgtx&task=product.edit&id=<?php echo $item->id; ?>" title="<?php echo JText::_('COM_VMGTX_EDIT_PRODUCT'); ?>"><?php echo $item->product_name; ?></a></td>
<td><?php echo JHTML::_('jgrid.published', $item->state, $i, 'products.', $canChange); ?></td>
<td><?php echo JHTML::_('vmgtx.filters.changeState', $item->is_shipping, $i, 'products.', $canChange); ?></td>
<td><?php echo JHTML::_('vmgtx.filters.changeState', $item->use_pickup, $i, 'products.', $canChange); ?></td>
<td><?php echo JHTML::_('jgrid.published', $item->use_store, $i, 'products.', $canChange); ?></td>
</tr>
Собственно, параметры, состояния которых необходимо переключать: is_shipping, use_pickup, use_store
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Online Online

Пол: Мужской
Сообщений: 5225



« Ответ #1 : 13.10.2016, 15:13:27 »

для начала стоит определиться, что надо делать либо фильтровать либо переключать)
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #2 : 13.10.2016, 16:18:51 »

для начала стоит определиться, что надо делать либо фильтровать либо переключать)
и фильтровать по параметрам да/нет и, собственно, менять эти параметры на странице списка элементов
Записан
Septdir
Живу я здесь
******

Репутация: +36/-3
Offline Offline

Пол: Мужской
Сообщений: 841


Skype: septdir


« Ответ #3 : 13.10.2016, 16:37:30 »

чет вас созсвем не в ту степрь унесло.. аналог поля лист для да/нет =) хотя даже для опубликованных используется поля List просто у самих кнопок если итемлисте админке есть одельная функция. Это так к слову.
Второе. Вся фильтрация сортировка и т.д делается в model
Третье. Как нам вам помогать если мы просто видим кусок не пойми чего. vmgtx.filters.changeState - это как я понимаю функция смены как-того вашего параметра, и ни как не связана ни с фильтрацией ни с сортировкой. Да и вообще ее нахождение в итемлисте сомнительно.
Четвертное. Какая функция фильрация. Базово все просто на onChange вешается отправка формы(this.form.submit()), отправляемся на ту же страницу с post и делаем выборку уже с учетом параметров.

P.S простите но с каждым топиком убеждаюсь "не по Сеньке и шапка". Как я вижу логику вы на ходу придумываете да и базовых знаний не хватает.
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #4 : 13.10.2016, 18:53:33 »

чет вас созсвем не в ту степрь унесло.. аналог поля лист для да/нет =) хотя даже для опубликованных используется поля List просто у самих кнопок если итемлисте админке есть одельная функция. Это так к слову.
Второе. Вся фильтрация сортировка и т.д делается в model
Третье. Как нам вам помогать если мы просто видим кусок не пойми чего. vmgtx.filters.changeState - это как я понимаю функция смены как-того вашего параметра, и ни как не связана ни с фильтрацией ни с сортировкой. Да и вообще ее нахождение в итемлисте сомнительно.
Четвертное. Какая функция фильрация. Базово все просто на onChange вешается отправка формы(this.form.submit()), отправляемся на ту же страницу с post и делаем выборку уже с учетом параметров.

P.S простите но с каждым топиком убеждаюсь "не по Сеньке и шапка". Как я вижу логику вы на ходу придумываете да и базовых знаний не хватает.
сейчас постараюсь объяснить подробнее.

1. изначально параметры были реализованы с помощью поля list, где в опциях были параметры да/нет. в этой теме мне ответили, что это не совсем правильно и лучше создать собственный тип поля, то я и сделал, создав, по сути, его клон.

2. я в курсе, что сортировка и фильтрация делается в модели.

3. vmgtx.filters.changeState - это фильтр. вот его код:
Код
public static function changeState($value, $i, $prefix = '') {
JHtml::_('bootstrap.tooltip');
if (is_object($value)) {
$value = $value->is_shipping;
}
$task = $value ? 'unshipped' : 'shipped';
$alt = $value ? JText::_('JPUBLISHED') : JText::_('JUNPUBLISHED');
$action = $value ? JText::_('JLIB_HTML_UNPUBLISH_ITEM') : JText::_('JLIB_HTML_PUBLISH_ITEM');
$icon = $value ? 'publish' : 'unpublish';
 
return '<a href="#" class="btn btn-micro hasTooltip' . ($value == 1 ? ' active' : ''). '" onclick="return listItemTask(\'cb' . $i . '\',\'' . $prefix . $task . '\')" title="' . $action . '">
<span class="icon-'
. $icon . '"></span>
</a>'
;
}
но его надо адаптировать для всех параметров фильтрации, либо писать для каждого свой. пока он написан только для параметра is_shipped

4. с реализацией фильтрации мне более-менее все понятно. не понятно, как реализовать одну функцию, в которую аргументом будет передаваться параметр, состояние которого надо изменить.

5. логику я придумываю не на ходу, она уже продумана. базовых знаний api Joomla, действительно, не хватает. "не по Сеньке шапка" - а вы родились со знаниями всего этого, не учились, не задавали глупых вопросов? когда ко мне обращаются люди с глупым, на мой взгляд, вопросом в той области, в которой я компетентен, я стараюсь доходчиво объяснить человеку, общаясь, при этом, на понятном ему языке, т.е. с минимумом профессиональных терминов. при этом, я не считаю свое поведение правильным или нет, и уж, тем более, не призываю никого к такому же поведению.
Записан
Septdir
Живу я здесь
******

Репутация: +36/-3
Offline Offline

Пол: Мужской
Сообщений: 841


Skype: septdir


« Ответ #5 : 13.10.2016, 21:31:58 »

начну с пятного. Вопрос не только в api Joomla а вообще в понимании того что вы делаете. "не по Сеньке шапка"  - не значит что не надо учиться или же что вы не сможете. Просто сейчас вам это не посилам. Делайте все постепенно. Вы же в омут с головой прыгаете. И тут не только не получиться то что вы хотите, или будет ли оно работать как надо( а судя по коду вообще будет чудом если оно будет работать) но столько гемороя без отдачи напрочь отобьет у вас желание что либо делать. А потом вы будите кричать что это Joomla фигня.  Начните с простого, с модулей, плагинов, шаблонов, чтобы понять как вообще это работает. А не содитесь пилить компонент довесок в vm. Возможно с вашей ситуацией вообще справиться плагин. Доп компонент вообще пилят лишь в крайнем случае и при любом раскладе он увеличит вес и поползут проблемы с оптимизацией.
Да и вообще в какой извращенной вселенной вы решили что функция changeState (Дословно смена состояния) связанна с сортировкой. Ееезадача сменить состояние. К примеру опубликовано/ не опубликовано.

Для сортировки через через заглавие таблицы исполеться JHTML::_('searchtools.sort' для фильтрации поля беруться из XML файла. И тот и тот ни требует ни какой дополнительной функции (ну кроме  populateState  getStoreId и getSortFields и то фильтрация будет работать и без них). Фильтрация и сортировка это просто работа с моделью.
Свой тип поля вам посоветовали, потому что вы всех давно уже вогнали в ступор. Вы пытаетесь писать умными словами и запутываете всех еще больше. И простите вы спрашиваете  
Цитировать
Как взять имя параметра для передачи его в функцию?.
Вашего параметра в вашем компоненте для вашей функции, как взять как определите как и взмете.  мы даже не видим что вы там на вытворяли.
Поэтому то и  "не по Сеньке шапка" без обид ничего личного. Просто тут за вас уже пол 3\4 написали. А вы плодите бессмысленные посты ведь не возможно сказать будет ли ваш код работать не видя всей механики. Максимум что можно это сказать что синтаксических ошибок тут нет.
Я уж промолчу что это все ни каким боком к Общие вопросы веб разработки.
« Последнее редактирование: 13.10.2016, 21:38:05 от Septdir » Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #6 : 14.10.2016, 16:58:57 »

начну с пятного. Вопрос не только в api Joomla а вообще в понимании того что вы делаете. "не по Сеньке шапка"  - не значит что не надо учиться или же что вы не сможете. Просто сейчас вам это не посилам. Делайте все постепенно. Вы же в омут с головой прыгаете. И тут не только не получиться то что вы хотите, или будет ли оно работать как надо( а судя по коду вообще будет чудом если оно будет работать) но столько гемороя без отдачи напрочь отобьет у вас желание что либо делать.
Мне не интересно писать всякую ерунду типа "hello world", которая не несет практической пользы. Поэтому, как-то так.

А потом вы будите кричать что это Joomla фигня.  Начните с простого, с модулей, плагинов, шаблонов, чтобы понять как вообще это работает.
У меня есть опыт работы с Joomla!. Делал сайты-визитки, интернет-магазины с несложным функционалом на VM и JS. Опять же шаблоны делал несложные. Поэтому, кричать, что Joomla! - фигня я не буду.

А не содитесь пилить компонент довесок в vm. Возможно с вашей ситуацией вообще справиться плагин. Доп компонент вообще пилят лишь в крайнем случае и при любом раскладе он увеличит вес и поползут проблемы с оптимизацией.
это не в довесок к VM, это отдельный компонент, который берет товары из VM, добавляет определенные параметры и выводит на экран. От VM там используется только БД с товарами.

Да и вообще в какой извращенной вселенной вы решили что функция changeState (Дословно смена состояния) связанна с сортировкой. Ееезадача сменить состояние. К примеру опубликовано/ не опубликовано.
Тут согласен, фигня с названием получилась. Переделал во избежание путаницы.

Для сортировки через через заглавие таблицы исполеться JHTML::_('searchtools.sort' для фильтрации поля беруться из XML файла. И тот и тот ни требует ни какой дополнительной функции (ну кроме  populateState  getStoreId и getSortFields и то фильтрация будет работать и без них). Фильтрация и сортировка это просто работа с моделью.
с сортировкой разобрался.

Но это все оффтоп.
Собственно, вопрос по теме: я правильно понимаю алгоритм того, что я пытаюсь сделать?
1. добавляем дополнительный параметр $optionName в /administrator/com_vmgtx/views/products/default_body.php, например, так:
Код
<td class="center">
<?php echo JHTML::_('vmgtxhtml.productadministrator.productOptions', $item->is_shipping, $i, 'products.', $canChange, $optionName='is_shipping'); ?>
</td>
2. передаем этот параметр в модель, где на основании значения параметра меняем значения в БД?

если мыль моя верна, подскажите, как этот параметр передать в модель.
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #7 : 22.10.2016, 17:49:46 »

немного переосмыслил алгоритм.
берем значение переменной $optionName отсюда: /administrator/components/com_vmgtx/views/products/default_body.php
Код
<td class="center">
<?php echo JHTML::_('vmgtxhtml.productadministrator.available', $item->is_shipping, $i, 'products.', $canChange, $optionName='is_shipping'); ?>
</td>

передаем сюда в функцию productOptions, которая в /administrator/components/com_vmgtx/helpers/html/productadministrator.php
Код
public static function available($value, $i, $canChange = true, $optionName) {
JHtml::_('bootstrap.tooltip');
dump($optionName, 'optionName');
$states = array(
0 => array('unavailable', 'products.available', 'JPUBLISHED'),
1 => array('available', 'products.unavailable', 'JUNPUBLISHED'),
);
$state = JArrayHelper::getValue($states, (int) $value, $states[1]);
$icon = $value ? 'publish' : 'unpublish';
 
if ($canChange) {
$html = '<a href="#" onclick="return listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="btn btn-micro hasTooltip'
. ($value == 1 ? ' active' : ''). '" title="' . JHtml::tooltipText($state[3]). '"><span class="icon-' . $icon . '"></span></a>';
}
else {
$html = '<a class="btn btn-micro hasTooltip disabled' . ($value == 1 ? ' active' : ''). '" title="'
. JHtml::tooltipText($state[2]). '"><span class="icon-' . $icon . '"></span></a>';
}
 
return $html;
}
далее вызываем функцию в контроллере с этим параметром, который, в свою очередь, вызывает функцию в модели, которая меняет параметр в БД.
Алгоритм верен?
Собственно, вопрос:
1. Как в эту функцию передать значение переменной? У меня, почему-то, она становится булевой и принимает значение TRUE, хотя в /administrator/components/com_vmgtx/views/products/default_body.php ей присвоено строковое значение.
2. Как затем это значение передать в контроллер?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet