HTML DOM: suprimir específica div basado en el valor del atributo de datos usando PHP

Ahil Khan:

Soy nuevo en codeigniter.I obtener la base de datos forma de cadena HTML como se muestra a continuación

<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>

Tengo otra tabla de typefields como se muestra en la imagen

introducir descripción de la imagen aquí

html cadena es convertir en DOM y añadir condición de comprobación de si typefieldid = 10 es flag_status = 0 entonces eliminar esta div única <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>pero esto me dio un código como éste

<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>

Cuestión es que cuando campo Tipo = 10 es flag_status = 0 su remove <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>pero otras informaciones en cadena HTML también se eliminan. Muestro código de función del controlador donde HTML cadena convertida en documentos DOM, obtener el registro de fby_id y flag_status typefields forma de tabla y hacer un arreglo de este registro. A continuación, hacer un bucle foreach de datos en campo Tipo usando DOM consulta para obtener el valor del atributo de datos en campo Tipo a continuación, añadir condición de comprobación de si 0 = 1 luego retire div específica

Un problema más es que la forma de pasar y mostrar los datos finales en archivo de vista después de retirar div específico basado en condiciones. Aquí es el código de función del controlador

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);
}

y por favor me guía ¿hay alguna opción para eliminar solamente div específica de HTML DOM. Quiero que mi salida de código como este camino

<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>
Nigel Ren:

Su código es sobre todo allí, pero la parte principal es la eliminación del nodo, he cambiado la prueba para decir si el estado = 0, a continuación, utilizar removeChild()para deshacerse del elemento. A continuación, el documento sólo debe contener los <div>elementos que desea al final ...

foreach ($xpath->query("//div[@data-typefield]") as $item)
{
    $typefield = $item->getAttribute('data-typefield');
    if($field_array[$typefield] == 0)
    {
        $item->parentNode->removeChild($item);
    }
}

echo $doc->saveHTML();

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=383664&siteId=1
Recomendado
Clasificación