Partial
Se você quiser utilizar alguns códigos ou textos em sua página de outros arquivos, você pensa em include. No symfony existe um comando semelhante, que é o partial. Os partials são pedaços de códigos reutilizáveis, são armazenados na pasta
templates/, contém código
HTML e php embutido. Um arquivo partial
SEMPRE começa com sublinhado (
_), isso ajuda a distiguir os arquivos, já que eles ficam no mesmo diretório. Um partial pode ser incluido se estiver no mesmo módulo, em outro módulo, ou no diretório global
templates/.
O comando para usar é
include_partial(), os parâmetros são o nome do módulo e o nome do arquivo sem o sublinhado (_) e o .php.
Exemplo:
//myapp/modules/seumodulo/templates/_testepartial.php do mesmo módulo
//Como o partial está no mesmo módulo, você pode omiti-lo
<?php include_partial(‘testepartial’); ?>
//myapp/modules/fotos/templates/_testepartial.php
//‘fotos’ é um exemplo do nome do módulo
<?php include_partial(‘fotos/testepartial’);
“Como utilizar variáveis do meu template (
indexSuccess.php por exemplo) na minha partial (no caso
_testepartial.php)?”
Muita calma nessa hora.
Para resolver isso é muito simples, basta você definir uma variável no
seumodulo/actions/actions.class.php
class seumoduloActions extends sfActions {
public function executeIndex()
{
$this->total = 2000;
}
}
Agora o seu template
seumodulo/templates/indexSuccess.php terá:
<p>www.symfonybr.com</p>
<?php include_partial
(‘testepartial’,
array(‘totalpartial’ =>
$total)) ?>
E no
myapp/modules/seumodulo/templates/_testepartial.php:
<p>Visitas:
<?php echo $totalpartial;
?> por dia :x!</p>
Se você quiser pegar o conteúdo de uma partial sem exibi-lo, utilize o
get_partial().
Components
E se você quiser ao invés de usar apenas alguns códigos ou textos, utilizar um template de outro módulo com suas próprias
actions?
Muito mais calma nessa hora porque é pra isso que serve o components.
Digamos que você tem um site e tenha 2 links: um pra videos e outro pra fotos. Você agora quer exibir apenas o conteúdo do módulo videos e do módulo fotos.
No módulo videos, adicione em modules/videos/template/_index.php
<?php echo "Lista de videos";
?>
Para que as actions do módulo videos funcionem no components, faça o seguinte:
Na pasta
modules/videos/actions/ copie e cole o arquivo
actions.class.php e renomeie para
components.class.php.
Agora, altere ele onde tem
class videosActions extends sfActions
para
class videosComponents extends sfComponents
PS: Lembrar de trocar o nome do módulo (videos)
Agora na sua página principal, use o helper include_components():
<?php include_component(‘videos’,‘index’); ?>
Como no partial, você pode passar variáveis para os components:
<?php include_component
(‘videos’,
‘index’,
array(‘foo’ =>
‘bar’);
?>
;
//No próprio componente
<?php echo $this->
foo;
?> //retorna bar
//No _index.php
<?php echo $foo;
?> //retorna bar
A grande diferença é que no Components, você pode usar as actions do módulo, ou seja, colocar a lógica de programação (consulta de banco, por exemplo) no arquivo actions.class.php e utilizá-los no template.
O Partial não dá suporte ao actions.class.php, então seguindo o padrão MVC, você só usaria o partial para mostrar algum conteúdo html que não precise de lógica de programação.