2012-07-24 18 views
9

पोस्ट जोड़ने और संपादित करने के लिए एक दृश्य मैं कोडिनेटर में एक सीएमएस पर काम कर रहा हूं और एक मुख्य भाग पोस्ट बनाने और संपादित करने का एक रूप है।कोडनिर्देशक:

मैं दोनों के लिए एक ही दृश्य फ़ाइल का उपयोग करने की योजना बना रहा हूं क्योंकि सभी तत्व साझा किए जाते हैं। एकमात्र अंतर यह बनाते समय फॉर्म खाली होता है जब इसे संपादित किया जाता है और इसे पॉप्युलेट किया जाता है। क्या यह सही रास्ता है?

मैं प्रत्येक के लिए एक विधि रखने के बारे में सोच रहा था, इसलिए पोस्ट/बनाएं और पोस्ट/संपादित करें ($ आईडी)।

पद नियंत्रक मैं सभी प्रपत्र इस तरह (त्रुटियों के लिए) डेटा है में बनाने के विधि में:

$this->data['item_title'] = array(
    'name' => 'item_title', 
    'id' => 'item_title', 
    'type' => 'text', 
    'value' => $this->form_validation->set_value('item_title'), 
); 

मैं सिर्फ मूल्य में फेरबदल set_value के बजाय डेटाबेस मूल्य धारण करने के लिए के बारे में सोच रहा हूँ (), तो कुछ ऐसा:

public function edit($id) { 

$post_data = $this->post_model->get_post_data($id) 

     $this->data['item_title'] = array(
     'name' => 'item_title', 
     'id' => 'item_title', 
     'type' => 'text', 
     'value' => $post_data['post_title'], 
    ); 
} 

क्या मैं सही रास्ते पर हूं या इस तक पहुंचने का एक बेहतर तरीका है? क्या मुझे सिर्फ 2 विचारों का उपयोग करना चाहिए?

उत्तर

7

मैं आंशिक _form.php का उपयोग करता हूं जो एक नए द्वारा साझा किया जाता है और नियंत्रक कार्रवाई को संपादित करता है।दोनों कार्यों पर मेरे पास समान सत्यापन हैं इसलिए मैंने उन्हें नियंत्रक कन्स्ट्रक्टर में स्थानांतरित कर दिया, फिर प्रत्येक इनपुट के लिए मैं केवल एक टर्नरी ऑपरेटर का उपयोग करता हूं जो कहता है कि मौजूदा मान $title प्रदान किया गया है, तो इसका उपयोग करके <input> मान को पॉप्युलेट करें, अन्यथा कोडिनेटर set_value() सहायक का उपयोग करें सत्यापन मूल्य के साथ पॉप्युलेट करने के लिए।

<input type="text" name="title" value="<?php echo isset($title) ? set_value("title", $title) : set_value("title"); ?>" /> 
+0

पोस्ट संपादित करते समय यह काम नहीं करता है और झूठी फॉर्म सत्यापन लौटाता है। – Hossein

+0

'<इनपुट प्रकार =" टेक्स्ट "नाम =" शीर्षक "मान =" "/>' – Hossein

2

मैं आमतौर पर इसमें कुछ चर के साथ एक दृश्य का उपयोग करता हूं। फ़ील्ड्स के मान या तो सर्वर से डेटा से सेट किए जा सकते हैं या उन्हें खाली छोड़ दिया जा सकता है। इस पर निर्भर करता है कि डेटा प्रदान किया जा रहा है या नहीं, मैं यह बदलता हूं कि फॉर्म किस क्रिया का उपयोग करेगा क्योंकि यह जोड़ या संपादित हो सकता है।

यह सबसे प्रभावी तरीका है, क्योंकि यह पुनर्प्रयोग :)

एक त्वरित उदाहरण के विचार का उपयोग करता होना चाहिए

<form action="<?php echo !$data ? "admin/add" : "admin/edit" ?> method="post"> 
    <input type="text name="test" value="<?php echo $data['test'] ? $data['test'] : "" ?>" /> 
</form> 
1

मैं CodeIgniter (ज्यादा CakePHP में बेहतर है), लेकिन में कम से समर्थक नहीं हूँ एमवीसी का दिल यह है कि एक क्रिया में एक दृश्य होता है।

आपके पास इसे एक दृश्य में रखने का कोई कारण नहीं है। :)

+1

रेल पर रूबी में, उत्पन्न मचान कोड में दो अलग-अलग नामित विचार हैं लेकिन आंतरिक रूप से वे एक आंशिक उपयोग करते हैं जिसमें एक ही रूप होता है। यह स्वयं को दोहराएं (डीआरवाई) सिद्धांत नहीं है। यदि आप दृश्यों को जोड़ने और संपादित करने के लिए देखते हैं तो आपको बहुत अधिक कोड डुप्लिकेट किया जाता है, खासकर जब वे अधिक जटिल होते हैं। –

0

यह निश्चित रूप से संभव है, क्योंकि मैं इसे हर समय करता हूं।

आम तौर पर, मैं होगा:

कार्रवाई

function edit($PageID = -1) 
{ 
    $Page = new stdClass(); 
    if($PageID === -1) 
    { 
     $Page->Title = $Page->Description = $Page->Keywords = ''; 
     $Page->PageID = -1; 
    } 
    else 
    { 
     $this->load->model('page_model'); 
     $Page = $this->page_model->GetByPageID($PageID); 
     if(empty($Page)) 
     { 
      show_404(); 
      return; 
     } 
    } 
    if($this->input->post('Save', true) !== false) 
    { 
     // perform validation 
     if($PageID === -1) 
     { 
      // insert 
     } 
     else 
     { 
      // update 
     } 
    } 
    $data = array 
    (
     'Page' => $Page 
    ); 
    $this->load->view('edit_page', $data); 
} 

देखें

<?= form_open(); ?> 
    <fieldset> 
     <label for="title">Title: </label> 
     <input type="text" name="title" id="title" value="<?= Form::Get('title', $Page->Title); ?>" /> 
     <br /> 
     <label for="description">Description: </label> 
     <input type="text" name="description" id="description" value="<?= Form::Get('description', $Page->Description); ?>" /> 
     <br /> 
     <label for="keywords">Keywords: </label> 
     <input type="text" name="keywords" id="keywords" value="<?= Form::Get('keywords', $Page->Keywords); ?>" /> 
     <br /> 
     <input type="submit" name="Save" value="Save" /> 
    </fieldset> 
</form> 

संपादित

क्षमा करें, मुझे उल्लेख किया जाना चाहिए था, Form::Get कोडइग्निटर फ़ंक्शन नहीं है, लेकिन मैंने बनाया है। बस, यह उस पोस्ट वैल्यू का मार्ग लेता है जिसे आपको पढ़ने की आवश्यकता है। यदि यह अस्तित्व में नहीं है, यानी आपने पोस्ट नहीं किया है, तो यह केवल दूसरे पैरामीटर से मान प्रदर्शित करेगा।

यदि मैं आपके लिए कोड खोद सकता हूं, तो मैं इसे पोस्ट करूंगा।

संबंधित मुद्दे