Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 12. 10. 2014, 20:06:49
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 |
#2 · Zasláno: 12. 10. 2014, 20:21:22
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 |
#4 · Zasláno: 13. 10. 2014, 09:03:32
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 |
#5 · Zasláno: 13. 10. 2014, 17:29:45
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 |
#7 · Zasláno: 13. 10. 2014, 19:21:56
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 |
#8 · Zasláno: 13. 10. 2014, 21:11:05
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 |
#9 · Zasláno: 14. 10. 2014, 07:24:13
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 |
#10 · Zasláno: 14. 10. 2014, 21:03:20
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 |
#11 · Zasláno: 16. 10. 2014, 19:24:23
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 |
#12 · Zasláno: 16. 10. 2014, 20:22:04
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 return om, 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 |
#14 · Zasláno: 17. 10. 2014, 10:52:24
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 |
#15 · Zasláno: 17. 10. 2014, 22:09:07
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. |
||
Časová prodleva: 10 let
|
0