Новости Joomla

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте.

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

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

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Ну о том и где должно находиться можно долго рассуждать, ведь концепция mvc весьма гибкая штука, но работа с базой однозначно в модель. А вот что до этого делать, в частности где подготавливтаь данные к запросу и где формировать ответ, вопрос более сложный.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

AlekVolsk

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
нужна
Спасибо.

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

Виталик

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте! Спасибо. Пробую...
Содержимое модели, файл 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

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

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

robert

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Новая версия админской части компонента:
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

  • Живу я здесь
  • 3370
  • 168 / 4
Почему не найдена модель?
Честно не разу не юзал главный контролер (ибо обычно если делаю компонент под сайт, то там сразу много задач) Ну в доп контролерах функция получения модели прописывается отдельно
Код: 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 опишите вообще полностью задачу компонента, может вообще зря мучиетесь
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Код: 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

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

Я же говорю, поменяйте 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

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

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:
Цитировать
Модель класса 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

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

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:а 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

  • Живу я здесь
  • 3370
  • 168 / 4
Мне нужно будет чтобы в эксель и картинки были плюс формат вывода нестандартный. Да и CSVI довольно большой, легче я думаю и полезнее для меня будет с нуля создавать
Полезнее, разве что ради развития. А так ну это ваше время решать вам
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

borro

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

Aleks.Denezh

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Спасибо. Были ошибки в именовании модели  ^-^
« Последнее редактирование: 28.09.2016, 15:37:48 от borro »
*

borro

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

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

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

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

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

Прописать условие для сохранения данных в БД

Автор semen1707

Ответов: 0
Просмотров: 313
Последний ответ 14.04.2021, 00:59:44
от semen1707
Создание компонента для табеля рабочего времени

Автор sashahz

Ответов: 7
Просмотров: 471
Последний ответ 12.04.2021, 11:12:11
от sashahz
Вызов формы компонента в pop-up, при клике по ссылке из любого места

Автор SkyAn

Ответов: 1
Просмотров: 392
Последний ответ 01.03.2021, 04:08:48
от gartes
Документация по разработки компонента для Joomla 3.x

Автор Aspik

Ответов: 9
Просмотров: 2896
Последний ответ 23.01.2021, 07:55:56
от hmr
Сборка инсталятора компонента файлами из разных папок с привлечением github

Автор borro

Ответов: 1
Просмотров: 410
Последний ответ 25.12.2020, 21:21:30
от platonische