¿Cómo muestro datos de formas de gravedad en mi plantilla? [cerrado]


21

Prefacio

Instalé formularios de gravedad, creé un formulario y los usuarios están enviando datos a mi sitio. Lo que quiero hacer es mostrar los datos que los usuarios envían a mi sitio en una de mis páginas.

Sé que existe el complemento Gravity Forms Directory . Pero esto solo da una presentación de datos fija.

Pregunta

¿Hay algo en formas de gravedad que pueda hacer algo como esto? (pseudocódigo) :

<?php gforms_get_field( $form_id, $entry_id, 'user_name_field' ); ?>


2
@GhostToast Créeme, peiné los documentos por completo y no hay ninguna información sobre cómo lograr esto.
hitautodestruct

1
Nota del futuro: aquí hay un complemento que es explícitamente para mostrar datos de Gravity Forms en el front-end: gravityview.co
Dalton

2
Apuesto a que si he publicado esta pregunta sobre por lo que me decían a publicar aquí :-) algo que ya ha sucedido con otra pregunta ..
hitautodestruct

Respuestas:


25

Puedes mirar los documentos, pero probablemente terminarás leyendo la documentación real : el código fuente.

Si lo haces, encontrarás que:

  • GFFormsModel::get_leads($form_id)devuelve una lista de entradas para un formulario (tal vez ya lo conozca), donde cada elemento de la matriz es en sí mismo una matriz, un " objeto de entrada "
  • GFFormsModel::get_form_meta($form_id)devuelve una lista de metaelementos de campo (es decir, nombre, tipo, reglas, etc.) en el formulario, donde cada elemento de la matriz es un " objeto de campo "

Una vez que tenga un objeto Entrada, puede acceder a los campos como elementos, por número de campo. Si necesita encontrar un campo por nombre o tipo, debe iterar sobre la lista de campos en el formulario para obtener una coincidencia y luego acceder al campo de la entrada por ID de campo.

NB: la determinación del tipo de campo se realiza mejor pasando el metaelemento del campo a GFFormsModel::get_input_type($field)

Editar: tenga en cuenta también que solo los primeros 200 caracteres de cada campo se devuelven en el objeto Entrada. Si tiene campos que almacenan más información, deberá solicitarla, por ejemplo, llamando GFFormsModel::get_field_value_long($lead, $field_number, $form).


1
FYI, un administrador de Gravity Forms publicó este fragmento para un shortcode pastebin.com/kHpaHQvi también.
hitautodestruct

21

Gracias a webaware por su respuesta.

Aquí hay algunas copias / pastas para cualquiera que busque un comienzo rápido. Esto toma una identificación de entrada y recupera el plomo y la forma de eso. En este caso, estoy usando la URL para pasar el valor. por ejemplo, somedomain.com?entry=123.

<?php 
    $lead_id = $_GET['entry'];
    $lead = RGFormsModel::get_lead( $lead_id ); 
    $form = GFFormsModel::get_form_meta( $lead['form_id'] ); 

    $values= array();

    foreach( $form['fields'] as $field ) {

        $values[$field['id']] = array(
            'id'    => $field['id'],
            'label' => $field['label'],
            'value' => $lead[ $field['id'] ],
        );
    }
?>
<pre><?php print_r($values); ?></pre>

1
El código es excelente, pero no funcionará Advanced fieldscomo addresso first name/last nameporque están usando .para dividir su identificación
RPDeshaies

Tampoco funcionará en chckboxes.
numediaweb

¿Cómo obtener la información del usuario que publica la entrada?
John

1

Puede usar un gform_after_submissiongancho para escribir todo lo que necesita en un tipo de publicación personalizado, que podría ser más fácil de manipular "en el campo", y estará a salvo, por ejemplo, de que alguien elimine un solo campo y borre todos los datos asociados con él. .

http://www.gravityhelp.com/documentation/page/Gform_after_submission

Yoast tiene una escritura bastante buena al escribir en campos personalizados, sin siquiera usar el gancho. http://yoast.com/gravity-forms-custom-post-types/

¡Buena suerte!


1
Duplicar datos como este parece un poco desagradable.
Felix Eve
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.