Autor Zpráva
jefitto44
Profil
Ide o to, že mám nejakú šablónu na zmluvu a potrebujem, aby celý tento mechanizmus fungoval nasledovne.
Administrátor príde na určitú stránku, kde bude formulár, napr. meno klienta, adresa ,... tieto veci sa jednak uložia do databázy, druhák sa otvorí wordovská predloha, a tam sa vpíšu dané údaje.
Nebol by s tým nijaký problém, keby som vedel, ako sa cez PHP dá vyriešiť, aby vo worde napr. napísalo bold písmom niektoré veci, ktoré potrebujem.... Je na to nejaká knižnica s dobrou dokumentaciou? Používam tam iba fopen, fwrite? Alebo je to zložitejšie, ako si predstavujem?

Ak by to stačilo riadkovať, jednoducho by som šablonu vyechoval s tým, že na konci riadku by bolo PHP_EOL a premenné by boli vpísané priamo v echu a uložil ako .doc ... lenže také jednoduché to asi nie je...
Alphard
Profil
Je to dost problémové, k prozkoumání bych doporučil phpword.codeplex.com (ale jen proto, že je to odkázané z phpexcel.codeplex.com, Word verzi neznám).
Lepší by bylo navrhnout systém tak, aby se všechny potřebné údaje zadaly online a pak se (např. k tisku) generovalo pdf, to už je relativně vychytané.
Marschmallow
Profil
jefitto44:
Necheš uložit Word jako HTML, pak změnit koncovku na .php a odesílací formulář nasměrovat na .php soubor toho Wordu, ve kterém se vyechuje odeslaný obsah z formuláře pomocí proměnných $jmeno, $adresa ?
jefitto44
Profil
Rozumiem, kvázi by to ani nemusel byť word, pretože mne ide len o to, aby do zmluvy doplnilo údaje o klientovi... A potom to potrebujemv ytlačiť, aby to vyzeralo ako z wordu. Svojím spôsobom to nemusí byť word... dalo by sa to takto vyriešiť? Tam by som mohol na hrubé písmo používať <b>/<strong>, nie?
rafej
Profil
V zásadě by to šlo dvojím způsobem:

a) můžeš se pokusit nastudovat RTF a vytvářet smlouvu jako RTF dokument - je to jednoduší na úpravy, než formáty Wordu

b) vytvořit si XML šablonu, generovat z formulářových dat XML soubor, který pak pomocí XSLT přetransformuješ/nastyluješ a pokud by jsi zmákl i XML FO, tak lze kromě HTML konvertovat i do PDF / RTF
jefitto44
Profil
Tek skúsil som ten prvý spôsob - uložiť word šablonu ako html, prepísal som koncovku na PHP a teraz neviem, čo Ďalej... skúšať môžem pomocou fopen, ale to zahyniem, je tam milion riadkov, čo si tam hádže word- všetky tie windowsacke kraviny a navyše mi to neberie kodovanie zo stránky.
Viem to však uložiť aj ako XML... len si neviem predstaviť ako sa to bude medzi sebou kumulovať.

Ideálne pre mňa by bolo naostro narvať celý ten dokument do echa a iba poprepisovať premenné a potom to fopen niekde, kde by sa to dalo brať. Lenže takto to nepôjde... to zomriem...

Asi budem pokračovať v tom prvom, čiže teraz mám súbor template.php a v ňom si nájdem toto, čo chcem vypísať a miesto toho statického textu tam pohádžem premenné a hotovo?


Potrbujem jednoduchú radu.
Na vyberanie dátumov používam jquery datepicker. V databáze je ako datový typ zvolený DATETIME, ja však potrebujem čisto dátum vo formáte YYYY-MM-DD . Aký dátový typ vybrať? Nie, nechcem tam žiadne prevody unixoveho času, ja viem, že sa to tak má robiť, ale nechcem


Tak opäť som asi trošku pokročil, momentálne mám problém s tým, že neviem file uložiť.

if(isset($_POST["generate"])) { // generovanie samotnej zmluvy a ukladanie - po kliknuti na tlačidlo sa spusti tento mechanizmus
              $contract=include("sitter.php"); // do $contract sa mi nepriradí includovaný súbor
              $filename=$_POST["name"].".htm"; // toto funguje
              $mod="w"; // toto funguje
              $file=fopen($filename, $mod); // toto funguje
              $fileSave=fwrite($file, $contract); // toto funguje

            }         

Takže skoro všetko funguje, ostáva vyriešiť už iba posledný problém. Ono to totiž funguje tak, že ak kliknem na submit button, pusti ma do tohto mechanizmu. Premenné v post vlezú do include súboru av šetko vpylnia tak, ako majú - na stránke sa všetko zobrazí tak, ako sa má. Mal by sa k tomu ale vytvoriť súbor, kde by bola iba táto zmluva a toto by sa malo uložiť cez fopen, fwrite (cesty ešte budem opravovať, tie si nevšímajte). Mojim problémom teda ostáva ako vybrať tú šablonu a povkladať do nej premenné a toto celú už s vypísanými premennými vhodiť do premennej $contract a následne to fopen a fwrite do súboru? S týmto si už naozaj neviem rady, hej a taká vec je, že ten súbor mi vytvorí, ale je v ňom iba napísaná jednotka, čo asi bude znamenať true
jefitto44
Profil
Ak miesto include použijem file_get_contents... tak je to skoro tak ako chcem... ibaže teraz nefungujú premenné, čo zadám do formulára :( To je na samovraždu
Kubo2
Profil
jefitto44:
Skús namiesto tvrdého vpisovania šablóny do súboru sitter.php doplnený obsah tej šablóny vrátiť.

Súbor sitter.php:
<?php

return <<<SABLONA
<html>obsah šablóny <span>$premenná</span> apod.
...
SABLONA;

A ten hlavný kód ti zostáva:
$contract = include('sitter.php');
// ...

Vyskúšaj si to.
jefitto44
Profil
Myslíš to tak, že celú tu šablónu narvem do returnu hej?
Tu je ale problém ten, že to musím napísať štýlom
<?
return "?>TEXT ŠABLONY<?";>

A to mi pôjde?
Kubo2
Profil
jefitto44:
Myslíš to tak, že celú tu šablónu narvem do returnu hej?
Nemusíš. Kľudne môžeš využiť napríklad natívne bufferovacie funkcie ob_start() a ob_get_clean().

sitter.php
<?php ob_start() ?>
<html>
obsah šablóny <span><?=$premenná?></span> apod.
...

<?php

return ob_get_clean();

A to mi pôjde?
Prečo nie? Ukážka.
jefitto44
Profil
Ciii, ta ide to... s returnom nešlo, ale s ob_cleanom hej... musím si o tej funkcii viac naštudovať, lebo sa mi páči ;)
$contract=include(subor.php); vracalo 1 a preto mi síce vytvorilo súbor s danými parametrami, ktoré som zadal, ale bolo v ňom iba "1", čo znamená, že include sa podaril
Kubo2
Profil
jefitto44:
musím si o tej funkcii viac naštudovať, lebo sa mi páči ;)
Pozri na bufferovacie funkcie (funkcie pre kontrolu výstupu).

$contract=include(subor.php); vracalo 1
Tak si robil niečo zle. Pretože ak vkladaný súbor niečo vracia returnom, tak volanie include by malo vrátiť danú hodnotu.
rafej
Profil
jefitto44:
$contract=include(subor.php); vracalo 1 a preto mi síce vytvorilo súbor s danými parametrami, ktoré som zadal, ale bolo v ňom iba "1", čo znamená, že include sa podaril
Include ani require neumožňují obsah vráceného souboru ukládat do proměnné. Pokud chceš výstup pozdržet, ukládat a dál s ním pracovat, tak musíš použít již zmiňované bufferovací funkce. Např. takto:
ob_start();
include 'soubor.php';
$fileCont = ob_get_clean(); 
Kubo2
Profil
rafej:
Include ani require neumožňují obsah vráceného souboru ukládat do proměnné.
To je síce pravda, ale málo známa je už spomínaná okolnosť, že vkladaný súbor, podobne ako telo funkcie, môže použiť príkaz return pre vrátenie nejakého obsahu resp. hodnoty, ktorý sa v prípade úspešného vloženia súboru stane návratovou hodnotou príkazu include() resp. require() resp. include_once() resp. require_once().

Otvor si už spomínaný príklad:
vkladaný súbor a
súbor, ktorý ho vkladá.
rafej
Profil
Kubo2
To je pravda, to je dobrá připomínka. Občas to taky používám např. při zpracování šablon, ale pokud chci vrácený obsah vkládaného souboru uložit do proměnné a hned ho nevypisovat, tak jiná možnost než bufferovací funkce neexistuje, ne?
Jefitto44 si může vybrat, kterou možnost bude potřebovat. Ale je lepší vědět i to, co třeba potřebovat nebudu, než aby mi nějaká zásadní informace chyběla a vymýšlelo se hranaté kolo.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: