/** * "Дальше" рисуется всегда, если параметр $elements_count не передан * * @param int $elements_count * @return string */ public static function renderPager($table_index_on_page, $elements_count = null) { $pager_needed = false; if (self::hasPrevPage($table_index_on_page)) { $pager_needed = true; } if (is_null($elements_count) || self::hasNextPage($table_index_on_page, $elements_count)) { $pager_needed = true; } if (!$pager_needed) { return ''; } $html = '<ul class="pagination">'; // TODO: looses existing get form $page_url = \OLOG\Url::getCurrentUrlNoGetForm(); if (self::hasPrevPage($table_index_on_page)) { $html .= '<li><a href="' . $page_url . '?' . self::pageOffsetFormFieldName($table_index_on_page) . '=0&' . self::pageSizeFormFieldName($table_index_on_page) . '=' . self::getPageSize($table_index_on_page) . '"><span class="glyphicon glyphicon-home"></span> 0-' . self::getPageSize($table_index_on_page) . '</a></li>'; $html .= '<li><a href="' . $page_url . '?' . self::pageOffsetFormFieldName($table_index_on_page) . '=' . self::getPrevPageStart($table_index_on_page) . '&' . self::pageSizeFormFieldName($table_index_on_page) . '=' . self::getPageSize($table_index_on_page) . '"><span class="glyphicon glyphicon-arrow-left"></span> ' . self::getPrevPageStart($table_index_on_page) . '-' . (self::getPrevPageStart($table_index_on_page) + self::getPageSize($table_index_on_page)) . '</a></li>'; } else { $html .= '<li class="disabled"><a href="#"><span class="glyphicon glyphicon-home"></span></a></li>'; $html .= '<li class="disabled"><a href="#"><span class="glyphicon glyphicon-arrow-left"></span></a></li>'; } $html .= '<li class="active"><a href="#">' . self::getPageOffset($table_index_on_page) . '-' . (self::getPageOffset($table_index_on_page) + self::getPageSize($table_index_on_page)) . '</a></li>'; if (!$elements_count || self::hasNextPage($table_index_on_page, $elements_count)) { $html .= '<li><a class="next-page" href="' . $page_url . '?' . self::pageOffsetFormFieldName($table_index_on_page) . '=' . self::getNextPageStart($table_index_on_page) . '&' . self::pageSizeFormFieldName($table_index_on_page) . '=' . self::getPageSize($table_index_on_page) . '">' . self::getNextPageStart($table_index_on_page) . '-' . (self::getNextPageStart($table_index_on_page) + self::getPageSize($table_index_on_page)) . ' <span class="glyphicon glyphicon-arrow-right"></span></a></a></li>'; } else { $html .= '<li class="disabled"><a href="#"><span class="glyphicon glyphicon-arrow-right"></span></a></li>'; } $html .= "</ul>"; return $html; }
public function html($obj) { Assert::assert($obj); $o = ''; $o .= '<form style="display: inline;" method="post" action="' . \OLOG\Url::getCurrentUrl() . '">'; $o .= Operations::operationCodeHiddenField(CRUDTable::OPERATION_DELETE_MODEL); $o .= '<input type="hidden" name="' . self::FIELD_CLASS_NAME . '" value="' . Sanitize::sanitizeAttrValue(get_class($obj)) . '">'; $o .= '<input type="hidden" name="' . self::FIELD_OBJECT_ID . '" value="' . Sanitize::sanitizeAttrValue(CRUDFieldsAccess::getObjId($obj)) . '">'; if ($this->redirect_after_delete_url != '') { $o .= '<input type="hidden" name="' . self::FIELD_REDIRECT_AFTER_DELETE_URL . '" value="' . Sanitize::sanitizeAttrValue($this->redirect_after_delete_url) . '">'; } $o .= '<button class="' . $this->button_class_str . '" type="submit" onclick="return window.confirm(\'Delete?\');">' . $this->button_text . '</button>'; $o .= '</form>'; return $o; }
/** * @param $obj InterfaceWeight * @return string */ public function html($obj) { Assert::assert($obj); $o = ''; $o .= '<form style="display: inline;" method="post" action="' . \OLOG\Url::getCurrentUrl() . '">'; $o .= Operations::operationCodeHiddenField(CRUDTable::OPERATION_SWAP_MODEL_WEIGHT); $o .= '<input type="hidden" name="' . self::FORMFIELD_CONTEXT_FIELDS_NAME . '" value="' . Sanitize::sanitizeAttrValue(implode(',', array_keys($this->context_fields_arr))) . '">'; foreach ($this->context_fields_arr as $context_field_name => $context_field_value) { $context_field_value = CRUDCompiler::compile($context_field_value, ['this' => $obj]); $o .= NullablePostFields::hiddenFieldHtml($context_field_name, $context_field_value); } $o .= '<input type="hidden" name="_class_name" value="' . Sanitize::sanitizeAttrValue(get_class($obj)) . '">'; $o .= '<input type="hidden" name="_id" value="' . Sanitize::sanitizeAttrValue(CRUDFieldsAccess::getObjId($obj)) . '">'; $o .= '<button class="' . $this->button_class_str . '" type="submit">' . $this->button_text . '</button>'; $o .= '</form>'; return $o; }
public static function passwordForm() { $html = ''; $html .= '<h2>Изменение пароля</h2>'; $html .= '<form class="form-horizontal" role="form" method="post" action="' . Url::getCurrentUrl() . '">'; $html .= Operations::operationCodeHiddenField(self::OPERATION_SET_PASSWORD); $html .= '<div class="form-group "> <label class="col-sm-4 text-right control-label">Новый пароль</label> <div class="col-sm-8"> <input name="' . self::FIELD_NAME_PASSWORD . '" class="form-control" value=""> </div> </div>'; $html .= '<div class="row"> <div class="col-sm-8 col-sm-offset-4"> <button style="width: 100%" type="submit" class="btn btn-primary">Сохранить</button> </div> </div>'; $html .= '</form>'; return $html; }
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; }
/** * table_id - это идентификатор таблицы на странице, к которому привязываются все данные: имена полей формы и т.п. * @param $model_class_name * @param $create_form_html * @param $column_obj_arr * @param array $filters_arr * @param string $order_by * @return string */ public static function html($model_class_name, $create_form_html, $column_obj_arr, $filters_arr = [], $order_by = '', $table_id = '', $filters_position = self::FILTERS_POSITION_NONE) { // TODO: придумать способ автогенерации table_id, который был бы уникальным, но при этом один и тот же когда одну таблицу запрашиваешь несколько раз self::executeOperations(); // // вывод таблицы // $table_container_element_id = uniqid('tableContainer_'); if ($table_id) { $table_container_element_id = $table_id; } // оборачиваем в отдельный div для выдачи только таблицы аяксом - иначе корневой элемент документа не будет доступен в jquery селекторах $html = HTML::div($table_container_element_id, '', function () use($model_class_name, $create_form_html, $column_obj_arr, $filters_arr, $order_by, $table_id, $filters_position) { echo '<div class="row">'; if ($filters_position == self::FILTERS_POSITION_LEFT) { echo '<div class="col-sm-4">'; echo self::filtersHtml($table_id, $filters_arr); echo '</div>'; } $col_sm_class = '12'; if ($filters_position == self::FILTERS_POSITION_LEFT || $filters_position == self::FILTERS_POSITION_RIGHT) { $col_sm_class = '8'; } echo '<div class="col-sm-' . $col_sm_class . '">'; echo self::toolbarHtml($table_id, $create_form_html, $filters_arr); if ($filters_position == self::FILTERS_POSITION_TOP) { echo self::filtersHtml($table_id, $filters_arr); } if ($filters_position == self::FILTERS_POSITION_INLINE) { echo self::filtersHtmlInline($table_id, $filters_arr); } echo '<table class="table table-hover">'; /** @var InterfaceCRUDTableColumn $column_obj */ echo '<thead><tr>'; foreach ($column_obj_arr as $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); echo '<th>' . Sanitize::sanitizeTagContent($column_obj->getTitle()) . '</th>'; } echo '</tr></thead>'; echo '<tbody>'; $objs_ids_arr = CRUDInternalTableObjectsSelector::getObjIdsArrForClassName($table_id, $model_class_name, $filters_arr, $order_by); foreach ($objs_ids_arr as $obj_id) { $obj_obj = CRUDObjectLoader::createAndLoadObject($model_class_name, $obj_id); /** @var InterfaceCRUDTableColumn $column_obj */ echo '<tr>'; foreach ($column_obj_arr as $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" '; } echo '<td ' . $col_width_attr . ' style="word-break: break-all;">'; echo $widget_obj->html($obj_obj); echo '</td>'; } echo '</tr>'; } echo '</tbody>'; echo '</table>'; echo Pager::renderPager($table_id, count($objs_ids_arr)); echo '</div>'; if ($filters_position == self::FILTERS_POSITION_RIGHT) { echo '<div class="col-sm-4">'; echo self::filtersHtml($table_id, $filters_arr); echo '</div>'; } echo '</div>'; }); // Загрузка скриптов $html .= CRUDTableScript::getHtml($table_container_element_id, Url::getCurrentUrlNoGetForm()); return $html; }
/** * ид объекта может быть пустым - тогда при сохранении формы создаст новый объект * @param $obj * @param $element_obj_arr * @param string $url_to_redirect_after_save * @param array $redirect_get_params_arr * @return string html-код формы редактирования * @throws \Exception */ public static function html($obj, $element_obj_arr, $url_to_redirect_after_save = '', $redirect_get_params_arr = [], $form_id = '', $operation_code = self::OPERATION_SAVE_EDITOR_FORM, $hide_submit_button = false) { self::executeOperations($url_to_redirect_after_save, $redirect_get_params_arr); $form_element_id = 'formElem_' . uniqid(); if ($form_id) { $form_element_id = $form_id; } $html = ''; $html .= '<form id="' . $form_element_id . '" class="form-horizontal" role="form" method="post" action="' . Sanitize::sanitizeUrl(\OLOG\Url::getCurrentUrl()) . '">'; $html .= Operations::operationCodeHiddenField($operation_code); $html .= '<input type="hidden" name="' . self::FIELD_CLASS_NAME . '" value="' . Sanitize::sanitizeAttrValue(get_class($obj)) . '">'; $html .= '<input type="hidden" name="' . self::FIELD_OBJECT_ID . '" value="' . Sanitize::sanitizeAttrValue(CRUDFieldsAccess::getObjId($obj)) . '">'; /** @var InterfaceCRUDFormRow $element_obj */ foreach ($element_obj_arr as $element_obj) { Assert::assert($element_obj instanceof InterfaceCRUDFormRow); $html .= $element_obj->html($obj); } $html .= '<div class="row">'; $html .= '<div class="col-sm-8 col-sm-offset-4">'; if (!$hide_submit_button) { $html .= '<button style="width: 100%" type="submit" class="btn btn-primary">Сохранить</button>'; } $html .= '</div>'; $html .= '</div>'; $html .= '</form>'; // Загрузка скриптов $html .= CRUDFormScript::getHtml($form_element_id); return $html; }