Приветствую товарищи!
Нужна ваша помощь с экспортом данных из компонента CCK Cobalt 8.
в Админку компонента я вывел уже поле в боковом сайдбаре как экспорт, на данный момент для тестового вывода в файл csv и проверка работает получение всех колонок какие мне нужны. Скачивание сразу происходит как нажал на кнопку "экспорт" в сайбаре.
defined('_JEXEC') or die('Restricted access');
include_once JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_cobalt' . DIRECTORY_SEPARATOR . 'api.php';
$api = new CobaltApi();
$result = $api->records(
7,
'all',
'r.ctime ASC',
0,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
'0',
FALSE);
$members = [];
$k = 0;
foreach ($result['list'] as $key) {
$members[$k] = [
$key->id,
$key->title,
$key->created,
JText::_('UKRAINE_' . reset($key->categories)),
$key->fields[27],//Year
$key->fields[28],//Position
$key->fields[29],//Workplace
$key->fields[35][0],//Status
$key->fields[37], //Email
$key->fields[30], //Phone
$key->fields[54], //Payment ID
$key->fields[26], //university
$key->fields[28], //Degree
];
$k++;
}
array_unshift($members, ['ID', 'TITLE', 'created', 'categories', 'Year', 'Position', 'Workplace', 'Status', 'Email', 'Phone', 'Payment', 'university', 'Degree']);
function array2csv(array &$array)
{
if (count($array) == 0) {
return null;
}
ob_start();
$df = fopen("php://output", 'w');
fputcsv($df, array_values(reset($array)));
foreach ($array as $row) {
fputcsv($df, $row);
}
fclose($df);
return ob_get_clean();
}
function download_send_headers($filename)
{
header("Content-Type: application/force-download");
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
}
download_send_headers("data_export_" . date("Y-m-d"). ".csv");
echo array2csv($members);
die();
Файл с данными скачивается но хотелось бы форму сделать на странице view где можно указать будет дату "с" и "по", а так же кол. строк сколько берем.
Где я должен разместить код который выполняет скачивание так чтоб из форму передавать туда данные какие мне надо и файл сразу создается и скачивается ?
Я примеры пересматривал из других компонентов, как то я с этим MVC не разобрался.
Я так понимаю у меня должна быть модель /administrator/components/com_cobalt/models/
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.modellist');
class CobaltBModelExport extends JModelList
{
}
view.html.php
class CobaltViewImportexport extends JViewLegacy {
public function display($tpl = null) {
JHtml::_('behavior.tooltip');
$uri = JFactory::getURI();
$this->action = $uri->toString();
$this->state = $this->get('State');
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
// Check for errors.
if(count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
$this->addToolbar();
parent::display($tpl);
}
protected function addToolbar()
{
JToolBarHelper::title(JText::_('ImportExport' ));
MRToolBar::addSubmenu('Importexport');
JToolBarHelper::custom('export.export', 'file', 'file', 'Экспорт', false,false);
// JToolBarHelper::addNew('export.export');
//JSubMenuHelper::setAction('index.php?option=com_cobalt&view=importexport');
}
}
Как поместить код сюда или что надо сделать так чтоб данные из View поподали в модель где идет действие над ними и ответ вернуло.
Я знаю что код у меня не совсем по стандартам J, прийму ваши советы и помощь.