How to dynamically replace placeholders on an Html table PHP and javascript
one text
I developed an invoice template designer as part of a project which can be used to design invoice templates. Once the invoice template is created its html is saved to the database ready to be used.
Now a user can create an invoice using the template but that is where my problem comes in. My invoice template is created with place holders and its a table. please check screenshot
How can I replace the table cell values since it was created dynamically and there is no way I can access the table cells with a PHP loop. I really need ideas with possibly an example. This is my code:
if (!empty($_GET['invoice_id']) && $_GET['invoice_id']) {
$invoice_id = $_GET['invoice_id'];
$invoiceValues = getInvoice($invoice_id);
$invoiceItems = getInvoiceItems($invoice_id);
}
$invoiceDate = date("d/M/Y, H:i:s", strtotime($invoiceValues['order_date']));
$template_name = getinvoicetemplatename();
$template = get_template($template_name[0]);
//replace template var with value
$token = array(
'[Business_Name]' => 'http://www.codexworld.com',
'[Business_Address_1]' => 'CodexWorld',
'[City]' => $userName,
'[State]'=> $userEmail,
'[Postal_Code]' => 'http://www.codexworld.com',
'[Business_Phone_Number]' => 'CodexWorld',
'[Business_Email_Address]' => $userName,
'[Client_Name]'=> $userEmail,
'[Client_Address_line_1]' => 'http://www.codexworld.com',
'[Invoice_Number]' => 'CodexWorld',
'[Date]' => $invoiceDate
);
foreach ($token as $key => $value){
$output = str_replace($key, $value, $template[0]);
}
$i = 0;
foreach ($invoiceItems as $invoiceItem) {
$i++;
$output = str_replace("[course_no_{$i}]", $invoiceItem["item_code"], $output);
$output = str_replace("[product_{$i}]", $invoiceItem["item_name"], $output);
$output = str_replace("[delegates_no_{$i}]", $invoiceItem["order_item_quantity"], $output);
$output = str_replace("[price_{$i}]", $invoiceItem["order_item_price"], $output);
$output = str_replace("[total_{$i}]", $invoiceItem["order_item_final_amount"], $output);
}
template html string
<div id="items-list">
<table id="table-invoice" class="table table-bordered table-condensed items-table" width="100%">
<thead>
<tr id="table_invoice_header">
<th id="table_invoice_header1">Course No</th>
<th id="table_invoice_header2">Course Name</th>
<th id="table_invoice_header3">No of Delegates</th>
<th id="table_invoice_header4" width="100">Price</th>
<th id="table_invoice_header5" width="100">Total</th>
</tr>
</thead>
<tbody>
<tr>
<td class="total-rown">[course_no_0] </td>
<td class="total-rown">[product_0] </td>
<td class="total-rown">[delegates_no_0] </td>
<td class="total-rown">[price_0] [curr]</td>
<td class="total-rown">[total_0] [curr]</td>
</tr>
<tr>
<td class="total-rown">[course_no_1] </td>
<td class="total-rown">[product_1] </td>
<td class="total-rown">[delegates_no_1] </td>
<td class="total-rown">[price_1] [curr]</td>
<td class="total-rown">[total_1] [curr]</td>
</tr>
<tr>
<td class="total-rown">[course_no_2] </td>
<td class="total-rown">[product_2] </td>
<td class="total-rown">[delegates_no_2] </td>
<td class="total-rown">[price_2] [curr]</td>
<td class="total-rown">[total_2] [curr]</td>
</tr>
<tr>
<td class="total-rown">[course_no_3] </td>
<td class="total-rown">[product_3] </td>
<td class="total-rown">[delegates_no_3] </td>
<td class="total-rown">[price_3] [curr]</td>
<td class="total-rown">[total_3] [curr]</td>
</tr>
<tr>
<td class="total-rown">[course_no_4] </td>
<td class="total-rown">[product_4] </td>
<td class="total-rown">[delegates_no_4] </td>
<td class="total-rown">[price_4] [curr]</td>
<td class="total-rown">[total_4] [curr]</td>
</tr>
</tbody>
<tfoot>
<tr class="totals-row">
<td colspan="3" class="wide-cell"></td>
<td id="tableheader"><strong>Sub Total</strong></td>
<td class="total-rown sub-total" coslpan="2">[sub_total] [curr]</td>
</tr>
<tr class="totals-row">
<td colspan="3" class="wide-cell"></td>
<td class="total-rown" id="tableheader">Tax Rate</td>
<td class="total-rown tax-rate" coslpan="2">[tax_rate] %</td>
</tr>
<tr class="totals-row">
<td colspan="3" class="wide-cell"></td>
<td class="total-rown">Tax Amount</td>
<td class="total-rown tax-amount" coslpan="2">[tax_amount] [curr]</td>
</tr>
<tr class="totals-row">
<td colspan="3" class="wide-cell"></td>
<td id="tableheader1"><strong>Total</strong></td>
<td class="total-rown invoice-total" coslpan="2">[total] [curr]</td>
</tr>
</tfoot>
</table>
</div>
Source