Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1
  • 2

TOPIC:

[FIXED] pre fill form 27 Oct 2017 20:25 #15421

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
Hello everyone
I am looking to pre-fill a form with localStorage data.

It is better to go through the form or model?

I do not know what to do and I need your help.

thank you in advance

EDIT :

for the moment I chose to do it like this:
<?phpdefined('_JEXEC') or die('Restricted access');

if (!$this->form)
	return;

$fieldSets = $this->form->getFieldsets();
$fieldSet = $this->form->getFieldset('demandeform.form');
?>
<script>
jQuery(document).ready(function() {
	var title = localStorage.getItem('title');
	jQuery("#jform_title").val(title);
// others thinks...
});
</script>

<fieldset class="fieldsform">
	<?php
	// JForms dynamic initialization (Cook Self Service proposal)
	$fieldSet['jform_resourceId']->jdomOptions = array(
			'list' => $this->lists['fk']['resourceId']
		);
	$fieldSet['jform_Chambre']->jdomOptions = array(
			'list' => $this->lists['fk']['Chambre']
		);
		?>
			<?php $field = $fieldSet['jform_title']; ?>
					<?php echo $field->label; ?>
					<?php echo $field->input; ?>
//others thinks...
</fieldset>
</script>

But i don't know if it is protected. For sure that's work
Other Idea without localStorage ??

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 29 Oct 2017 12:14 #15423

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
I am stuck for the auto-select of ckcombo.
how to make jquery so that the selection is automatic from a var ?

I try it but that's don't work ...
jQuery('#jform_resourceId :nth-child(3)').attr('selected', true); // To select via index

any idea ?

Thx in advance

Please Log in or Create an account to join the conversation.

pre fill form 31 Oct 2017 19:02 #15426

localStorage is a webstorage, you can only acces it via javascript.
So, there is no way of getting it in the model, the path you choose is therefore correct.

For the jquery stuff: the select box in Cook is a chosen select. You can change it in jquery like this:
        $('#adminForm').find("input[name='jform[resourceId]']").val(value);
        $('#adminForm').find("select[name='jform[resourceId]']").val(value);
        $('select').trigger("chosen:updated");
        //old way of updating
        $('select').trigger("liszt:updated");
The following user(s) said Thank You: admin, Nicolas

Please Log in or Create an account to join the conversation.

pre fill form 22 Nov 2017 16:22 #15442

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
Hello !

apologies for the answer delay. I was on holiday
everything works perfectly with your method.
thanks again

Is there a way to make a modification on the table without going through the form? something like Ajax post
$.ajax({
     url: 'index.php?option=com_mycomponent&task=component.save',
     data: 'title='+ event.title+'&start='+ start +'&end='+ end +'&id='+ event.id ,
     type: "POST",
     success: function(json) {
     alert("modified");
     }
});

thx a lot

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 22 Nov 2017 22:12 #15443

Sure you can
            jQuery.ajax({
                type: "POST",
                url: "index.php?option=com_mycomponent&task=component.save",
                data: '<?php echo JSession::getFormToken()?>=1&title='+ event.title+'&start='+ start +'&end='+ end +'&id='+ event.id
                 });

You need to get the getFormToken in there.
If you need to know the result, you need to fork the controller, create a new function like "update" or so.
Then
	public function update($key = null, $urlVar = null)
	{
		JSession::checkToken() or JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN'));
                $jinput = JFactory::getApplication()->input;
                $title = $jinput->get('title','','string');
                //here the rest of your inputs
		$result = new stdClass;
                $r = false;
                //you can do what you want here with adding properties to $result
                $result->status = $r;
                //echo the result
                echo json_encode($result);
                //important! Will otherwise put the html the repsonse
                exit;
         }

You the script call a bit different:
            jQuery.ajax({
                type: "POST",
                url: "index.php?option=ccom_mycomponent&task=component.update",
                data: '<?php echo JSession::getFormToken()?>=1&title='+ event.title+'&start='+ start +'&end='+ end +'&id='+ event.id,
                cache: false,
                success: function(r){
                    //parse the json
                    r = jQuery.parseJSON(r);
  		    if (r.status == false) {
			//do something when false
		    } else {
                       //yeah, all went well!
		    }
                } 
            });
The following user(s) said Thank You: Nicolas

Please Log in or Create an account to join the conversation.

pre fill form 23 Nov 2017 02:00 #15444

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
Thanks for this answer.
For the moment i have an error 500 with your code ... i'll try To resolve it tomorow

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 23 Nov 2017 10:15 #15446

Well, I see a typo in ccom_mycomponent, but my code might have other cut and paste issues :D

Please Log in or Create an account to join the conversation.

pre fill form 23 Nov 2017 13:13 #15447

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
I had already modified the typo and I made the corrections on the code you gave me.
always error 500...
I will continue to search. you already gave me a hint

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 23 Nov 2017 18:41 #15448

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
Hello Romkabouter.
I'm trying to understand your code. but I don't understand how the controller can save the update on the database without something like :
$query->update($db->quoteName('#__litsupp_demandes'))->set($fields)->where(event_id)

for the moment I copied the code into the controller <fork / controllers / demande.php> but it does not seem to work.
The code I did on my page works fine but I do not know or send the result to edit the record:
eventDrop: function(event, delta, revertFunc, resource) {
			start = event.start.format("Y-MM-D HH:mm:ss");
			end = event.end.format("Y-MM-D HH:mm:ss");
			resource = event.resourceId;
			jQuery.ajax({
                type: "POST",
                url: "<?php echo JUri::base(); ?>index.php?option=com_litsupp&task=component.save",
                data: '<?php echo JSession::getFormToken()?>=1&start='+ start +'&end='+ end +'&resource='+ resource +'&id='+ event.id,
                cache: false,
                success: function(data){
                     //reload the page after update event on database
                    //alert("that's ok");
		},

why can not we use the component.save that already exists in the component for forms?

thx

Please Log in or Create an account to join the conversation.

pre fill form 23 Nov 2017 20:35 #15449

Better to save data via the model
In your call, you give id as param, you can use that to save the model
public function update($key = null, $urlVar = null)
{
    JSession::checkToken() or JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN'));
    $jinput = JFactory::getApplication()->input;
    $id = $jinput->get('id','','int');
    $resource = $jinput->get('resource','','int');
    $r = false;
    if ($id > 0) {
        $r = $model->save(array(
            'id' => $id,
            'resource' => $resource
        ));
        $r = true;
    }			
    $result->status = $r;
    $result->row = $id;
    echo json_encode($result);
    exit;		
}
You can use $model, because you are in the controller, it will be available there.
You have to put the info you need returned in $result, in my example $result->row will be your id which you have given as a parameter.

Then, in your ajax call (using your snippet)
eventDrop: function(event, delta, revertFunc, resource) {
			start = event.start.format("Y-MM-D HH:mm:ss");
			end = event.end.format("Y-MM-D HH:mm:ss");
			resource = event.resourceId;
			jQuery.ajax({
                type: "POST",
                url: "<?php echo JUri::base(); ?>index.php?option=com_litsupp&task=component.save",
                data: '<?php echo JSession::getFormToken()?>=1&start='+ start +'&end='+ end +'&resource='+ resource +'&id='+ event.id,
                cache: false,
                success: function(data){
                     //reload the page after update event on database
                    //alert("that's ok");
                    result = jQuery.parseJSON(data);
                    console.log(r);
		},

Console.log will log the result, should also have a property row, holding the ID
Please update what console.log outputs :)
After that, you can use the info to update elements on your page via Jquery

Why a different controller task?
Because you need a raw json output accomplished by "exit", which stops processing the rest of the controller and thus just echoing the json data.
The save function cannot be modified, because then you can not save the data via the form anymore (because of the exit)

Please Log in or Create an account to join the conversation.

pre fill form 24 Nov 2017 01:05 #15452

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
I do not understand ...
I'm really not good, sorry.

The log returns "null" and nothing is registered in the database.

Here is what I did

In my controller : <fork / controllers / demande.php>
public function update($key = null, $urlVar = null)
	{
		JSession::checkToken() or JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN'));
		$jinput = JFactory::getApplication()->input;
		$id = $jinput->get('id','','int');
		$start = $jinput->get('start','','string');
		$end = $jinput->get('end','','string');
		$resource = $jinput->get('resource','','int');
		$r = false;
		if ($id > 0) {
			$r = $model->save(array(
				'id' => $id,
				'start' => $start,
				'end' => $end,
				'resource' => $resource
			));
			$r = true;
		}			
		$result->status = $r;
		$result->row = $id;
		echo json_encode($result);
		exit;		
	}

and in my view : <fork/views/demandes/tmpl/default.php> :
eventDrop: function(event, delta, revertFunc, resource) {
			start = event.start.format("Y-MM-D HH:mm:ss");
			end = event.end.format("Y-MM-D HH:mm:ss");
			resource = event.resourceId;
			jQuery.ajax({
                type: "POST",
                url: "<?php echo JUri::base(); ?>index.php?option=com_litsupp&task=demande.update",
                data: '<?php echo JSession::getFormToken()?>=1&start='+ start +'&end='+ end +'&resource='+ resource +'&id='+ event.id,
                cache: false,
				success: function(data){
                    result = jQuery.parseJSON(data);
                    console.log(result);
				} 
			});
		}

i keep looking about that ...

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 24 Nov 2017 06:59 #15453

Well, no 500 error so that is good news.
I see some problems, first change
$id = $jinput->get('id','','int');
to
$id = $jinput->get('id',0,'int');
My mistake.

Then, try console.log (data), that is the raw data. The return might actually return an error or something.
jsonParse will not work then.

If you still have problems, break it further down by removing all code except the result.
Something like
public function update($key = null, $urlVar = null)
	{
		$r = false;
		$result->status = $r;
		echo json_encode($result);
		exit;		
	}

Please Log in or Create an account to join the conversation.

pre fill form 24 Nov 2017 16:03 #15454

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12

Romkabouter wrote: Well, no 500 error so that is good news.

yes my mistake is that i forget to call the "controller.update" like "demande.update" .... :P

Romkabouter wrote: I see some problems, first change
$id = $jinput->get('id','','int');
to
$id = $jinput->get('id',0,'int');
My mistake.

i modified that but Is there a difference ?

Romkabouter wrote: Then, try console.log (data), that is the raw data. The return might actually return an error or something.
jsonParse will not work then.

console.log(data) return nothing. there is no message 'null' in the console

Romkabouter wrote: If you still have problems, break it further down by removing all code except the result.
Something like

public function update($key = null, $urlVar = null)
	{
		$r = false;
		$result->status = $r;
		echo json_encode($result);
		exit;		
	}


It's the same probleme, nothing appens in the console.log and there is no error. i tried with an alert instead but there is nothing in my alert ....

should my event register at the same time normally? cause that's don't work too :dry:

Please Log in or Create an account to join the conversation.

Last edit: by Nicolas.

pre fill form 24 Nov 2017 18:47 #15455

I do not know the rest of your code, but you might want to try just the ajax call in the domready event.
Or do a console.log('test'); before start = event.start.format("Y-MM-D HH:mm:ss"); to see if your code is even called.
Got any script errors maybe?

Please Log in or Create an account to join the conversation.

pre fill form 25 Nov 2017 00:51 #15456

  • Nicolas
  • Nicolas's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
  • Posts: 83
  • Thank you received: 12
eventDrop: function(event, delta, revertFunc, resource) {
			start = event.start.format("Y-MM-D HH:mm:ss"); //return start date of droped event (verified)
			end = event.end.format("Y-MM-D HH:mm:ss");  //return end date of droped event (verified)
			resourceId = event.resourceId;  //return row id on calendar of droped event (verified)
			jQuery.ajax({
                type: "POST",
                url: "<?php echo JUri::base(); ?>index.php?option=com_litsupp&task=demande.update", //link to the task that we created in the controller
                data: '<?php echo JSession::getFormToken()?>=1&start='+ start +'&end='+ end +'&resourceId='+ resourceId +'&id='+ event.id, 
                cache: false, //don't know why ....
				dataType: "json",
				success: function(data){
                   alert(data); //return nothing ......			
				} 

after many tests, my code above don't return the data .... and i don't know why ....

the function is triggered when I move an event on the calendar.
I would like the new start date and the new end date to be changed on the database ...
my variables 'start', 'end', 'resourceId' exist and are verified.
but I cant even return them on my ajax data....

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
  • 2
Time to create page: 0.089 seconds

Really great Joomla tool Cook is a great piece of kit for creating Joomla components. It uses a drag-n-drop interface to build tables and fully featured pages. You can test your component in a sandbox before downloading it packaged up ready to install. The developer is responsive on the support forum.
Twev (JED)
          

Get Started