test_arrays.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <?php
  2. //define("NOLOGIN",1); // This means this output page does not require to be logged.
  3. //if (!defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1');
  4. //if (!defined('NOREQUIREDB')) define('NOREQUIREDB', '1');
  5. if (!defined('NOREQUIRESOC')) {
  6. define('NOREQUIRESOC', '1');
  7. }
  8. //if (!defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1');
  9. if (!defined('NOSTYLECHECK')) {
  10. define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data
  11. }
  12. if (!defined('NOCSRFCHECK')) {
  13. define('NOCSRFCHECK', '1'); // Do not check anti CSRF attack test
  14. }
  15. if (!defined('NOTOKENRENEWAL')) {
  16. define('NOTOKENRENEWAL', '1'); // Do not check anti POST attack test
  17. }
  18. //if (!defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu
  19. //if (!defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php
  20. //if (!defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library
  21. if (!defined("NOLOGIN")) {
  22. define("NOLOGIN", '1'); // If this page is public (can be called outside logged session)
  23. }
  24. require '../../main.inc.php';
  25. // Security
  26. if ($dolibarr_main_prod) {
  27. accessforbidden('Access forbidden when $dolibarr_main_prod is set to 1');
  28. }
  29. /*
  30. * View
  31. */
  32. $form = new Form($db);
  33. $usedolheader = 1; // 1 = Test inside a dolibarr page, 0 = Use hard coded header
  34. // HEADER
  35. //--------
  36. if (empty($usedolheader)) {
  37. header("Content-type: text/html; charset=UTF8");
  38. // Security options
  39. header("X-Content-Type-Options: nosniff"); // With the nosniff option, if the server says the content is text/html, the browser will render it as text/html (note that most browsers now force this option to on)
  40. header("X-Frame-Options: SAMEORIGIN"); // Frames allowed only if on same domain (stop some XSS attacks)
  41. ?>
  42. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  43. <html>
  44. <head>
  45. <meta name="robots" content="noindex,nofollow" />
  46. <meta name="author" content="Dolibarr Development Team">
  47. <title>Test page</title>
  48. <!-- Includes for JQuery (Ajax library) -->
  49. <link rel="stylesheet" type="text/css" href="<?php echo DOL_URL_ROOT ?>/includes/jquery/css/base/jquery-ui.css" />
  50. <!-- <link rel="stylesheet" type="text/css" href="<?php echo DOL_URL_ROOT ?>/includes/jquery/plugins/datatables/media/css/jquery.dataTables.css" /> -->
  51. <link rel="stylesheet" type="text/css" title="default" href="<?php echo DOL_URL_ROOT ?>/theme/eldy/style.css.php<?php echo ($_GET["dol_use_jmobile"] == 1) ? '?dol_use_jmobile=1&dol_optimize_smallscreen=1' : ''; ?>" />
  52. <!-- Includes JS for JQuery -->
  53. <script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/js/jquery.min.js"></script>
  54. <!-- migration fixes for removed Jquery functions -->
  55. <script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/js/jquery-migrate.min.js"></script>
  56. <script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/plugins/tablednd/jquery.tablednd.0.6.min.js"></script>
  57. <!-- <script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/plugins/datatables/media/js/jquery.dataTables.js"></script> -->
  58. <script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/plugins/select2/select2.min.js?version=4.0.0-beta"></script>
  59. </head>
  60. <body style="padding: 10px;">
  61. <?php
  62. } else {
  63. $arraycss = array();
  64. $arrayjs = array();
  65. /*
  66. $arraycss=array('/includes/jquery/plugins/datatables/media/css/jquery.dataTables.css',
  67. '/includes/jquery/plugins/datatables/extensions/Buttons/css/buttons.dataTables.min.css',
  68. '/includes/jquery/plugins/datatables/extensions/ColReorder/css/colReorder.dataTables.min.css'
  69. );
  70. $arrayjs=array('/includes/jquery/plugins/datatables/media/js/jquery.dataTables.js',
  71. '/includes/jquery/plugins/datatables/extensions/Buttons/js/dataTables.buttons.js',
  72. '/includes/jquery/plugins/datatables/extensions/Buttons/js/buttons.colVis.min.js',
  73. '/includes/jquery/plugins/datatables/extensions/Buttons/js/buttons.html5.min.js',
  74. '/includes/jquery/plugins/datatables/extensions/Buttons/js/buttons.flash.min.js',
  75. '/includes/jquery/plugins/datatables/extensions/Buttons/js/buttons.print.min.js',
  76. '/includes/jquery/plugins/datatables/extensions/ColReorder/js/dataTables.colReorder.min.js',
  77. '/includes/jszip/jszip.min.js',
  78. '/includes/pdfmake/pdfmake.min.js',
  79. '/includes/pdfmake/vfs_fonts.js'
  80. );
  81. */
  82. llxHeader('', '', '', '', 0, 0, $arrayjs, $arraycss);
  83. }
  84. // CONTENT
  85. //---------
  86. ?>
  87. <h2>
  88. This page is a sample of page using tables. It is designed to make test with<br>
  89. </h2>
  90. <div class="wordbreak">
  91. - css (add parameter &amp;theme=newtheme to test another theme or edit css of current theme)<br>
  92. - jmobile (add parameter <a href="<?php echo $_SERVER["PHP_SELF"].'?dol_use_jmobile=1&dol_optimize_smallscreen=1'; ?>">dol_use_jmobile=1&amp;dol_optimize_smallscreen=1</a> and switch to small screen < 570 to enable with emulated jmobile)<br>
  93. - no javascript / usage for bind people (add parameter <a href="<?php echo $_SERVER["PHP_SELF"].'?nojs=1'; ?>">nojs=1</a> to force disable javascript)<br>
  94. - tablednd<br>
  95. </div>
  96. <br><hr><br>Example 0a : Table with div+div+div containg a select that should be overflowed and truncated => Use this to align text or form<br>
  97. <div class="tagtable centpercent">
  98. <div class="tagtr">
  99. <div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  100. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  101. </div>
  102. <div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  103. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  104. </div>
  105. </div>
  106. </div>
  107. <br><hr><br>Example 0b: Table with div+form+div containg a select that should be overflowed and truncated => Use this to align text or form<br>
  108. <div class="tagtable centpercent">
  109. <form action="xxx" method="POST" class="tagtr">
  110. <div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  111. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  112. </div>
  113. <div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  114. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  115. </div>
  116. </form>
  117. </div>
  118. <br><hr><br>Example 0c: Table with table+tr+td containg a select that should be overflowed and truncated => Use this to align text or form<br>
  119. <table class="centpercent">
  120. <tr>
  121. <td class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  122. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  123. </td>
  124. <td class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;"> <!-- If you remove max-width, the jmobile overflow does not work -->
  125. <select name="hidedetails" class="centpercentonsmartphone"><option>aaaaaaaaaaaaaaafd sf sf gfd gfds fsd gfd fhfg hf dhfg hg fhfgdhfgdh gh gfdhdgf h gfdh dfhg dfgh dfgh fdgh gfd hfd hfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select>
  126. </td>
  127. </tr>
  128. </table>
  129. <br><hr><br>Example 1 : Standard table/thead/tbody/tr/th-td (no class pair/impair on td) => Use this if you need the drag and drop for lines or for long result tables<br>
  130. <script type="text/javascript">
  131. /*jQuery(document).ready(function() {
  132. $(document).ready(function() {
  133. var table = $('#tablelines3').DataTable( {
  134. scrollY: "300px",
  135. scrollX: true,
  136. scrollCollapse: true,
  137. paging: false,
  138. fixedColumns: {
  139. leftColumns: 1,
  140. rightColumns: 1
  141. }
  142. } );
  143. } );
  144. });*/
  145. </script>
  146. <?php
  147. include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
  148. $productspecimen = new Product($db);
  149. $productspecimen->initAsSpecimen();
  150. $object = $productspecimen;
  151. $sortfield = 'aaa';
  152. $sortorder = 'ASC';
  153. $tasksarray = array(1, 2, 3); // To force having several lines
  154. $tagidfortablednd = 'tablelines3';
  155. if (!empty($conf->use_javascript_ajax)) {
  156. include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
  157. }
  158. $nav = '';
  159. $nav .= '<form name="dateselect" action="'.$_SERVER["PHP_SELF"].'?mode=show_peruser'.$param.'">';
  160. if ($actioncode || GETPOSTISSET('actioncode')) {
  161. $nav .= '<input type="hidden" name="actioncode" value="'.$actioncode.'">';
  162. }
  163. if ($status || GETPOSTISSET('status')) {
  164. $nav .= '<input type="hidden" name="status" value="'.$status.'">';
  165. }
  166. if ($filter) {
  167. $nav .= '<input type="hidden" name="filter" value="'.$filter.'">';
  168. }
  169. if ($filtert) {
  170. $nav .= '<input type="hidden" name="filtert" value="'.$filtert.'">';
  171. }
  172. if ($socid) {
  173. $nav .= '<input type="hidden" name="socid" value="'.$socid.'">';
  174. }
  175. if ($showbirthday) {
  176. $nav .= '<input type="hidden" name="showbirthday" value="1">';
  177. }
  178. if ($pid) {
  179. $nav .= '<input type="hidden" name="projectid" value="'.$pid.'">';
  180. }
  181. if ($type) {
  182. $nav .= '<input type="hidden" name="type" value="'.$type.'">';
  183. }
  184. if ($usergroup) {
  185. $nav .= '<input type="hidden" name="usergroup" value="'.$usergroup.'">';
  186. }
  187. $nav .= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0);
  188. $nav .= ' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
  189. $nav .= '</form>';
  190. $limit = 10;
  191. print_barre_liste('Title of my list', 12, $_SERVER["PHP_SELF"], '', '', '', 'Text in middle', 20, 500, '', 0, $nav, '', $limit, 0, 0, 1);
  192. $moreforfilter .= '<div class="divsearchfield">';
  193. $moreforfilter .= $langs->trans('This is a select list for a filter A (no combo forced)').': ';
  194. $cate_arbo = array('field1'=>'value1a into the select list A', 'field2'=>'value2a');
  195. $moreforfilter .= $form->selectarray('search_aaa', $cate_arbo, '', 1, 0, 0, '', 0, 0, 0, '', 'maxwidth300', 0); // List with no js combo
  196. $moreforfilter .= '</div>';
  197. $moreforfilter .= '<div class="divsearchfield">';
  198. $moreforfilter .= $langs->trans('This is a select list for a filter B (auto combo)').': ';
  199. $cate_arbo = array('field1'=>'value1b into the select list B', 'field2'=>'value2b');
  200. $moreforfilter .= $form->selectarray('search_bbb', $cate_arbo, '', 1, 0, 0, '', 0, 0, 0, '', 'maxwidth300', -1); // List with js combo auto
  201. $moreforfilter .= '</div>';
  202. $moreforfilter .= '<div class="divsearchfield">';
  203. $moreforfilter .= $langs->trans('This is a select list for a filter C (combo forced)').': ';
  204. $cate_arbo = array('field1'=>'value1c into the select list C', 'field2'=>'value2c');
  205. $moreforfilter .= $form->selectarray('search_ccc', $cate_arbo, '', 1, 0, 0, '', 0, 0, 0, '', 'maxwidth300', 1); // List with js combo forced
  206. $moreforfilter .= '</div>';
  207. $moreforfilter .= '<div class="divsearchfield">';
  208. $moreforfilter .= $langs->trans('This is a select list for a filter D (combo forced)').': ';
  209. $cate_arbo = array('field1'=>'value1d into the select list D', 'field2'=>'value2d');
  210. $moreforfilter .= $form->selectarray('search_ddd', $cate_arbo, '', 1, 0, 0, '', 0, 0, 0, '', 'maxwidth300', 1); // List with js combo forced
  211. $moreforfilter .= '</div>';
  212. if (!empty($moreforfilter)) {
  213. print '<div class="liste_titre liste_titre_bydiv centpercent">';
  214. print $moreforfilter;
  215. $parameters = array();
  216. $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook
  217. print $hookmanager->resPrint;
  218. print '</div>';
  219. }
  220. ?>
  221. <table class="stripe row-border order-column centpercent tagtable liste<?php echo $moreforfilter ? " listwithfilterbefore" : ""; ?>" id="tablelines3">
  222. <thead>
  223. <tr class="liste_titre">
  224. <?php print getTitleFieldOfList($langs->trans('title1'), 0, $_SERVER["PHP_SELF"], 'aaa', '', '', 'align="left"', $sortfield, $sortorder); ?>
  225. <?php print getTitleFieldOfList($langs->trans('title2'), 0, $_SERVER["PHP_SELF"], 'bbb', '', '', 'align="center"', $sortfield, $sortorder); ?>
  226. <?php print getTitleFieldOfList($langs->trans('title3'), 0, $_SERVER["PHP_SELF"], 'ccc', '', '', 'align="right"', $sortfield, $sortorder); ?>
  227. </tr>
  228. </thead>
  229. <tbody>
  230. <tr class="pair"><td><?php echo $productspecimen->getNomUrl(1); ?></td><td class="center">b1</td><td class="tdlineupdown right">c1</td></tr>
  231. <tr class="impair nowrap"><td>a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2 a2</td><td align="center">b2</td><td class="tdlineupdown right">c2</td></tr>
  232. <tr class="pair"><td>a3</td><td class="center">b3</td><td class="tdlineupdown right">c3</td></tr>
  233. </tbody>
  234. </table>
  235. <br>
  236. <!--
  237. <br><hr><br>Example 1b : Table using tags: table/thead/tbody/tr/th-td + dataTable => Use this for short result tables<br>
  238. <script type="text/javascript">
  239. $(document).ready(function(){
  240. $('#idtableexample2').dataTable( {
  241. <?php
  242. if ($optioncss == 'print') {
  243. print '\'dom\': \'lfrtip\',';
  244. } else {
  245. print '\'dom\': \'Blfrtip\',';
  246. }
  247. ?>
  248. "colReorder": true,
  249. 'buttons': [
  250. 'colvis','copy', 'csv', 'excel', 'pdf', 'print'
  251. ],
  252. "sPaginationType": "full_numbers",
  253. "lengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "<?php echo $langs->trans('All'); ?>"]],
  254. "oLanguage": {
  255. "sLengthMenu": "<?php echo $langs->trans('Show'); ?> _MENU_ <?php echo $langs->trans('Entries'); ?>",
  256. "sSearch": "<?php echo $langs->trans('Search'); ?>:",
  257. "sZeroRecords": "<?php echo $langs->trans('NoRecordsToDisplay'); ?>",
  258. "sInfoEmpty": "<?php echo $langs->trans('NoEntriesToShow'); ?>",
  259. "sInfoFiltered": "(<?php echo $langs->trans('FilteredFrom'); ?> _MAX_ <?php echo $langs->trans('TotalEntries'); ?>)",
  260. "sInfo": "<?php echo $langs->trans('Showing'); ?> _START_ <?php echo $langs->trans('To'); ?> _END_ <?php echo $langs->trans('WTOf'); ?> _TOTAL_ <?php echo $langs->trans('Entries'); ?>",
  261. "oPaginate": {
  262. "sFirst": "<?php echo $langs->transnoentities('First'); ?>",
  263. "sLast": "<?php echo $langs->transnoentities('Last'); ?>",
  264. "sPrevious": "<?php echo $langs->transnoentities('Previous'); ?>",
  265. "sNext": "<?php echo $langs->transnoentities('Next'); ?>"
  266. }
  267. },
  268. "aaSorting": [[0,'desc']],
  269. /* To use in ajax mode
  270. "bProcessing": true,
  271. "stateSave": true,
  272. "bServerSide": true,
  273. "sAjaxSource": "../ajax.php",
  274. "aoColumnDefs": [
  275. { "bSortable": false, "aTargets": [ 2,3,4 ] }
  276. ],
  277. */
  278. })
  279. });
  280. </script>
  281. -->
  282. <br><hr><br>Example 2 : Table using tags: div.tagtable+(div|form).tagtr+div[.tagtd] => Use this for tables that need to have a different form for each line, but AVOID IT if possible (drag and drop of lines does not work for this case, also height of title can't be forced to a minimum)<br><br>
  283. <?php
  284. $tasksarray = array(1, 2, 3); // To force having several lines
  285. $tagidfortablednd = 'tablelines';
  286. if (!empty($conf->use_javascript_ajax)) {
  287. include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
  288. }
  289. ?>
  290. <div class="tagtable centpercent liste_titre_bydiv" id="tablelines">
  291. <div class="tagtr liste_titre">
  292. <div class="tagtd">Title A<input type="hidden" name="cartitem" value="3"></div>
  293. <div class="tagtd">title B</div>
  294. <div class="tagtd">title C</div>
  295. <div class="tagtd">title D</div>
  296. </div>
  297. <div class="pair tagtr">
  298. <div class="tagtd">line4<input type="hidden" name="cartitem" value="3"></div>
  299. <div class="tagtd">dfsdf</div>
  300. <div class="tagtd"><input name="count" value="4" class="maxwidth50"></div>
  301. <div class="tagtd tdlineupdown">bbbb</div>
  302. </div>
  303. <div class="impair tagtr">
  304. <div class="tagtd">line5<input type="hidden" name="cartitemb" value="3"></div>
  305. <div class="tagtd">dfsdf</div>
  306. <div class="tagtd"><input name="countb" value="4" class="maxwidth50"></div>
  307. <div class="tagtd tdlineupdown">bbbb</div>
  308. </div>
  309. <div class="pair tagtr">
  310. <div class="tagtd">line6<input type="hidden" name="cartitem" value="3"></div>
  311. <div class="tagtd">jghjgh</div>
  312. <div class="tagtd">5</div>
  313. <div class="tagtd tdlineupdown">lll</div>
  314. </div>
  315. <!-- Using form into div make Firefox crazy (page loading does not end) -->
  316. <!-- <form class="liste_titre" method="POST" action="1.php">
  317. <div>line1<input type="hidden" name="cartitem" value="1"></div>
  318. <div><label><input type="checkbox" name="hidedetails" value="2"> A checkbox inside a cell</label></div>
  319. <div><input name="count" value="4"></div>
  320. <div><input type="submit" name="count2" class="button noshadow" value="aaa"></div>
  321. </form>
  322. <form class="impair" method="POST" action="2.php">
  323. <div>line2<input type="hidden" name="cartitem" value="2"></div>
  324. <div><select name="hidedetails"><option>aaaaaaaaaaaaaaafd sf sf gfd gfd gs fgdf gaaaa</option><option>gdfs gdf g sdfg dfg fdsg dsfg dfs gdfs gds fgs gdfdf gd</option></select></div>
  325. <div><input name="countb" value="4"></div>
  326. <div class="tdlineupdown"><input type="submit" value="xxx" class="button"></div>
  327. </form>-->
  328. </div>
  329. <?php
  330. if (!empty($usedolheader)) {
  331. llxFooter();
  332. } else { ?>
  333. </body>
  334. <?php } ?>
  335. </html>