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

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Здравствуйте.

Продолжаю разрабатывать компонент, который должен по клику на кнопку в админской части предлагать к сохранению excel-файл с данными. Позвольте, все возникающие вопросы буду задавать в одной этой теме.

Скажите, нужна ли такому компоненту модель или все процессы обращения к базе данных за данными лучше прописать в задаче главного контроллера? Никаких форм отображать не надо, просто добыча данных из БД, небольшая компоновка и генерация эксель документа для скачивания.
*

Septdir

  • Практически профи
  • 2273
  • 112
  • JoomlaZen
Ну о том и где должно находиться можно долго рассуждать, ведь концепция mvc весьма гибкая штука, но работа с базой однозначно в модель. А вот что до этого делать, в частности где подготавливтаь данные к запросу и где формировать ответ, вопрос более сложный.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

AlekVolsk

  • Профи
  • 6311
  • 336
Для подготовки запроса в базу, его исполнения и получения первичных данных в модели реализованы спец. функции для этого, если вы хотите формировать файл excel в бекэнде для дальней выдачи на скачивание. то схема примерно такая? в таске вызываете модель, получаете данные из базы, затем формируете прямо в контроллере из полученных данных файл и выдаете его на скачивание
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
нужна
Спасибо.

У вас есть на заметке пример простейшего компонента, который выполняет поставленную задачу? По документации мне не понятно, что должно быть в файле модели, и что в контроллере в данном случае
*

Виталик

  • Группа развития
  • 1238
  • 128
У вас есть на заметке пример простейшего компонента, который выполняет поставленную задачу? По документации мне не понятно, что должно быть в файле модели, и что в контроллере в данном случае
JoomShopping, посмотрите в админке например контроллер JshoppingControllerProductFields
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Здравствуйте! Спасибо. Пробую...
Содержимое модели, файл download.php:
Спойлер
[свернуть]
Содержимое главного контроллера, файл controller.php:
Спойлер
[свернуть]
При попытке открыть страницу компонента в админке выдается:
Цитировать
Fatal error: Class VmpicelistModelDownload contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (JModelForm::getForm) in C:\xampp_new\htdocs\asu160404.ru\www\administrator\components\com_vmpricelist\models\download.php on line 4
Если поставить единственному методу модели abstract, то выдается:
Цитировать
Fatal error: Abstract function VmpicelistModelDownload::getData() cannot contain body in C:\xampp_new\htdocs\asu160404.ru\www\administrator\components\com_vmpricelist\models\download.php on line 12
Я не понимаю суть этих ошибок. Как разрешить ситуацию?

« Последнее редактирование: 23.09.2016, 11:51:21 от borro »
*

b2z

  • Support Team
  • 7464
  • 742
  • Разраблю понемногу
Поменяйте JModelAdmin на JModelList - Вы же список выгружаете. Если хотите оставить JModelAdmin, то надо реализовать метод getForm().

А VmConfig::$defaultLang откуда берётся? Что-то не вижу, где вы определили класс VmConfig.
*

robert

  • Профи
  • 4075
  • 376
Я не понимаю суть этих ошибок. Как разрешить ситуацию?
Добавьте в ваш класс пустую функцию getForm().
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Новая версия админской части компонента:
1. точка входа в админскую часть компонента - главный файл administrator/components/com_vmpricelist/vmpricelist.php:
Спойлер
[свернуть]

2. главный контроллер - файл administrator/components/com_vmpricelist/controller.php:
Спойлер
[свернуть]

3. Вид
3.а. файл administrator/components/com_vmpricelist/views/download/view.html.php:
Спойлер
[свернуть]

3.б. файл макета administrator/components/com_vmpricelist/views/download/tmpl/default.php
Спойлер
[свернуть]

4. Файл модели, файл administrator/components/com_vmpricelist/models/download.php:
Спойлер
[свернуть]

Вопросы:
1. туда ли я поместил запрос к БД, в функцию getForm?
2. при открытии страницы вида download в админке по адресу /administrator/index.php?option=com_vmpricelist&task=download выводится сообщение:
Цитировать
Предупреждение
Модель класса vmpricelistModelDownload не найдена в файле
и var_dump($this->data) выдает null
Почему не найдена модель?
« Последнее редактирование: 23.09.2016, 13:47:21 от borro »
*

Septdir

  • Практически профи
  • 2273
  • 112
  • JoomlaZen
Почему не найдена модель?
Честно не разу не юзал главный контролер (ибо обычно если делаю компонент под сайт, то там сразу много задач) Ну в доп контролерах функция получения модели прописывается отдельно
Код: php
	function getModel($name = 'NAME', $prefix = 'PRFIX', $config = array('ignore_request' => true)) {
return parent::getModel($name, $prefix, $config);
}
Ну или можно в самой функции подключить модель.
Код: php
JModelLegacy::addIncludePath(JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_name'.DIRECTORY_SEPARATOR.'models');
$model = JModelLegacy::getInstance('model', 'prefix');
$model->function(params);
getForm - это функция получения формы, а не для итемов
P.S опишите вообще полностью задачу компонента, может вообще зря мучиетесь
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Код: php
	function getModel($name = 'NAME', $prefix = 'PRFIX', $config = array('ignore_request' => true)) {
return parent::getModel($name, $prefix, $config);
}
Код выше прописывается в подконтроллерах? Не мой вариант?

Ну или можно в самой функции подключить модель.
Код: php
JModelLegacy::addIncludePath(JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_name'.DIRECTORY_SEPARATOR.'models');
$model = JModelLegacy::getInstance('model', 'prefix');
$model->function(params);
Уточните, в какой функции подключить модель вышеприведённым способом

P.S опишите вообще полностью задачу компонента, может вообще зря мучиетесь
Компонент должен по клику на кнопке в админке формировать и предлагать к загрузке эксель документ, данные в который стягиваются из нескольких таблиц БД
« Последнее редактирование: 23.09.2016, 17:52:32 от borro »
*

b2z

  • Support Team
  • 7464
  • 742
  • Разраблю понемногу
Цитировать
Компонент должен по клику на кнопке в админке формировать и предлагать к загрузке эксель документ, данные в который стягиваются из несколько таблиц БД
Ну тогда вам форма вообще не нужна.

Я же говорю, поменяйте JModelAdmin на JModelList
Код: php
class VmpicelistModelDownload extends JModelList

Переделайте getForm на getData().

В контроллере
Код: php
public function getModel($name = 'Download', $prefix = 'Vmpicelist', $config = array('ignore_request' => true))
{
    return parent::getModel($name, $prefix, $config);
}

В представлении
Код: php-brief
$this->data = $this->get('Data');
*

Septdir

  • Практически профи
  • 2273
  • 112
  • JoomlaZen
Уточните, в какой функции подключить модель вышеприведённым способом
В любой, это вообще стандартный выозв модели, хоть в контролере, хоть в хелпере, хоть в моделе (если к примеру надо взять модель из другого компонента), да хоть в шаблоне.

И вообще я к чему просил про задачу полностью. Ибо тот же CSVI PRO неплохо делал экспорт, правда юзал его давно и не уверен что если в формате и кодировке экселя, но ведь проще пресохранить файл, чем писать компонент с 0
« Последнее редактирование: 23.09.2016, 19:26:33 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:
Цитировать
Модель класса VmpicelistDownload не найдена в файле
а var_dump в виде выводит null

Пакет файлов:
1. главный файл administrator/components/com_vmpricelist/vmpricelist.php:
Спойлер
[свернуть]

2. главный контроллер - файл administrator/components/com_vmpricelist/controller.php:
Спойлер
[свернуть]

3. Вид
3.а. файл administrator/components/com_vmpricelist/views/download/view.html.php:
Спойлер
[свернуть]

3.б. файл макета administrator/components/com_vmpricelist/views/download/tmpl/default.php
Спойлер
[свернуть]

4. Файл модели, файл administrator/components/com_vmpricelist/models/download.php:
Спойлер
[свернуть]

Может нужен XML файл какой-то?
« Последнее редактирование: 26.09.2016, 18:13:30 от borro »
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Мне нужно, чтобы в эксель и картинки были плюс формат вывода нестандартный. Да и CSVI довольно большой, легче я думаю и полезнее для меня будет с нуля создавать
« Последнее редактирование: 27.09.2016, 09:25:25 от borro »
*

SmokerMan

  • Профи
  • 5333
  • 689
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:а var_dump в виде выводит null
сказали не то что сделали)
нужно либо
создать отдельный контроллер, наприер /controllers/download.php и ссылатья на его task
Код
<input type="hidden" name="task" value="download.метод контроллера"/>
либо если делать через основной, то это делать так
Код
<input type="hidden" name="task" value="download"/>
в контроллере создать метод download и в нем уже подключать нужную модель
Код
$model = JModelLegacy::getInstance('model', 'prefix');
*

Septdir

  • Практически профи
  • 2273
  • 112
  • JoomlaZen
Мне нужно будет чтобы в эксель и картинки были плюс формат вывода нестандартный. Да и CSVI довольно большой, легче я думаю и полезнее для меня будет с нуля создавать
Полезнее, разве что ради развития. А так ну это ваше время решать вам
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
либо если делать через основной, то это делать так
Код
<input type="hidden" name="task" value="download"/>
в контроллере создать метод download и в нем уже подключать нужную модель
Код
$model = JModelLegacy::getInstance('model', 'prefix');
Доброе утро! Благодарю.
Если пойти через один основной контроллер, то какая(ие) должна быть функция внутри класса модели? Как она должна называться?
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Доброе утро! Благодарю.
Если пойти через один основной контроллер, то какая(ие) должна быть функция внутри класса модели? Как она должна называться?
Как назовете..
Например в контроллере:
Код: php
public function download(){
$excel = $this->getModel('Download','VmpicelistModel')->getExcel();
...
}
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Спасибо. Были ошибки в именовании модели  ^-^
« Последнее редактирование: 28.09.2016, 15:37:48 от borro »
*

borro

  • Живу я здесь
  • 1281
  • 21
  • желаю вам счастья
Здравствуйте.
Всех благодарю. Компонент разработан. Возникла непонятка. Когда устанавливаю его на боевом сайте и пытаюсь открыть из админки, то отображается ошибка:
Цитировать
Не удается получить доступ к сайту

Веб-страница по адресу сайт/administrator/index.php?option=com_vmpricelist&view=download, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_INVALID_RESPONSE
При этом компонент нормально устанавливается и работает на локальном сервере. Выставлял уровень отображения ошибок на "Максимум", но до них не доходит, просто отображается белый экран с указанной ошибкой по середине.

Что это может быть?

Прикладываю установочный архив и принтскрин окна с отображением данных закладки Network панели разработчиков

P.S. Помню, что когда-то вылетало системное всплывающее окно в Хроме о том, разрешить или запретить скачивание файлов с сайта. Я вроде нажал разрешить. Также я нажал на кнопку i слева от адреса сайта в адресной строке, чтобы увидеть настройки сайта и там параметр "Автоматическая загрузка" установлен в значение "Разрешено Вами"
« Последнее редактирование: 07.10.2016, 15:36:55 от borro »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

com_ajax передача данных из формы POST

Автор ChervonStudio

Ответов: 32
Просмотров: 508
Последний ответ 28.08.2017, 10:58:20
от onelawyer
Создание модуля для своего компонента подгрузкой данных по AJAX

Автор john.deff

Ответов: 35
Просмотров: 750
Последний ответ 18.08.2017, 14:17:17
от Aleks.Denezh
Почему строки не удалились из базы данных?

Автор borro

Ответов: 6
Просмотров: 147
Последний ответ 28.06.2017, 10:26:48
от borro
Перенесено: Организация доступа пользователей к контенту кастомного компонента

Автор b2z

Ответов: 0
Просмотров: 66
Последний ответ 15.06.2017, 11:09:09
от b2z
Структура компонента (1 запись + JSON ИЛИ Много записей)

Автор platonische

Ответов: 4
Просмотров: 179
Последний ответ 02.03.2017, 15:18:26
от passer