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

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

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

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

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

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


Метод тыка и мата помогает в кодинге


« : 04.07.2016, 19:40:44 »

Доброго времени суток уважаемые форумчание. Появилась необходимость вывести список статей в форме Joomla. То есть список статей и на против каждой статьи будет чекбокс. Обычно для того что бы вывести данные из бд в списке или в форме я использую тип поля sql . Но запись вот такого типа

Код
			<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
Давно я тут
****

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

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


joom.work


« Ответ #1 : 04.07.2016, 21:06:57 »

делайте свое поле
checkboxesarticles.php
Код:
class JFormFieldCheckboxesArticles extends JFormFieldCheckboxes
{


}

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

в закладки добавьте типы полей
« Последнее редактирование: 04.07.2016, 21:27:23 от saharin88 » Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #2 : 05.07.2016, 00:33:29 »

спс, буду пробовать тогда свой класс изобретать ) А не подскажите где можно примеры глянуть по написанию своего типа поля  Smiley? Видел ман на англискойм (на форуме тема поднималась) но с языками у меня не большая трабла и большую часть инфы я просто не понял да и не полностью там рассписанно было что к чему Sad
Записан
saharin88
Давно я тут
****

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

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


joom.work


« Ответ #3 : 05.07.2016, 01:04:54 »

спс, буду пробовать тогда свой класс изобретать ) А не подскажите где можно примеры глянуть по написанию своего типа поля  Smiley? Видел ман на англискойм (на форуме тема поднималась) но с языками у меня не большая трабла и большую часть инфы я просто не понял да и не полностью там рассписанно было что к чему Sad
в классе JFormFieldCheckboxes  есть свойство checkedOptions (это как раз массив опций где каждая опция это тоже массив из двух значений с ключами value и text), вам нужно переопределить его, например в конструкторе, посмотрите подробнее сам класс, его методы, свойства и все поймете
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #4 : 05.07.2016, 01:07:29 »

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

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

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


Метод тыка и мата помогает в кодинге


« Ответ #5 : 13.07.2016, 01:05:51 »

Нужен хелп .
Следуя рекомендациям на форуме  написал свой класс для чекбоксов. В кратце - форма, в которой будут выводится чекбоксы что то вроде фильтра товаров. В файле с переопределение чекбоксов сл код:

Код
<?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;
     }
}
 
 


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

Код
 
<fields name="resort">
<field
name="City"
type="Citys"
label="COM_TOUR_CITYS">

</field>
</fields>
 

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

Код
<?php foreach ($this->form->getGroup('resort') as $field) : ?>
    <?php echo $field->getControlGroup(); ?>
<?php endforeach; ?>
 

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

Код
if ($formdata['resort'] != NULL) {
$query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['City']). "'" .' )');
}
 

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

Код
<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 и так далее  ? Что то совсем в тупик зашел Sad


Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #6 : 13.07.2016, 01:57:00 »

Никогда не передавали массив через форму?
Код
$var_list.= '<div><input name="'.$this->name.'[]" type="checkbox" value="'.$citys->title.'">'.$citys->title.'</div>';
 
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #7 : 13.07.2016, 02:04:34 »

Никогда не передавали массив через форму?
Код
$var_list.= '<div><input name="'.$this->name.'[]" type="checkbox" value="'.$citys->title.'">'.$citys->title.'</div>';
 

Честно говоря нет Sad.
Спасибо, вот и был мой тупняк ) Помогло Azn Вроде бы теперь все оки  Cheesy
« Последнее редактирование: 13.07.2016, 02:09:29 от voron121 » Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #8 : 13.07.2016, 02:09:27 »

Дальше я надеюсь вы уже сами додумаетесь? ну и славненько  Wink
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #9 : 13.07.2016, 02:11:00 »

Дальше я надеюсь вы уже сами додумаетесь?

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

Код
[resort] => Array ( [City] => Array ( [0] => дубаи [1] => Куршавель [2] => Кириловка ) ) )
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #10 : 13.07.2016, 02:21:43 »

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

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

Код
$query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['resort']['City']). "'" .' )');
 


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

Кстатии у вас в коде потенциальная sql иньекция. Вы внутри массива кавычки не экранируете. Еще одним дырявым компонентом станет больше  laugh?
« Последнее редактирование: 13.07.2016, 02:30:46 от zomby6888 » Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #11 : 13.07.2016, 02:29:22 »

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

Код
$query->where( 'resort  IN ( ' .  "'" . implode("', '",  $formdata['resort']['City']). "'" .' )');
 


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

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


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

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

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

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


« Ответ #12 : 13.07.2016, 02:34:56 »

Вы только не торопитесь прототип на JED выкладывать а то у Joomla расширений и так репутация не айс)
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #13 : 13.07.2016, 02:40:47 »

Вы только не торопитесь прототип на JED выкладывать а то у Joomla расширений и так репутация не айс)

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

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

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

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


« Ответ #14 : 13.07.2016, 03:06:09 »

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

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

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

Не могу не согласится. Качество кода никак не зависит от платформы на котором он написан.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #15 : 13.07.2016, 03:21:22 »

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

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

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

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



« Ответ #16 : 13.07.2016, 03:26:00 »

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

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

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


Метод тыка и мата помогает в кодинге


« Ответ #17 : 13.07.2016, 03:29:57 »

Цитировать
возможно тут есть место в вашей ограниченной знакомством с той или иной системой

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

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

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



« Ответ #18 : 13.07.2016, 03:44:25 »

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

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

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


Метод тыка и мата помогает в кодинге


« Ответ #19 : 13.07.2016, 03:52:18 »

Цитировать
контент и так должен быть разным в чем проблемы то?

В юзабилити Azn

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

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

То есть как бы удобнее для работы с мультиязычным сайтом  Azn Но опять таки это лично мое мнение, и оно может не каждому подойти или понравиться Azn 
Записан
SmokerMan
Профи
********

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

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



« Ответ #20 : 13.07.2016, 15:17:41 »

ну если вы в пример привели opencart, то по моему в том же джумшопинге и вирте  вроде так и сделано
суть конечно понятна, но я думаю это не делается по одной простой причине - в большинстве своем сайты делаются на 1 языке)
для такого удобства это можно сделать дополнениями, что я думаю вполне реализуемо, может даже они уже и есть)
Записан
Страниц: [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