public static function html($model_class_name, $create_form_html, $column_obj_arr, $parent_id_field_name, $order_by = '', $table_id = '1', $filters_arr = [], $col_with_padding_index = 0, $filters_position = CRUDTable::FILTERS_POSITION_NONE) { // TODO: придумать способ автогенерации table_id, который был бы уникальным, но при этом один и тот же когда одну таблицу запрашиваешь несколько раз CRUDTable::executeOperations(); $objs_ids_arr = CRUDInternalTableObjectsSelector::getRecursiveObjIdsArrForClassName($model_class_name, $parent_id_field_name, $filters_arr, $order_by); // // вывод таблицы // $table_container_element_id = 'tableContainer_' . $table_id; // оборачиваем в отдельный div для выдачи только таблицы аяксом - иначе корневой элемент документа не будет доступен в jquery селекторах $html = '<div>'; $html .= '<div class="' . $table_container_element_id . ' row">'; if ($filters_position == CRUDTable::FILTERS_POSITION_LEFT) { $html .= '<div class="col-sm-4">'; $html .= self::filtersHtml($filters_arr); $html .= '</div>'; $html .= '<div class="col-sm-8">'; } else { $html .= '<div class="col-sm-12">'; } $html .= self::toolbarHtml($table_id, $create_form_html); if ($filters_position == CRUDTable::FILTERS_POSITION_TOP) { $html .= self::filtersHtml($filters_arr); } $html .= '<table class="table table-hover">'; $html .= '<thead>'; $html .= '<tr>'; /** @var InterfaceCRUDTableColumn $column_obj */ foreach ($column_obj_arr as $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); $html .= '<th>' . Sanitize::sanitizeTagContent($column_obj->getTitle()) . '</th>'; } $html .= '</tr>'; $html .= '</thead>'; $html .= '<tbody>'; foreach ($objs_ids_arr as $obj_data) { $obj_id = $obj_data['id']; $obj_obj = CRUDObjectLoader::createAndLoadObject($model_class_name, $obj_id); $html .= '<tr>'; /** @var InterfaceCRUDTableColumn $column_obj */ foreach ($column_obj_arr as $col_index => $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); /** @var InterfaceCRUDTableWidget $widget_obj */ $widget_obj = $column_obj->getWidgetObj(); Assert::assert($widget_obj); Assert::assert($widget_obj instanceof InterfaceCRUDTableWidget); $col_width_attr = ''; if ($widget_obj instanceof CRUDTableWidgetDelete) { $col_width_attr = ' width="1px" '; } if ($widget_obj instanceof CRUDTableWidgetWeight) { $col_width_attr = ' width="1px" '; } $html .= '<td ' . $col_width_attr . '>'; if ($col_index == $col_with_padding_index) { $html .= '<div style="padding-left: ' . $obj_data['depth'] * 30 . 'px;">'; } $html .= $widget_obj->html($obj_obj); if ($col_index == 0) { $html .= '</div>'; } $html .= '</td>'; } $html .= '</tr>'; } $html .= '</tbody>'; $html .= '</table>'; $html .= '</div>'; $html .= '</div>'; $html .= '</div>'; // Загрузка скриптов $html .= CRUDTableScript::getHtml($table_container_element_id, Url::getCurrentUrlNoGetForm()); return $html; }