Я новичок в codeigniter. Я получаю базу данных html в виде строки, как показано ниже
<div class="rockfm-form-container uiform-wrap">
<div class="rockfm-alert-container"></div>
<form class="rockfm-form" action="" name="" method="post" data-zgfm-type="1" enctype="multipart/form-data" id="rockfm_form_7">
<input type="hidden" value="7" class="_rockfm_form_id" name="_rockfm_form_id">
<input type="hidden" value="0" class="_rockfm_wizard_st" >
<input type="hidden" value="PGRpdiBjbGFzcz0icm9ja2ZtLWFsZXJ0IHJvY2tmbS1hbGVydC1zdWNjZXNzIj5TdWNjZXNzISBGb3JtIHdhcyBzZW50IHN1Y2Nlc3NmdWxseS48L2Rpdj4=" name="_rockfm_onsubm_smsg" class="_rockfm_onsubm_smsg" > <!--- ajax or post --->
<input type="hidden" value="1" class="_rockfm_type_submit" name="_rockfm_type_submit">
<input type="hidden" value="rocket_front_submitajaxmode" name="action">
<div class="uiform-main-form">
<div class="uiform-step-content" >
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field " ></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required " data-val-type="4"></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field " ></div>
<div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field " ></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field " ></div>
</div>
</div>
</form>
</div>
У меня есть другая таблица полей типов, как показано на изображении
html строка преобразуется в DOM и добавляет условие проверки, если typefieldid = 10 равно flag_status = 0 , тогда удалите только этот div <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>
, но это дало мне код, подобный этому
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field "></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required "></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field "></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field "></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field "></div>
Проблема в том, что когда typefield = 10 равно flag_status = 0 , его удалить <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>
, но другая информация в строке html также удаляется. Я показываю код функции контроллера, где I html строка преобразуется в документы DOM, получаю запись fby_id и flag_status форму таблицы полей типов и составляю массив этой записи. Затем создайте foreach l oop поля типа данных, используя запрос DOM для получения значения атрибута поля типа данных, затем добавьте условие проверки, если 0 = 1 , затем удалите указанную c div
Еще одна проблема заключается в том, как передать и показать окончательные данные в файле представления после удаления указанного c div в зависимости от условия. Вот код функции контроллера
public function getform() {
$form_id = ($this->input->post('id')) ? Uiform_Form_Helper::sanitizeInput($this->input->post('id')) : 0;
$data = array();
if (intval($form_id) === 0) {
return;
} else {
$rdata = $this->model_forms->getFormById($form_id);
}
$response = array();
if (!empty($rdata)) {
$response['html_content'] = Uiform_Form_Helper::encodeHex($rdata->fmb_html);
}
$html = $rdata->fmb_html;
$doc = new DOMDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
$fields = $this->model_fields->getAllFieldsType();
$field_array =array();
foreach ($fields as $value) {
$field_array[$value->fby_id] = $value->flag_status;
}
foreach ($xpath->query("//div[@data-typefield]") as $item)
{
$typefield = $item->getAttribute('data-typefield');
if($field_array[$typefield] == 1)
{
$item->outertext = '';
$doc->saveHTML($item);
}
}
$data = array();
$json = $response;
$data['json'] = $response;
$this->load->view('html_view', $data);
}
и, пожалуйста, подскажите, есть ли возможность удалить только указанный c div из HTML DOM. Я хочу, чтобы мой код выводился следующим образом
<div class="rockfm-form-container uiform-wrap">
<div class="rockfm-alert-container"></div>
<form class="rockfm-form" action="" name="" method="post" data-zgfm-type="1" enctype="multipart/form-data" id="rockfm_form_7">
<input type="hidden" value="7" class="_rockfm_form_id" name="_rockfm_form_id">
<input type="hidden" value="0" class="_rockfm_wizard_st" >
<input type="hidden" value="PGRpdiBjbGFzcz0icm9ja2ZtLWFsZXJ0IHJvY2tmbS1hbGVydC1zdWNjZXNzIj5TdWNjZXNzISBGb3JtIHdhcyBzZW50IHN1Y2Nlc3NmdWxseS48L2Rpdj4=" name="_rockfm_onsubm_smsg" class="_rockfm_onsubm_smsg" > <!--- ajax or post --->
<input type="hidden" value="1" class="_rockfm_type_submit" name="_rockfm_type_submit">
<input type="hidden" value="rocket_front_submitajaxmode" name="action">
<div class="uiform-main-form">
<div class="uiform-step-content" >
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field " ></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required " data-val-type="4"></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field " ></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field " ></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field " ></div>
</div>
</div>
</form>
</div>