• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ht

CSS no CodeIgniter

11 mensagens neste tópico

boas,

precisava de uma ajuda nisto.. não sei se esta secção é indicado :hmm:, mas como o codeigniter é feito em php...

alguém que use codeigniter sabe como usar css externas, ou seja como ligá-las às views?? segundo a documentação, só vi sobre css internas..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, não sei se entendi muito bem a tua questão...

Por externas, refereste a CSS que sejam de outros sites?

Ou ficheiros .css que tens no teu servidor, e queres inclui-los com o

<link rel="stylesheet" type="text/css" href="/public/css/ecran.css" />

É isto?

Se sim, o que eu por norma faço (no codeigniter) é criar uma pasta "public" com algumas pastas lá dentro (img, css, js, etc) fica ao mesmo nivel que a pasta system (e user_guide), e uso como coloquei em cima para incluir os ficheiros .css.

Caso venhas a colocar o projecto online, e possa eventualmente estar a correr num subdirectório, (www.dominio.com/site), convém que faças

<link rel="stylesheet" type="text/css" href="<?=base_url();?>/public/css/ecran.css" />

De forma a que caso fique num subdirectório, não tenhas problemas em o ficheiro não ser incluido e de um momento para o outro perderes os estilos todos e teres de andar a alterar o caminho para os ficheiros css.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, como estás a criar as tuas views no CI?

Eu ia colocar um post (enorme) com a forma que tenho usado, mas hoje já não dá tempo de acabar, amanhã posso colocar se estiveres interessado :)

Cumps,

milks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

milks, a solução que encontrei foi semelhante à k postaste.. http://codeigniter.com/wiki/css/ só que com umas alterações: remover o index.php do URL, tive de criar o .htaccess. mas mesmo assim não conhecia a tua forma e colocar as css/imagens na pasta views.. a tua forma é mais simples e mais prática..

quanto às views, crio pastas para já só crio os ficheiros tipo news_view.php, users_view.php, etc.. mas tou a pensar em criar subpastas para fazer vários templates...  :hmm:

mas já agora, se puderes, gostava de saber a tua forma.. a opinião de alguém experiente nisto é sempre bom  :)

parece-me que pouco gente utiliza esta framework..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso já estive para pegar nesta framework mas ainda não tive mesmo tempo.

Além disso ando a investir tempo em PrototypeJS e Script.aculo.us.

Mas pareceu-me interessante.

Vou dedicar algum tempo e e fazer um projecto com CI e mais tarde também poderei contribuir para ajudar caso seja necessário, ou para pedir ajuda também.

Abraços,

magnastik

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso é curioso, mas começei a pegar neste framework hoje mesmo e estou a adorar :)

Não me parece tão confuso como os de command line mas talvez não será tão "automático", não tenho bem ideia.

De qualquer forma parece-me excelente até agora :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@QuickFire:

Eu uso à algum tempo, pouco, mas também devo dizer que gosto bastante, costumava usar o CakePHP, mas sentia-me um pouco limitado devido aos metodos que tinhamos de adoptar (nomes das tabelas / controllers no plural, nome dos modelos no singular, nomes de tabelas em pt nem sempre eram bem passados do singular para o plurar ou o contrário) para usar o potencial da framework. Com o CI sinto-me mais à vontade e por norma sou eu quem decide como fazer as coisas, não a framework :P para além disso tem uma boa documentação.

@magnastik:

Eu aconselho mesmo que uses um pouco o CI, tem boas libraries que facilitam algumas tarefas, e dá na mesma para usares o prototype, no projecto que estou a trabalhar ainda fiz algumas partes com umas animações e a carregar por xmlhttprequest (depois de voltares a lembrar-me disso no teu tópico dos problemas do charset ;) ), mas acabei por tirar pois já estava a inventar demais :P

(Estava era a usar o Mootools e não Prototype, tentei também o JQuery, mas o Mootools pareceu-me mais rápido e leve, embora o JQuery fosse mesmo para fazer as coisas mais rápido em termos de programação)

@ht

Não sou de forma alguma muito experiente nisto, ainda estou na fase de aprender uns truques e boas práticas :P. Dai também ter perguntado, podes ter uma forma mais simples de trabalhar ;) . Em relação às views, as primeiras que fiz, carregavam um cabecalho.php e rodape.php que sao comuns a todas, ou seja, a minhas views eram algo tipo...

View: views/reporting/mes.php

<? $this->load->view('geral/cabecalho'); ?>

<h2>Valor para <?= $mes_nome; ?></h2>
<div>
<?= form_open('reporting/mes', '', array('mes_id' => $mes_id)); ?>

<label for="mes">Valor para <?= $mes_nome; ?></label>
<?= form_input(array('name' => 'valor', 'id' => 'mes', 'value' => isset($valor) ? $valor : null)); ?>
<span class="nota">coloque apenas o "." (ponto) como separador decimal</span>

<?= form_submit('submit', 'Guardar', 'class="submit"'); ?>

<?= form_close(); ?>
</div>

<? $this->load->view('geral/rodape'); ?>

Por acaso esta view é secundária, (que são as que pensei em carregar com Ajax) tem apenas um campo como se ve e não é nada de especial.

As views (views/geral/cabecalho.php e views/geral/rodape.php) tinham o código habitual ...

View: views/geral/cabecalho.php ( adaptado )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>ProjectoX <?= isset($titulo_pagina) ? ' - ' . $titulo_pagina : null; ?></title>
<link rel="stylesheet" type="text/css" href="<?= base_url(); ?>/public/css/ecran.css" />
<link rel="stylesheet" type="text/css" href="<?= base_url(); ?>/public/css/extras.css" />
<script type="text/javascript" src="<?= base_url(); ?>/public/js/mootools.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body id="<?= $this->uri->segment(1); ?>">

<div id="header">
<h1>ProjectoX</h1>

<div id="nav">
	<? $this->load->view('geral/nav'); ?>
</div>

</div>

<div id="content">

View: views/geral/rodape.php ( adaptado )

	
</div> <!-- CONTENT -->

<div id="footer">
  Produzido por <?= anchor('http://www.urldaempresa.pt', 'A Empresa'); ?>
</div>

</body>
</html>

No cabeçalho:

- $titulo_pagina :

Em todos os Controllers, na função __construct (ou a função com o mesmo nome da classe se for php4) defino, ou seja, fica algo

<?php
class Reporting extends Controller
{

function __construct()
{
	// se for php4 usar function Reporting() ou function NomeDoController(), depende sempre do vosso Controller()

	parent::Controller();

	$this->load->vars(array(
			'titulo_pagina' => 'Reporting mensal'
	));

}

// ... resto das funcoes por aqui abaixo ...

}
?>

Usando $this->load->vars([array]); podem carregar as variáveis que quiserem para as views, é útil caso se pretenda ter um título comum para todas as acções do controller (que pode ser alterado nas acções caso se pretenda).

- <body id="<?= $this->uri->segment(1); ?>"> :

Isto serve para nos menus, o que estiver seleccionado ficar com outro estilo css (em destaque).

Por exemplo, se estiver em http://projecto/index.php/reporting, ficará <body id="reporting">, o resto é css ;)

E penso que estes sejam os casos a destacar no cabeçalho, o rodapé é chapa cinco.

Esta era a forma como fazia as minhas views (Nota: o cabeçalho abria +1 div <div id="main"> que era fechada no rodapé), tinha o cabecalho e o rodapé, as views carregavam ambas (Exemplo do reporting/mes.php).

Mas, para poder ter outra <div> ao lado da id="main" (que carrega por exemplo um formulário de inserir só com 1 campo), tive de abrir e fechar a div id="main" em todas as views (dai não ter colocado nos exemplos acima), pois caso fosse necessário, fechava a main, e abria a id="extra" para colocar então lá o formulário, caso fosse para mostrar alguma info extra, no controller carregava os dados necessários para essa div.

Apesar de já estar habituado a esta forma, achei que já estava a escrever muito código nas views (tinha de fazer ciclos para dados na main e na extra casso fosse necessário), e depois de usar o FreakAuth_Light, vi que a forma como eles carregavam as views e como estas eram feitas, era mais simples, e era o ideal (embora possa ser melhorado para o meu caso).

Agora, existe um "container" (contentor) que tem variaveis que são os locais para onde irei carregar as views, para entender melhor, um exemplo..

View views/geral/container.php

<? $this->load->view('geral/cabecalho'); ?>

<div id="main">
	<h2><?= $titulo_pagina; ?></h2>
	<?= $conteudo_main; ?>
</div>

<? if(isset($conteudo_extra)): ?>
	<div id="extra">
		<?= $conteudo_extra; ?>
	</div>
<? endif; ?>

<? $this->load->view('geral/rodape'); ?>

(Nas views gosto de usar php sem as { }, não sei porque, mas deve ser um hábito do wordpress :P )

A variavel $titulo_pagina já é carregada no __construct do controller, podemos sobrepor nas acções do controller, as variaveis $conteudo_main e $conteudo_extra, são os conteudos de outras views, que são carregadas no controller.

Agora, o exemplo de como carrego isto no controller

<?php

class Reporting extends Controller()
{ // simplificado

function __construct()
{
	parent::Controller();

	$this->load->vars(array(
		'titulo_pagina' => 'Reporting mensal'
	));	
}


function index()
{
	$vars['meses'] = $this->db->get('reporting');

	$data['conteudo_main'] = $this->load->view('reporting/index', $vars, true);
	$data['conteudo_extra'] = $this->load->view('reporting/mes', null, true);

	$this->load->view('geral/container', $data);
}


}

?>

Este controller está simplificado, no real, uso um Modelo e não os $this->db->get(etc..).

A view views/reporting/mes.php passava a não ter os loads das views cabeçalho e rodapé...

Simples, não é? Eu penso que sim :) mas ainda quero melhorar ou tornar mais flexivel, ontem estive a ver uns testes que fiz com RoR (Ruby on Rails) lá em casa e tive algumas ideias para melhorar isto, embora ainda tenha de as tornar mais claras pois estão um pouco dispersas, tenho de me sentar e pensar nisto melhor. (Sugestões são bem-vindas)

Espero que seja útil, e que possa motivar alguém a experimentar o CI, não ganho nada com isso, mas a mim dá-me gozo programar usando o CI e espero que vos possa dar também :)

Eu pretendia escrever algo mais extenso e abrangente e submeter como tutorial no p@p ou para a revista, mas ainda não encontrei tempo para isso...

Qualquer dúvida ou sugestão... já sabem :)

Cumps,

milks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu ontem também estive a experimentar mais um pouco trabalhar com CI.

Para mim a definição que o milks deu é a ideal ;)

Neste Fremework quem manda somos nós, e não o contrário!

Claro que isso tem implicações. Em comparação com outros frameworks pode não ser tão rápido de fazer muitas coisas (porque as temos que escrever nós) que usam comandos na consola, mas isso possibilita um maior controlo sobre o que está a ser feito.

Além disso parece-me ser fácil por aquilo num alojamento ;)

Eu já tive ontem a ver o Wiki e têm lá Helpers e Libraries que nos ajudam bastante em diversas situações ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu ontem também estive a experimentar mais um pouco trabalhar com CI.

Para mim a definição que o milks deu é a ideal ;)

Neste Fremework quem manda somos nós, e não o contrário!

Claro que isso tem implicações. Em comparação com outros frameworks pode não ser tão rápido de fazer muitas coisas (porque as temos que escrever nós) que usam comandos na consola, mas isso possibilita um maior controlo sobre o que está a ser feito.

Além disso parece-me ser fácil por aquilo num alojamento ;)

Eu já tive ontem a ver o Wiki e têm lá Helpers e Libraries que nos ajudam bastante em diversas situações ;)

É mesmo, basta fazeres upload da pasta system (e outras que esta necessite, no meu caso uma public) :P

Ter em atenção é claro, a ligação à bd (config/database.php), ao base_url (config/config.php) e aos ficheiros que incluis nas views (css, js, etc), que como disse em cima, a forma como os referencias no html (absoluto ou relativo) pode falhar, caso passes de correr a aplicação de um sub-directório para a raiz (ex: localhost/ci para www.omeusite.com)

Na wiki já tem mesmo bastantes libraries e helpers, é uma questão de eles organizarem aquilo, já andei lá um pouco mas ainda está tudo um pouco disperso na wiki, o user_guide está bem organizado e entende-se facilmente, a wiki é que precisa de um pouco de trabalho..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

milks, embora já conhecia essa forma de implementar as views, não estava a lembrar dela para o CI . além disso, de tanto estar habituado às templates engines, pensei que só podia carregar views nos controllers  :wallbash: mas já agora agradeço por teres colocado aqui o exemplo, ajudou imenso...

acabando os exames, vou dedicar-me pra aprofundar isto.. espero que esta framework venha pra ficar...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, vou só dar uma resposta simples, visto que esta thread já tem algum tempinho.

Quanto às views segundo o que percebi , incluem todo o código repetido nas views.. Eu não acho muito correcto isso, se bem que inicialmente também fazia assim.

Neste momento, crio uma library para o projecto em geral, em que defino uma função por ex : createOutput...

Todas as minhas classes (controllers) nos seus construtores terão algo como : $this->info['output'] = $this->mylibrary->createOutput($this->section);

Uma pequena explicação: A Mylibrary terá de ser inicializada primeiro (eu tenho-a em autoload). A minha função createOutput irá devolver um array do género : array('header' => 'o codigo do meu header', 'footer' => 'codigo do meu footer',....) e continuando...

com isto no final na minha view, simplesmente basta fazer :

<?=$output['header']?>

o meu conteudo html aqui......

<?=$output['footer']?>

Acho que isto simplifica o facto de se ter que repetir sempre a mesma coisa para um caso de um site que o layout seja igual e que mude o menu e o conteúdo por ex, e mesmo para casos específicos também funciona este método. Quanto a mim funciona perfeitamente (suponho eu), estou aberto a novas 'tendências' para as views.lol.

Quanto à minha função que cria o output seria algo do género :

$output['header'] = $CI->load->view('inc/header',$levels,true);

$output['footer'] = $CI->load->view('inc/footer','',true);

return $trema_output;

Se tiverem dúvidas em algo (para o caso de quererem experimentar este método, avisem :P).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora