Como mostro dados de formulários de gravidade no meu modelo? [fechadas]


21

Prefácio

Instalei os formulários de gravidade, criei um formulário e os usuários estão enviando dados para o meu site. O que eu quero fazer é mostrar os dados que os usuários estão enviando para o meu site em uma das minhas páginas.

Eu sei que tem o plugin Gravity Forms Directory . Mas isso fornece apenas uma apresentação de dados fixa.

Questão

Existe algo nas formas de gravidade que possa fazer algo assim? (pseudo código) :

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


2
@GhostToast Acredite, eu penteei os documentos completamente e não há informações sobre como conseguir isso.
usar o seguinte comando

11
Nota do futuro: aqui está um plugin que é explicitamente para a exibição de Gravidade dados de formulários no front-end: gravityview.co
Dalton

2
Aposto que se eu postei esta pergunta no SO que me dizia para postá-lo aqui :-) Algo que já aconteceu com outra pergunta ..
hitautodestruct

Respostas:


25

Você pode olhar para os documentos, mas você provavelmente vai acabar lendo o verdadeiro documentação : o código-fonte.

Se fizer isso, você encontrará que:

  • GFFormsModel::get_leads($form_id)retorna uma lista de entradas para um formulário (talvez você já o saiba), em que cada item da matriz é uma matriz, um " objeto de Entrada "
  • GFFormsModel::get_form_meta($form_id)retorna uma lista de meta-elementos de campo (isto é, descreve nome, tipo, regras etc.) no formulário, onde cada item na matriz é um " objeto de campo "

Depois de ter um objeto Entry, você pode acessar os campos como elementos, pelo número do campo. Se você precisar encontrar um campo por nome ou tipo, precisará percorrer a lista de campos no formulário para obter uma correspondência e acessar o campo da entrada pelo ID do campo.

NB: é melhor determinar o tipo de um campo passando o elemento elemento do campo para GFFormsModel::get_input_type($field)

Editar: observe também que apenas os 200 primeiros caracteres de cada campo são retornados no objeto Entry. Se você possui campos que armazenam mais informações, precisará solicitá-las, por exemplo, ligando GFFormsModel::get_field_value_long($lead, $field_number, $form).


11
Para sua informação, um administrador do Gravity Forms também postou esse trecho para um código curto pastebin.com/kHpaHQvi .
Hitautodestruct

21

Obrigado a webaware por sua resposta.

Aqui estão algumas cópias / massas para quem procura um início rápido. Isso pega um ID de entrada e recupera o lead e o formulário a partir dele. Nesse caso, estou usando o URL para passar o valor. por exemplo, 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>

11
Você código é grande, mas não vai funcionar para Advanced fieldscomo o addressou a first name/last nameuma vez que eles estão usando .para dividir sua ID
RPDeshaies

Também não funcionará em chckboxes.
Numeroweb

Como obter as informações do usuário que postam a entrada?
John

1

Você poderia usar um gform_after_submission gancho para escrever tudo o que precisa em um tipo de postagem personalizado, que pode ser mais fácil de manipular "fora do campo" e estará protegido contra, por exemplo, alguém excluindo um único campo e obliterando todos os dados associados a ele .

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

O Yoast possui um excelente registro ao gravar em campos personalizados, sem usar o gancho. http://yoast.com/gravity-forms-custom-post-types/

Boa sorte!


11
Duplicar dados como esse parece um pouco desagradável.
Felix Eve
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.