Jeremy David Pointer wrote:
> I'm not sure I'm getting to where your problem actually is because you
> haven't told us what is or is not happening.
> But.......
> 0. I'm using Cake 1.2 so some things might be different
> 1. I don't see why you would want to redraw the tree, when I do this I
> set up a div below the tree that's a simple 'Updated' view rendered into
> it after the save completes. i.e. don't update the div with the tree in
> it but rather another div to indicate whether the save was successful or
> not.
> 1a. If you really want to redraw the tree the place to do it would be in
> the 'save' view (which you haven't included)
>
> 2. I see the ajax is supposed to submit with an interval which could
> work but you seem to be missing a 'before' option in the $ajax->submit
> that would call your saveMyTree_byForm(), it's just my preference but I
> tend to use a combination of onkeypress/onmouseout of the tree div to
> update the hidden field and only submit the form when a save button is
> pressed since the save button is outside the div the hidden field will
> be updated before the button is clicked, the onkeypress is in case the
> keyboard is used to submit i.e. the enter key. In this way I'm not
> unecessarily repeatedly posting to the server.
>
> So in the view:
> <div ......
> onmouseout="document.getElementById('ModuleSavestring').value=treeObj<?=$uniq;?>.getSaveString();"
> onkeypress=(same as above)..... >The tree</div>
> <div id="updateTree"></div>
> <input type="hidden" value="" id="ModuleSavestring"
> name="data[Savestring]" />
> <?php echo $ajax->submit('Save
> Tree',array("update"=>"updateTree".$uniq,"url"=>"updateTree")); ?>
>
>
oops just ignore the .$uniq above the rest of the form that I'm took
this from is complex with the possibility of multiple div's have the
same name in a dhtml tabbed layout so nearly all my divs have .$uniq to
uniquely identify them.
> 3. Maybe I'm being dof (Afrikaans word for dim) but in my controller
> side save method I parse the variable containing the hidden field and
> save the items one by one ala
> (this example only works to two levels of the menu):
>
> 4. For interest sake my initial menu is populated by
> model->findAllThreaded()
>
> function updateTree() {
> if (!empty($this->data)) {
> $nodes=split(',',$this->data['Savestring']);
> $vals=array();
> foreach($nodes as $val) {
> $vals[]=split('-',$val);
> }
> $modids=$this->data['Module'];
> $modids[0]=0;
> $modules=array();
> foreach($vals as $order=>$record) {
> $modules[$order]['Module']['id']=$modids[$record[0]];
> $modules[$order]['Module']['parent_id']=$modids[$record[1]];
> $modules[$order]['Module']['order']=$order;
> }
> $this->data['Module']=$modules;
> foreach($modules as $module) $this->Module->save($module);
> $this->render('updatetree');
> }
> }
>
> HTH
> Jeremy
> noso wrote:
>
>> Hi everybody!
>>
>> I have a problem with posting a form.
>> I use the tree Ajax component of DhtmlGoodies (http://
>> www.dhtmlgoodies.com/scripts/drag-drop-folder-tree/drag-drop-folder-tree.html)
>> and I want to save it's structureString to the database. The problem
>> is that it uses a javascript code to fill the hidden field in the
>> form.
>>
>> ================================================================
>> <!-- edit.thtml -->
>> ================================================================
>> <div id="menuTree_edit">
>> <ul id="menuTreeContainer" class="DHTMLSuite_tree">
>> <li id="node_10000" noDrag="true"><a href="#">MenuBar</a>
>> <ul>
>> #### TREE STRUCTURE ####
>> </ul>
>> </li>
>> </ul>
>> </div>
>>
>> <?= $ajax->form(array('action'=>$html->url('save')));?>
>> <?= $html->hidden('menu_builder/saveString', array('id' =>
>> 'saveString', 'value' => 'none', 'size' => '40')) ?>
>> <?= $ajax->submit('save tree',array('url'=>'save',
>> 'update'=>'menuTree_edit', 'frequency'=>'2')); ?>
>>
>> function saveMyTree_byForm()
>> {
>> document.myForm.elements['saveString'].value =
>> treeObj.getSaveString();
>> document.myForm.submit();
>> }
>>
>> ================================================================
>>
>> ok then I have my controllerclass
>>
>> ================================================================
>> <!-- menu_builder_controller.php -->
>> ================================================================
>> class MenuBuilderController extends AppController {
>> var $name = 'MenuBuilder';
>> var $helpers = array('Html', 'Javascript', 'Ajax');
>> //var $components = array('RequestHandler');
>>
>> var $myMenuItems = array();
>> var $TreeData=array();
>>
>> function index()
>> {
>> $this->myMenuItems = $this->MenuBuilder->findAll();
>>
>> $this->set('menubuilder', $this->myMenuItems);
>> if(isset($this->params['requested'])) {
>> return $this->myMenuItems;
>> }
>> }
>>
>> function edit(){
>> $this->myMenuItems = $this->MenuBuilder->findAll();
>> $this->set('menubuilder', $this->myMenuItems);
>> }
>>
>> function save(){
>> $success = true;
>> $succesMessage = 'Menu update successfully';
>> if (empty($this->data)){
>> $success = false;
>> $errorMessage = "Error in menu updating - no
>> data";
>> }else{
>> ### some building code ##
>> $this->MenuBuilder-
>>
>>
>>> save(array('MenuBuilder' => $this->params['data']['item']
>>>
>>>
>> ['MenuBuilder']));
>>
>> }
>> $this->render('save', 'ajax');
>> }
>>
>> ================================================================
>>
>> Can somebody tell me how I post my form with the saveString with Ajax
>> and refresh the result in the edit.thtml menuTree_edit-div. So if I
>> click save the data is saved and my tree-view updates in the right
>> region of the screen.
>>
>> Thanks in advance!
>> Greetings to you all!
>>
>>
>>
>>>
>>>
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---