मैं उपयोगकर्ताओं के लिए इनवॉइस और अन्य टैब्यूलर डेटा की पीडीएफ प्रतियां उत्पन्न करने में सक्षम होने के लिए काम कर रहा हूं। ऐसा करने के लिए, मैंने dompdf को एक लाइब्रेरी में लपेट लिया है जिसे मैं सीआई के साथ उपयोग कर सकता हूं और एक विधि बनाई है जो सीआई के output->get_output()
के रिटर्न वैल्यू के आधार पर पीडीएफ उत्पन्न करेगी। रैपर this one on Github के समान है।क्या मैं कोडिग्निटर आउटपुट क्लास को डेटा प्रदर्शित किए बिना डेटा पास कर सकता हूं?
समस्या यह है कि, मैं load->view()
के अलावा सीआई के आउटपुट क्लास में दृश्य (और पीडीएफ के लिए एचटीएमएल/सीएसएस की आवश्यकता) प्राप्त करने का कोई तरीका नहीं समझ सकता, जो ब्राउज़र पर लिखने जा रहा है।
मेरा एकमात्र अन्य विकल्प पृष्ठ का अनुरोध करने के लिए कर्ल का उपयोग करना होगा, लेकिन यह इतना मूर्खतापूर्ण लगता है क्योंकि मैं इसे आउटपुट बफर से प्राप्त कर सकता हूं। मैं नहीं चाहता कि एचटीएमएल ब्राउज़र पर भेजा जाए, क्योंकि मैंने ब्राउज़र को पीडीएफ की उम्मीद करने के लिए हेडर सेट करने के लिए सेट किया है।
- सब कुछ करते हैं मैं सामान्य रूप से प्रदर्शन
- लोड के लिए दृश्य तैयार करने के लिए करना चाहते हैं:
स्पष्ट है कि, यह है कि मैं क्या पूरा करने के लिए (क्रम में है कि मैं इसे पूरा करना चाहते हैं) चाहते है सीआई उत्पादन वर्ग में देखने के लिए, लेकिन नहीं प्रदर्शित
- मेरी dompdf पुस्तकालय
- सेट करने के लिए
output->get_output()
के रिटर्न मान दर्रा उचित हेडर - मेरी dompdf विधि है कि टी भेज देंगे निष्पादित वह ब्राउज़र के लिए पीडीएफ
मुझे output class documentation पर आधारित चरण 2 करने का कोई तरीका नहीं दिख रहा है।
क्या इसे प्रदर्शित किए बिना आउटपुट क्लास में देखना संभव है? यदि हां, तो कैसे? मैं सीआई 2.0.3 का उपयोग कर रहा हूँ।
संपादित
बहुत उपयोगी Anthony Sterling ने बताया कि I can just get what I want from the loader class तीसरा तर्क यह कह रही एक स्ट्रिंग लौटाने के बजाय सही पर दृश्य प्रस्तुत करने के लिए निर्धारित करके। उदा .:
$lotsaHtml = $this->load->view('fooview', $somearray, TRUE);
और वह मेरी विशेष उदाहरण में बेहतर हो के बाद से मैं आंशिक लोड करने के लिए की जरूरत नहीं है जाएगा। हालांकि, यह अभी भी एक वैध और (मुझे लगता है) दिलचस्प सवाल है, यह जानना आसान होगा कि क्या मैं ओबी से भी प्राप्त कर सकता हूं, शायद अगर मैं में आंशिक का एक गुच्छा है। उनको संयोजित किया जा सकता है, लेकिन यक।
ऐसा लगता है कि मुझे आउटपुट क्लास को कुछ भी प्रस्तुत करने में सक्षम होना चाहिए (अन्यथा, get_output()
क्यों मौजूद है?) तो मैं जो कुछ भी जानता हूं उसके साथ कुछ और कर सकता हूं। मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है।
संपादित 2
कुछ छद्म (लेकिन अब तक वास्तविकता से) कोड को दर्शाता हुआ मैं ऐसा करने की उम्मीद है क्या, यह दिखाते हुए कि मैं क्या किया था और उसके बाद समझा क्या मैं वास्तव में चाहता था करने के लिए से।
चलो कहते हैं कि मैं एक मॉडल inv
नामित का उपयोग कर invoice
नाम के एक नियंत्रक में एक सार्वजनिक विधि genpdf($id)
करते हैं:
public function genpdf($invoiceId) {
$this->load->library('dompdflib');
$this->pagedata['invoice_data'] = $this->inv->getInvoice($invoiceId);
$html = $this->load->view('pdfgen', $this->pagedata, TRUE);
$this->dompdflib->sendPdf($html);
}
कि कोड है कि मुझे लगता है कि अभी काम करता है के लगभग समान है। वहाँ, मैं लोडर पार्स और मुझे एक स्ट्रिंग है, जो मैं अपने dompdf आवरण कि हेडर सेट करता है और ब्राउज़र के लिए PDF भेजता में कार्य करने के लिए पारित रूप में pdfgen
देखने का परिणाम देने के लिए पूछना।
यह सिर्फ लग रहा था जैसे यह सिर्फ उत्पादन बफर ही (आदि सही ढंग से हेडर की स्थापना/के बाद) हो रही द्वारा ऐसा करने के लिए आसान होगा।
या मैं बस हर आंशिक मैं लोड के साथ लगातार उत्पादन वर्ग append_output()
कॉल करने के लिए क्या है?
एकाधिक मॉडल की अधिकता लोड हो रहा है तरीकों को एक साथ काम करने के लिए उत्पन्न करने के लिए इन (वे एक बाद का विचार के रूप में में जा रहे हैं) की जरूरत है, तो मैं बस यह सब इकट्ठा करने और उत्पादन वर्ग से सीधे इसे पुनः प्राप्त करने की उम्मीद कर रहा था। ऐसा हो सकता है कि ऐसा करने के लिए मुझे धीरे-धीरे output->append_output()
पर बात करनी पड़े।
अगर पृष्ठों कैश नहीं किया जाता, तो शायद आप उसे वहाँ से मिल सकता है? – Jurgo
@ जुर्गो दुर्भाग्यवश नहीं, पृष्ठों को स्वयं कैश नहीं किया जा सकता है (ठीक है, शायद वे कर सकते हैं, लेकिन _extremely_ कम समय के लिए जो विश्वसनीय रूप से काम नहीं करेगा)। –
मैं यह नहीं समझ सकता कि इसके साथ क्या हो रहा है। किसी भी तरह आउटपुट क्लास '_display' स्वचालित रूप से नियंत्रक विधि के अंत में कॉल किया जाता है (मुझे लगता है)। यदि आप अपने कंट्रोलर विधि में अंतिम चरण के रूप में 'बाहर निकलें' हैं, तो फ़ंक्शन को कॉल नहीं किया जाएगा और आप किसी भी रिसाव के बिना "मैन्युअल रूप से" आउटपुट को संभालने के लिए अपेक्षित रूप से $- e output-> get_output() 'को प्रतिबिंबित कर सकते हैं। हालांकि, आउटपुट क्लास के साथ सेट किए गए कोई हेडर या तो नहीं भेजे जाएंगे (और प्रोफाइलर जैसी चीजें नहीं चलेंगी), इसलिए यह समाधान सिर्फ एक सुराग नहीं है। –