Как вывести checkbox поля используя поле SQL в компоненте?

  • 20 Ответов
  • 464 Просмотров

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

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Доброго времени суток уважаемые форумчание. Появилась необходимость вывести список статей в форме Joomla. То есть список статей и на против каждой статьи будет чекбокс. Обычно для того что бы вывести данные из бд в списке или в форме я использую тип поля sql . Но запись вот такого типа

Код: (php) [Выделить]
<field name="sttour"
type="sql"
query="SELECT id, title FROM #__сountry"
key_field="title"
value_field="title"
label="COM_TOUR_FORM_STRANA_R">
<option value="">Please select your option</option>
</field>
вернет выпадающий список с данными. Есть ли метод при котором по аналогии с выпадающим списком я бы мог вывести данные с чекбоксами ?

*

Оффлайн saharin88

  • ****
  • 251
  • [+]19 / [-]1
  • Пол: Мужской
  • joom.work
    • Просмотр профиля
    • JoomWork
делайте свое поле
checkboxesarticles.php
class JFormFieldCheckboxesArticles extends JFormFieldCheckboxes
{


}

потом в манифест файле для fieldset укажите addfieldpath="путь к папке гле лежит файл, от корня"

в закладки добавьте типы полей
« Последнее редактирование: 04.07.2016, 22:27:23 от saharin88 »

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
спс, буду пробовать тогда свой класс изобретать ) А не подскажите где можно примеры глянуть по написанию своего типа поля  ^-^? Видел ман на англискойм (на форуме тема поднималась) но с языками у меня не большая трабла и большую часть инфы я просто не понял да и не полностью там рассписанно было что к чему :(

*

Оффлайн saharin88

  • ****
  • 251
  • [+]19 / [-]1
  • Пол: Мужской
  • joom.work
    • Просмотр профиля
    • JoomWork
спс, буду пробовать тогда свой класс изобретать ) А не подскажите где можно примеры глянуть по написанию своего типа поля  ^-^? Видел ман на англискойм (на форуме тема поднималась) но с языками у меня не большая трабла и большую часть инфы я просто не понял да и не полностью там рассписанно было что к чему :(
в классе JFormFieldCheckboxes  есть свойство checkedOptions (это как раз массив опций где каждая опция это тоже массив из двух значений с ключами value и text), вам нужно переопределить его, например в конструкторе, посмотрите подробнее сам класс, его методы, свойства и все поймете

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
ок, буду курить доки и пробовать )  спс

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Нужен хелп .
Следуя рекомендациям на форуме  написал свой класс для чекбоксов. В кратце - форма, в которой будут выводится чекбоксы что то вроде фильтра товаров. В файле с переопределение чекбоксов сл код:

Код: (php) [Выделить]
<?php 
defined
('_JEXEC') or exit;
class 
JFormFieldCitys extends JFormField {
       protected 
$type 'Citys';
      public function 
getInput() {

      
$db JFactory::getDbo();
      
$query $db->getQuery(true);
      
$query->select('*');
      
$query->from('#__resort');
      if (
JLanguageMultilang::isEnabled()) {
            
$query->where('language in (' $db->quote(JFactory::getLanguage()->getTag()). ',' $db->quote('*'). ')');
      } 

      
$db->setQuery($query);
      
$citys_list $db->loadObjectList();
      
$var_list ='';
      foreach(
$citys_list as $citys){
            
$var_list.= '<div><input name="'.$this->name.'" type="checkbox" value="'.$citys->title.'">'.$citys->title.'</div>';
      }
      return 
$var_list;
      }
}



в файле манифесте с формами я описываю чекбоксы сл образом (чуть позже станет ясно почему именно так)

Код: (xml) [Выделить]

<fields name="resort">
<field
name="City"
type="Citys"
label="COM_TOUR_CITYS">
</field>
</fields>

и во вьюхе вывожу следующий код который и отображает чекбоксы

Код: (php) [Выделить]
<?php foreach ($this->form->getGroup('resort') as $field) : ?>
     <?php echo $field->getControlGroup(); ?>
<?php endforeach; ?>

Что же в итоге: почти то что мне нужно но не совсем. На фронтенде выводятся чекбоксы и они выводят нужные данные. Однако т.к форма представленна как фильтр записей то в условии выборки записей из БД есть вот такой код :

Код: (php) [Выделить]
if ($formdata['resort'] != NULL) {
  $query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['City']). "'" .' )');
}

То есть мне нужно выбрать записи в которых  resort находится в интервале данных которые мне передает массив из формы. Однако на фронтенде чекбоксы выводятся вот в таком виде

Код: (html4strict) [Выделить]
<div class="controls">
      <div><input name="jform[resort][City]" type="checkbox" value="дубаи">дубаи</div>

      <div><input name="jform[resort][City]" type="checkbox" value="Куршавель ">Куршавель </div>

      <div><input name="jform[resort][City]" type="checkbox" value="Кириловка">Кириловка</div>

</div>

То есть у чекбоксов нет индекса по типу jform[resort][City1] jform[resort][City2] и так далее , что в принципе логично ведь в манифесте объявлено поле с типом City и таким же именем а все остальные действия производятся в файле с классом.

Собственно вопрос: как мне добавить индекс в массив чекбоксов что бы на фронтенде выводило jform[resort][City1] jform[resort][City2 и так далее  ? Что то совсем в тупик зашел :(



*

Оффлайн zomby6888

Никогда не передавали массив через форму?
Код: (php) [Выделить]
$var_list.= '<div><input name="'.$this->name.'[]" type="checkbox" value="'.$citys->title.'">'.$citys->title.'</div>';
интернет-блог: http://websiteprog.ru

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Никогда не передавали массив через форму?
Код: (php) [Выделить]
$var_list.= '<div><input name="'.$this->name.'[]" type="checkbox" value="'.$citys->title.'">'.$citys->title.'</div>';

Честно говоря нет :(.
Спасибо, вот и был мой тупняк ) Помогло :) Вроде бы теперь все оки  :D
« Последнее редактирование: 13.07.2016, 03:09:29 от voron121 »

*

Оффлайн zomby6888

Дальше я надеюсь вы уже сами додумаетесь? ну и славненько  ;)
интернет-блог: http://websiteprog.ru

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Дальше я надеюсь вы уже сами додумаетесь?

Нуууу как бы надеялся но пока хз - в print_r массив есть, а вот в запросе в БД в моделе что то не так - вместо диапозона значений просто пробел 

Код: (php) [Выделить]
[resort] => Array ( [City] => Array ( [0] => дубаи [1] => Куршавель [2] => Кириловка ) ) )

*

Оффлайн zomby6888

Цитировать
вместо диапозона значений просто пробел

Нет там никаких диапозонов. Не выражайтесь так, это сбивает с толку реально.

Код: (php) [Выделить]
$query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['resort']['City']). "'" .' )');


Так не работает чтоли?

Кстатии у вас в коде потенциальная sql иньекция. Вы внутри массива кавычки не экранируете. Еще одним дырявым компонентом станет больше  :laugh:?
« Последнее редактирование: 13.07.2016, 03:30:46 от zomby6888 »
интернет-блог: http://websiteprog.ru

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Нет там никаких диапозонов. Не выражайтесь так, это сбивает с толку реально.

Код: (php) [Выделить]
$query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['resort']['City']). "'" .' )');


Так не работает чтоли?

Кстатии у вас в коде потенциальная sql иньекция. Вы внутри массива кавычки не экранируете


все работает. только что разобрался. я, по не внимательности, изначально пытался вложить  чекбоксы в массив resort и в итоге, после внесения правок у меня получился трех уровневый массив. Исправил манифест - все оки :)

За кавычки - да, есть такое, пока что не добрел до них т.к работы много, работа для меня немного (да что уж тут скрывать - ох как много) не знакомая в плане создания компонента с нуля, по этому сначала хочу написать работающий  прототип, который уже после буду доводить до идеала, если есесн получится :)

*

Оффлайн zomby6888

Вы только не торопитесь прототип на JED выкладывать а то у Joomla расширений и так репутация не айс)
интернет-блог: http://websiteprog.ru

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Вы только не торопитесь прототип на JED выкладывать а то у Joomla расширений и так репутация не айс)

не не не - это  врятли пойдет в мир ... думал конечно написать компонент, потом его выставить на тест, потом начать его продавать, заработать кучу денег и уехать отдыхать на моря :) (Joke) но нет - это только для 1 проекта + думаю  у Joomla и так много аналогов моего компонента + он не совершенен и еще куча минусов что бы его не выпускать в мир :)

А на счет репутации - вы знаете, видел множество работ на "CMS всея рунета Wordpress "  - то ли криворукие мне попадались, хотя я сам не ТЫЖ программист, то ли оно так и есть, но такой бред честно говоря . Как только пытаются выйти за пределы блога на WP  - все..., просто  большая Ж а не проект.  При чем и на самописах часто тоже  такое встречал . А вот Joomla, с моей точки зрения, весьма недооцененная CMS . Ей бы еще систему мультиязычности (в плане наполнения в бекенде) как у опенкарт - цены бы не было :)

*

Оффлайн zomby6888

Цитировать
не не не - это  врятли пойдет в мир ... думал конечно написать компонент, потом его выставить на тест, потом начать его продавать, заработать кучу денег и уехать отдыхать на моря Azn (Joke) но нет - это только для 1 проекта + думаю  у Joomla и так много аналогов моего компонента + он не совершенен и еще куча минусов что бы его не выпускать в мир Azn

Ну в перспективе то вы можете стать вполне успешным разработчиком расширений. Лично мне ваша самокритичность нравится. Если приложить к этому упрямство и желание развиваться то можно и на морях отдыхать и работать)

Цитировать
А на счет репутации - вы знаете, видел множество работ на "CMS всея рунета Wordpress "  - то ли криворукие мне попадались, хотя я сам не ТЫЖ программист, то ли оно так и есть, но такой бред честно говоря . Как только пытаются выйти за пределы блога на WP  - все..., просто  большая Ж а не проект.  При чем и на самописах часто тоже  такое встречал . А вот Joomla, с моей точки зрения, весьма недооцененная CMS . Ей бы еще систему мультиязычности (в плане наполнения в бекенде) как у опенкарт - цены бы не было Azn

Не могу не согласится. Качество кода никак не зависит от платформы на котором он написан.
интернет-блог: http://websiteprog.ru

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Цитировать
Ну в перспективе то вы можете стать вполне успешным разработчиком расширений. Лично мне ваша самокритичность нравится. Если приложить к этому упрямство и желание развиваться то можно и на морях отдыхать и работать)

Возможно, но у меня серьезнейшие пробелы в базовых знания, исправить которые не дает моя лень, вечная не хватка времени и не знания английского (никогда бы не подумал что в наше время, когда почти все есть на русском, буду чувствовать себя  не комфортно без знания английского :) ). Ну да ладно, это лирика, главное что теперь я умею писать свои классы для полей в Joomla :) Теперь я на одну ступеньку ближе к ТЫЖ программист :)

*

Оффлайн SmokerMan

А на счет репутации - вы знаете, видел множество работ на "CMS всея рунета Wordpress "  - то ли криворукие мне попадались, хотя я сам не ТЫЖ программист, то ли оно так и есть, но такой бред честно говоря . Как только пытаются выйти за пределы блога на WP  - все..., просто  большая Ж а не проект.  При чем и на самописах часто тоже  такое встречал . А вот Joomla, с моей точки зрения, весьма недооцененная CMS . Ей бы еще систему мультиязычности (в плане наполнения в бекенде) как у опенкарт - цены бы не было :)
на счет вашего вопроса, честно сказать он никак не относится ни к любой системе, т.к. это тупо основы)
на счет "мультиязычности" как вы выразились, Joomla так же как и другие системы этим обладает изначально, возможно тут есть место в вашей ограниченной знакомством с той или иной системой

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Цитировать
возможно тут есть место в вашей ограниченной знакомством с той или иной системой

Ну может и так, хотя здесь с вами поспорю. Возможно я не совсем так выразился. В  Joomla есть мультиязычность, но  работать с мультиязычным сайтом на Joomla , если есть более 2-ух языков и много контента весьма проблематично. Проблематично в каком плане - к примеру в Opencart при редактировании товара или какой-либо иной записи у меня просто на 1 странице есть вкладки для наполнения информацией на том или ином языке (примерно так же и на WP). В Joomla? если брать из коробки, необходимо дублировать весь контент для каждого языка отдельно. Это в каком то плане удобнее, но с другой стороны, если на сайте 3 - 4 или олее языков, вызывает некоторые трудности в наполнении сайта .

*

Оффлайн SmokerMan

Проблематично в каком плане - к примеру в Opencart при редактировании товара или какой-либо иной записи у меня просто на 1 странице есть вкладки для наполнения информацией на том или ином языке (примерно так же и на WP). В Joomla? если брать из коробки, необходимо дублировать весь контент для каждого языка отдельно. Это в каком то плане удобнее, но с другой стороны, если на сайте 3 - 4 или олее языков, вызывает некоторые трудности в наполнении сайта .
я не совсем понял)
контент и так должен быть разным в чем проблемы то?

*

Оффлайн voron121

  • ****
  • 222
  • [+]1 / [-]0
  • Пол: Мужской
  • Метод тыка и мата помогает в кодинге
    • Просмотр профиля
Цитировать
контент и так должен быть разным в чем проблемы то?

В юзабилити :)

Смотрите, если я пишу статью или добавляю новый пункт меню на сайте под упралением Joomla и на этом сайте к примеру 5 языков, то по сути мне нужно создать 5 пунктов меню, 5 статей или 5 других элементов для каждого языка. То есть на 1 действие  "создать статью" я делаю 5 действий для каждого языка.

 При работе с opencart (к примеру, не только в опенкарт есть такой подход) я просто 1 раз открываю страницу с редактированием материала и у меня есть 5 вкладок для каждого языка. То есть я получается раз открыл страницу, заполнил контент, для каждого языка в своей вкладке, и нажал "сохранить". При этом в БД opencart есть 2 таблицы (чаще их больше, просто для примера 2 берем ) :  product и product_description . В первой таблице хранятся данные, которые для всех языков одинаковы, на примере опенкарт это цена или артикуль, то есть то что не стоит переводить. А во второй таблице, product_description хранится текстовая информация для каждого языка, которая привязана по ид товара (ид товара хранится в таблице product) и просто подгружается при редактировании товара в админке.

То есть как бы удобнее для работы с мультиязычным сайтом  :) Но опять таки это лично мое мнение, и оно может не каждому подойти или понравиться :) 

*

Оффлайн SmokerMan

ну если вы в пример привели opencart, то по моему в том же джумшопинге и вирте  вроде так и сделано
суть конечно понятна, но я думаю это не делается по одной простой причине - в большинстве своем сайты делаются на 1 языке)
для такого удобства это можно сделать дополнениями, что я думаю вполне реализуемо, может даже они уже и есть)