-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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 ??
|
Last Edit: 12 Dec 2017 10:28 by Nicolas.
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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
|
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
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");
|
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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
|
Last Edit: 22 Nov 2017 16:28 by Nicolas.
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
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
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
Thanks for this answer.
For the moment i have an error 500 with your code ... i'll try To resolve it tomorow
|
Last Edit: 23 Nov 2017 02:00 by Nicolas.
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
Well, I see a typo in ccom_mycomponent, but my code might have other cut and paste issues
|
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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
|
Last Edit: 23 Nov 2017 15:19 by Nicolas.
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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
|
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
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)
|
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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 ...
|
Last Edit: 24 Nov 2017 18:23 by Nicolas.
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
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;
}
|
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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" ....
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
|
Last Edit: 24 Nov 2017 16:07 by Nicolas.
|
-
Romkabouter
-
-
Offline
-
Elite Member
-
- Posts: 310
- Thank you received: 131
-
Karma: 48
-
|
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?
|
|
-
Nicolas
-
-
Offline
-
Premium Member
-
- Posts: 83
- Thank you received: 12
-
Karma: 6
-
|
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....
|
|
|