<?php
//ini_set("display_errors", "1");
//ini_set("error_reporting", "E_ALL");
/*
I'm going to call this version AdvATE, for Advanced Ajax Table Edit.
Many things are the same, however some are different. In your php file
that hanldes the showing of the data, you only need the bottom part of this
example. The major difference here is that the data is not merely a
value in the array, but is part of another sub array...so your data
should look like this:
$data = array(
[rowid] => array(
[firstcol] = array(
[data] => "the data to be displayed"
[input] => the name of the input to return from ajax
)
[secondcol] = array(
[data] => "the data to be displayed"
[input] => the name of the input to return from ajax
)
etc...
I highly recommend inspecting the example data array to see how it works.
The second part of the script, which can be either the same script as in the example,
or a seperate page, is the Form Input Requests and the code to update the data
when it is sent from the page.
If you notice in the example, there is an if statement that controls everything.
When the user clicks on a cell to update it, a request is sent to the server, that
request contains two things: the name of the input to retrieve, and the value
"FormRequest" set to true. When the "Save" button is pressed, it sends four
things: the new value, the colid, the rowid, and the var "FormSave" with a value of
true. Those variables, FormRequest and FormSave, are used to determine what to
do by your php script. I extract the $_POST because I think it's easier, but
you don't have to.
The next step is to configure the inputs to be returned for your cells. These
are created by you, so you can name them what ever you want. I named them by
column. The function SetForm takes three inputs:
SetForm('str name of the input to reference it by', 'str type', 'arr values');
The name and type are required, the values is not unless it is a radio, select, or check.
Valid types are:
radio presents the user with a set of radio buttons
text gives a text box
area gives a text area
check gives a set of checkboxs
select gives a select box
bypass if a cell is set to bypass, then it is not editable
The values array contains the values for radio, check, and select types. It is in
key => value form...so if you pass 'key' => 'value' to a radio button input type
the html will be: <input type="radio" name="new" value="key"> value
The last part of the script that you must write is how to handle the data.
When save is pressed, it will always send four variables in the post:
rowid
colid
new
FormSave
rowid and colid are the identifiers for which cell was selected. new is the value
that the user selected/entered. This is slightly different from before...with all of
the input types but check, it will be the value of what the user input/selected. If it
is a check input, $_POST['new'] will be an array consisting of the values of the
inputs that were checked...I recommend doing a print_r on post if this is confusing.
Another big difference is that you must return some sort of value to the ajax script
after processing the user submitted data. The value that you return will be displayed
in the cell of the table that was selected. Even if you just do "echo $_POST['new']"
after the data processing, then it will display that value in the cell. This allows
you greater flexibilty over showing the updated cells.
*/
include("./AdvATE.class.php");
$at = new TableEditor;
extract($_POST);
/*
This section can be it's own seperate page, just change the SetSubmit value
to the proper page. Your visitors do not have to visit this page, only
the ajax needs to know it's name.
*/
if ($FormRequest) {
/*
If it is a form request being sent, there are three things that are posted:
type: the name of the form input...the first input in SetForm
if you have not set that input type with SetForm, it will return nothing
presenting the user with only a "Save" and "Cancel" button.
FormRequest: This will always be set to "true" if it is a form request
*/
$at->SetForm('col0input','radio',array('four' => '4', 'five' => '5', 'six' => '6'));
$at->SetForm('col1input','text');
$at->SetForm('col2input','area');
$at->SetForm('col3input','check',array('one' => '1', 'two' => '2', 'three' => '3'));
echo $at->HandleFormRequest($_POST['type']);
} else if ($FormSave) {
/*
If it is a save request being sent, there are four things that are posted:
rowid: the row id for the edited cell
colid: the column name for the edited cell
new: the new value for the cell. Remember, if the input type
was checkbox this will be an array of the checked values.
SaveForm: This will always be set to "true" if it is a save request
*/
//print_r($_POST);
extract($_POST);
$data = file_get_contents("./Atest.txt");
$data = unserialize($data);
if ($colid == "col3") {
$update = "You checked ";
foreach ($new as $value) {
$update .= "$value ";
}
} else {
$update = $new;
}
$data[$rowid][$colid]['data'] = $update;
//if this were a database, you could use the following SQL statement:
//UPDATE $tablename SET `$colid` = '$new' WHERE id = '$rowid'
//you should do some verification on the data input by the user.
$open = fopen("./Atest.txt", 'w');
fwrite($open, serialize($data));
fclose($open);
echo $update;
} else {
/*
This is the part of the script that displays your data. The name
of this page is the name of the page your visitors will see.
The data should be a multidimensional array that consists of the data for the table.
It should be in the following format:
In the primary array, each element should have a key eqaul to the row id and the value is
a sub array that contains column data.
The column data subarray should have key values that are the column values from the db
and the values are subarrays that consist of two values:
data: the data to be displayed
input: the name of the input to be presented to the user
See above for more information.
An example would be:
[1] => array(
[Name] => array(
[data] => 'Some Guy'
[input] => 'col1input'
)
[Address] => array(
[data] => '123 Some Street'
[input] => 'col2input'
)
[Phone] => array(
[data] => '123-123-1234'
[input] => 'col3input'
)
)
etc.
*/
//the display properties for the odd and even rows
$odd = array('style' => 'background-color: #CCCCCC;');
$even = array('style' => 'background-color: #EEEEEE;');
//the display properties for the overall table
$table = array('align' => 'center', 'cellpadding' => '3', 'cellspacing' => '0', 'width' => '50%');
//table column header information
$headers = array("Col 0", "Col 1", "Col 2", "Col 3");
$headerattrib = array('style' => 'background-color: skyblue');
$at->SetEvenRowAttribs($even);
$at->SetOddRowAttribs($odd);
$at->SetTableAttribs($table);
$at->SetHeaderAttribs($headerattrib);
$at->SetHeaders($headers);
$at->SetSubmit("AdvATEexample.php");
//checks for the example data, or creates it if not found
if (file_exists("./Atest.txt")) {
$data = file_get_contents("./Atest.txt");
$data = unserialize($data);
} else {
for ($a = 0; $a < 5; $a++) {
for ($b = 0; $b < 4; $b++) {
if ($b == 0) {
$input = 'col0input';
} else if ($b == 1) {
$input = 'col1input';
} else if ($b == 2) {
$input = 'bypass';
} else if ($b == 3) {
$input = 'col3input';
}
$data[$a]["col" . $b] = array('data' => "Row $a column $b", 'input' => $input);
}
}
$open = fopen("Atest.txt", 'w');
fwrite($open, serialize($data));
fclose($open);
}
$at->SetData($data);
echo $at->GenerateTable();
//echo "<pre>";
//print_r($data);
}
?>
|