Vygenerování txt souboru a odeslání ke stažení
- Ecrazit
- Člen | 16
Ahoj,
v presenteru mám k dispozici pole s určitým počtem prvků, které obsahují texty. Potřeboval bych z tohoto pole vytvořit .txt soubor, kde budou ty jednotlivé prvky odděleny prázdnými řádky a po vytvoření tento .txt soubor odeslat ke stažení. Je tohle možné v nette udělat?
- Ecrazit
- Člen | 16
Snažím se to nějak sepsat, ale když to spustím, skončí mi to v prohlížeči jako Spojení přerušeno, takže netuším, co dělám špatně.
$template = new \Nette\Templating\Template();
$template->registerFilter(new \Nette\Latte\Engine);
$template->setSource('<a href="#">link</a>');
$template->render();
$this->presenter->sendResponse(new \Nette\Application\Responses\FileResponse($template, time() . '.txt', 'text/plain'));
- jansfabik
- Člen | 193
TextResponse umí vracet text, bohužel ne jako soubor (že by feature request?).
use Nette\Application\Responses\TextResponse,
Nette\Latte,
Nette\Templating\Template;
$template = new Template();
$template->registerFilter(new Latte\Engine);
$template->setSource('<a href="#">link</a>');
$name = time() . '.txt';
$content = (string) $template;
$httpResponse = $this->presenter->getHttpResponse();
$httpResponse->setContentType('text/plain');
$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $name . '"');
$httpResponse->setHeader('Content-Length', strlen($content));
$this->presenter->sendResponse(new TextResponse($content));
- Ecrazit
- Člen | 16
Takhle mi to funguje… díky. Snažím se ale výsledný text nějak zformátovat, potřeboval bych tam nějaké odřádkování a vkládám tam tedy \n.
$source = "";
foreach ($row as $item) {
$source .= $item->text . "\n\n";
}
Ve výsledném txt ale žádné odřádkování není. Když zkusím například \t, tak tabelátory se zobrazí správně.
- jansfabik
- Člen | 193
A v proměnné $source
máš kód, který pak formátuješ
pomocí Latte?
Edit: Pokud používáš Windows, tak tam musíš dát \r\n
.
Edit 2: Můžeš to kdyžtak použít i úplně bez Latte:
use Nette\Application\Responses\TextResponse;
$name = time() . '.txt';
$content = '';
foreach ($row as $item) {
$content .= $item->text . "\r\n\r\n";
}
$httpResponse = $this->presenter->getHttpResponse();
$httpResponse->setContentType('text/plain');
$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $name . '"');
$httpResponse->setHeader('Content-Length', strlen($content));
$this->presenter->sendResponse(new TextResponse($content));
Editoval jansfabik (24. 9. 2012 22:50)