2012-02-11 38 views
1

目前我創造我自己的CMS和我有一個很難回答的問題(我認爲這是)我不能發現在谷歌什麼...與Zend_Config_Ini的AJAX和PHP

我試圖讓一個edit_settings.php與AJAX和PHP,包括我的Zend_Config_Ini它因爲我用這個爲我的config.ini解析和寫作。

有是PHP代碼的基礎(我的數組是不存在的,正常):

<?php 
$config = new Zend_Config_Ini('config.ini',null,array('skipExtends' => true, 'allowModifications' => true)); 

// Write the config file 
$writer = new Zend_Config_Writer_Ini(array('config' => $config,'filename' => 'config.ini')); 
$writer->write(); 
?> 

例:我點擊「編輯」和紅色邊框區成爲一個輸入字段和我可以在不更改頁面的情況下對其進行編輯,我只需要點擊「保存」以將配置保存在config.ini文件中。

CMS Admin

我知道這需要AJAX,PHP和Zend_Config_Ini,但我不知道如何將它們連接在一起......

的問題:我怎麼能這樣做呢?

+1

你見過這個嗎? http://www.appelsiini.net/projects/jeditable – vascowhite 2012-02-11 10:11:43

回答

1

我不會去整個頁面刷新的事情。它增加了額外的邏輯控制器。邏輯可能很容易在專業阿賈克斯控制器和jQuery的AJAX是冷靜和AJAX是完美的編輯就地東西

我會做如下假設:。

  • 你使用jQuery

  • 你知道有效的JSON字符串成爲j中的一個JS對象查詢

  • 你有一個AjaxController以「settingsEditAction」

  • 你知道,這是我的採取你的問題,而不是強加的 思考任何風格,甚至編碼的;這是如何會做到這一點,所以這是壞 還是不錯的。

  • 你知道我在NP ++寫這個,把我的頭頂部,這樣你就不會嚇壞了失蹤冒號或類似

在AjaxController:

public function settingsEditAction() 
{ 
    $json = array('success' => false); 

    $inputName = $this->_getParam("inputName"); 
    $inputVal = $this->_getParam("inputVal"); 

    // all OK? 
    if (!$this->_request->isXmlHtmlRequest() || 
     !$this->_request->isPost() || 
     is_null($inputName) || 
     is_null($inputVal)) 
    { 
     $this->_helper->json($json); 
    } 


    $iniWriter = new Zend_Config_Writer_Ini(); 

    // modify ini with according to input name and value; sanitize before writing 

    // I haven't use an ini writer, but if the write() method returns a boolean, 
    // store it in the success key 
    $json['success'] = $iniWriter->write() 

    $this->_helper->json($json); 
} 

jQuery的部分:

$(document).ready(

    // say we have <p class="edit">edit</p><p>Value</p> 

    // on click "edit", do DOM manipulation to turn into <p class="save">save</p><input name="inputname" value="some value" /> 

    $("p.save").on('click', function() { 

     // somehow get the above input; I'm using it as a sibling; use "parents" or "children" etc. 
     $input = $(this).siblings("input"); // $(this) is the current clicked element (<p>) 

     // create data container to send to ZF 
     var ajaxObj = { 
      'inputName': $input.attr("name"), 
      'inputVal': $input.val() 
     }; 

     // manage the response as a JSON 
     var callback = function(json) { 
      if (json.success) { 
       // change from input text to <p> to simulate edit-in-place 
      } else { 
       // alert? show error markup? 
      } 
     }; 

     // Remember "settingsEditAction" in the "AjaxController"? That's "settings-edit" in URL-speak as per ZF conventions 
     // The last param is the data type you expect from server 
     // Use POST for posting, GET for getting, what? 
     $.post('/ajax/settings-edit', ajaxObj, callback, 'json'); 

    }); 

); 

LE:
其實我米是您單擊編輯的部分,並且p變爲input
單擊edit:第一個p具有「保存」作爲文本,並且兄弟p成爲輸入。
點擊save款:發帖;如果成功,請設置原始標記(2 <p>'s)。

0

我不知道你是否真的需要ajax這個問題。阿賈克斯將是整潔乾淨的,但我認爲你可以在沒有它的情況下完成你想要的任務。
我經常在單個頁面上執行進程而無需導航。我發現如果我使用:

$this->_redirect($this->getRequest()->getRequestUri()); 

它只是刷新頁面的新信息。
事實上它似乎我總是用這個在catch塊例外以FlashMessenger顯示例外:

catch (Zend_Exception $e) { 

      $this->_helper->flashMessenger->addMessage($e->getMessage()); 
      $this->_redirect($this->getRequest()->getRequestUri()); 
     } 

附:我會幫助Ajax,但我不會做JavaScript ...但:(我不會去做javascript ...但:(