Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelobbt

Usar libary Grocery CRUD dentro de uma master page no Codeigniter

Recommended Posts

Estava fazendo uma aplicação com Codeigniter e criei uma "master page" de forma a só precisar chamar o conteúdo. Ela está estruturada dessa forma:

...
<div id="topo">
	<p> </p>
	<h1>TITULO</h1>
</div>
<div id="esquerda">
	<?php $this->load->view($menu); ?>
</div>
<div id="centro">
	<?php $this->load->view($pagconteudo); ?>
</div>
...

então no meu controle eu chamava da seguinte forma:

...
function index () {
    $dados = array (
	'pagconteudo'=>'VistaGeral',
	'menu'=>'menu',
        'variavel1'=>$valor
    );
    //carrega página e dados
    $this->load->view('padroes/paginaconteudo',$dados);
}
...

então na vista VistaGeral.php eu coloco apenas um <?php echo $variavel1; ?> para exibir a informação passada.

 

Até aí funcionava muito bem. Então para agilizar as coisas, tentei usar a libary "GROCERYCRUD". Ela funciona muito bem, mas para carregar na vista, ela joga os dados como um objeto da seguinte forma:

//function que carrega a vista
public function _example_output($output = null)
{
	$this->load->view('VistaGeral',$output);
}

public function offices_management()
{
	try{
		$crud = new grocery_CRUD();
		$crud->set_table('usuarios');
		$output = $crud->render();
		$this->_example_output($output);
	}catch(Exception $e){
		show_error($e->getMessage().' --- '.$e->getTraceAsString());
	}
}


Sendo assim, não consigo colocar a variável $output dentro do array $dados e carregar junto dos outros parametros que preciso, pois a variável $output é um objeto.

 

Alguém pode me dizer como eu conseguiria chamar os dados enviados por esta libary junto com o carregamento das páginas do menu e conteúdo?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se vc colocar $outpout como primeiro elemento de array e passar como paramentro, resolve?!

 

Eu nunca usei o GROCERY... mas acho que fazendo assim, vc pode recurar o view o primeiro elemento do array nas de chamar os metodos do objeto..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não da certo. Ele da erro dizendo que o objeto não pode ser convertido em string.

 

"Object of class stdClass could not be converted to string"

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é a biblioteca e sim a forma de se passar para o template.

 

Como o próprio erro sugere, necessita ser uma string. Você deve, então, tratar o objeto e retornar apenas uma string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a funcionalidade da biblioteca é passar um único objeto e dele a biblioteca monta tudo. Só que não da para passar o objeto dentro do array e não consigo passar outros parâmetros com o objeto.

Esse que estás endo o impasse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que você não tenha visto o real problema.

 

O problema se encontra aqui:

$this->load->view('VistaGeral',$output);

Você não pode enviar um objeto para a View. Grocery é uma biblioteca utilizada na Model, uma camada distinta nesse caso.

 

Uma vez retornado o objeto (na Model), você deve tratá-lo para, assim então, enviar para a View.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum...

 

 

nessa linha

$this->load->view('VistaGeral',$output);

Onde vc seta o objeto como paramentro do visualizador, vc não pode retirar apenas os dados necessários para a função não?! Quer dizer... não faço ideia dos metodos desse objeto, mas algo assim não seria possível:

public function _example_output($output = null)
{
        $dados = array(
         [...]
         'variavel1'=>$output->getValor(); // existe esse metodo ?
        )

	$this->load->view('VistaGeral',$dados);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que você não tenha visto o real problema.

 

O problema se encontra aqui:

$this->load->view('VistaGeral',$output);

Você não pode enviar um objeto para a View. Grocery é uma biblioteca utilizada na Model, uma camada distinta nesse caso.

 

Uma vez retornado o objeto (na Model), você deve tratá-lo para, assim então, enviar para a View.

 

Não compreendi como vou fazer isso, pois nessa libary eu apenas escrevo na view <?php echo $output; ?> e ele me gera uma tabela com todos os dados da tabela do BD, com opção de editar deletar e inserir, sem ter que escrever mais nada.

 

Como trato isso para ir para a view?

 

 

Detalhes no site: http://www.grocerycrud.com/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por clovis.sardinha
      Como fazer para colocar um spinner antes de carregar os dados do bd? Eu clico no link e entra na função do controle e só vai para a página da views quando já está pronto a query. Vi uns exemplos de colocação de spinner, mas se a página ainda não apareceu como faço? Vou anexar a função que chama a página para facilitar. 
      public function inativos()  {     $session = \Config\Services::session();     $pager = \Config\Services::pager();     $usuarios=$this->usuarios->getInativos();//faz a query no bd.     $dados=[         'usuarios'=>$usuarios,         'pager'=>$this->usuarios->pager,     ];     echo view('Admin/Relatorios/listaInativos',$dados); }   
    • Por mark1978
      Boa noite srs, tem o código abaixo e esta funcionando normal e carregando o Qrcode no HTML na soma.
      Porém gostaria de alterar e que fosse da seguinte forma:
      Se "totalServico" for menor que "totalProdutos" e diferente de zero então carregue o Qr Code com esse valor
      Se não o valor for "0,00" carregue o valor "totalProdutos". Essa finalidade é para ter uma opção de desconto.
       
      <?php use Piggly\Pix\StaticPayload; class Os_model extends CI_Model { public function getProdutos($id = null) { $this->db->select('produtos_os.*, produtos.*'); $this->db->from('produtos_os'); $this->db->join('produtos', 'produtos.idProdutos = produtos_os.produtos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function getServicos($id = null) { $this->db->select('servicos_os.*, servicos.nome, servicos.preco as precoVenda'); $this->db->from('servicos_os'); $this->db->join('servicos', 'servicos.idServicos = servicos_os.servicos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function valorTotalOS($id = null) { $totalServico = 0; $totalProdutos = 0; if ($servicos = $this->getServicos($id)) { foreach ($servicos as $s) { $totalServico = $totalServico + $s->preco; } } if ($produtos = $this->getProdutos($id)) { foreach ($produtos as $p) { $totalProdutos = $totalProdutos + $p->subTotal; } } return ['totalServico' => $totalServico, 'totalProdutos' => $totalProdutos]; } public function getQrCode($id, $pixKey, $emitente) { if (empty($id) || empty($pixKey) || empty($emitente)) { return; } $result = $this->valorTotalOS($id); $amount = round(floatval($result['totalServico'] + $result['totalProdutos']), 2); if ($amount <= 0) { return; } $pix = (new StaticPayload()) ->applyValidCharacters() ->applyUppercase() ->setPixKey(getPixKeyType($pixKey), $pixKey) ->setMerchantName($emitente->nome, true) ->setMerchantCity($emitente->cidade, true) ->setAmount($amount) ->setTid($id) ->setDescription(sprintf("%s OS %s", $emitente->nome, $id), true); return $pix->getQRCode(); } }  

    • Por Samuel Pietro
      Olá pessoal!

      Preciso da ajuda de vocês no seguinte!
      Tenho um arquivo retornos.json
       
      { "retornos": [ { "id": 1, "sigla": "00", "nome": "Efetuado" }, { "id": 2, "sigla": "01", "nome": "Inválido" }, { "id": 3, "sigla": "02", "nome": "Corrompido" } ] }
      E na minha aplicação feita com CodeIgniter tenho uma consulta que me mostra a sigla que está cadastrada no BD.
       
      foreach ($results as $r) {  $retorno = $r->codRetorno; } 
      Eu preciso que essa consulta ao me retornar a sigla 02 por exemplo o echo apresente o "nome" para tal "sigla" que esta cadastrada no JSON.

      No caso seria a seguinte lógica: 
      if ("$retorno" == JSON["sigla"]){ echo JSON["nome"];  } //ESTE NÃO É UM CÓDIGO VÁLIDO, É APENAS PARA FINS DE ENTENDER A LÓGICA DO QUE EU PRECISO. // PS. ESSA LOGICA PRECISA SER APLICADA DENTRO DE UM FOREACH COM MILHARES DE REGISTROS.
      Como eu posso fazer isso?
       
    • Por buganti
      Olá!
       
      Estou me familiarizando com o codeigniter e desenvolvendo um site, a estrutura dele montei usando o conceito de uma página só, então eu tenho algumas section que ao clicar nos botões do menu a página vai até a section referenciada, porém, me surgiu uma questão, uma dessas section terá referências a outras páginas separadas, por exemplo, terei alguns cards com produtos, ao clicar em algum desses cards abrirá uma nova página com mais detalhes sobre esse produto, aí nessa página o meu será o mesmo, via template, só que ao clicar no botões ele busca as referências das section da página principal (única) e aí não funciona para voltar para lá, como eu deveria fazer essa referência de forma que funciona-se para ambas as situações?
       
      Não sei se fui clara na minha dúvida, se caso for necessário posso tentar me explicar melhor.
       
      Desde já agradeço.
    • Por tncardoso
      Fala Pessoal... estou tendo algumas dificuldades num projeto pessoal que estou desenvolvendo com o PHP CodeIgniter.
      Estou tentando mudar o caminho da pagina inicial, para um template que eu baixei e configurei dentro deste projeto.

      Ao fazer isso.. me deparei com o seguinte erro...
      A PHP Error was encountered
      Severity: Notice
      Message: Undefined property: Home::$template
      Filename: controllers/Home.php
      Line Number: 9
      Backtrace:
      File: C:\xampp\htdocs\projects\thiago-cardoso\application\controllers\Home.php
      Line: 9
      Function: _error_handler
      File: C:\xampp\htdocs\projects\thiago-cardoso\index.php
      Line: 315
      Function: require_once
      An uncaught Exception was encountered
      Type: Error
      Message: Call to a member function show() on null
      Filename: C:\xampp\htdocs\projects\thiago-cardoso\application\controllers\Home.php
      Line Number: 9
      Backtrace:
      File: C:\xampp\htdocs\projects\thiago-cardoso\index.php
      Line: 315
      Function: require_once
       
      Em caso de Dúvida, segue aqui também um pouco do arquivo Home.php que estou trabalhando.
      <?php defined('BASEPATH') OR exit('No direct script access allowed');   class Home extends CI_Controller {          public function index()     {         // $this->load->view('home');         $this->template->show('home');     } }  
       
      Aguardo Resposta.
      Obrigado...
       
      Thiago Cardoso
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.