Hello guys.
I have a products.post.php controller and in this file I have a mode called "print".
I want to create a form and show a button that takes the data my customer types into the fields and then print them into a pdf for example.
I have created the form, I can show the button but my dispatch returns a 404 page.
Here what I have:
Yes
No
Class 1
<option value="class-2"Class 2
Class 3
{include file="buttons/button.tpl" but_text=__("button1") but_name="dispatch[products.print]" but_role="select" but_meta="ty-btn__primary"}
{include file="buttons/button.tpl" but_text=__("button2") but_href="products.print?product_id=`$product.product_id`" but_role="select" but_meta="cm-new-window ty-btn__secondary"}
Button1, redirects to a 404 page.
Button2, works ok but it does not take on account the form data.
How can I pass the data from the selections I have plus use the method named "print" that exists in products.post.php?
It's kinda messed up I think, if you want more explanations please ask me.
Thanks in advance.
First solution should work. Try to add the following code to the beginning of the controller
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($mode == 'print') {
fn_print_die($_REQUEST);
}
}
I would suggest you do this in the my_changes addon (or create a separate addon). Steps would be:
Create/update the addon (using my_changes as the example) to have a controllers/my_changes.php file with something like:
switch($mode) {
case 'print':
if( $_SERVER['REQUEST_METHOD'] == 'POST') {
$my_options = $_REQUEST;
// process your form data here from $my_options
fn_set_notification('N', __("notice"), "Your message here for processed data");
$url = "your redirect URL";
fn_redirect(fn_url($url));
}
// A GET request would come here and ultimately load the the views/print.tpl file
return array(CONTROLLER_STATUS_OK);
}
Then you need to put your form in design/themes/[YOUR THEME]/templates/addons/my_changes/views/my_changes/print.tpl.
If you want the form somewhere else (like embedded in some other page) then just never call my_changes.print via a GET request and only reference it from your form as a POST request.