Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou desenvolvendo uma aplicação com o jQuery Address, um plugin do jQuery que faz deep linking (/#!/pagina).
Estou usando o modo 'crawling' para o conteúdo ser 'googlável'. O modo crawling opera com AJAX. Os dados estão no arquivo data.xml e o index.php busca tudo lá.
O index.php faz todo o serviço, gera até o menu. Muito interessante.
O meu problema é que eu quero gerar mais páginas, que seriam subpáginas, e não podem aparecer no menu. Se eu gero mais conteúdo para o site, a página sempre vai aparecer no menu.
Deem uma olhada no código. Aqui está a parte do código PHP que faz a conexão com o arquivo XML:
// Loads the data file
$this->doc = new DOMDocument();
$this->doc->load('data.xml');
$this->xp = new DOMXPath($this->doc);
$this->nodes = $this->xp->query('/data/page');
$this->node = $this->xp->query('/data/page[@href="' . $this->page . '"]')->item(0);
E aqui está a função nav(), que gera o menu:
function nav() {
$str = '';
// Prepares the navigation links
foreach ($this->nodes as $node) {
$href = $node->getAttribute('href');
$title = $node->getAttribute('title');
$str .= '<li><a href="' . $this->base() . ($href == '/' ? '' : '?' . self::fragment . '=' . urlencode(html_entity_decode($href))) . '"'
. ($this->page == $href ? ' class="selected"' : '') . '>'
. $title . '</a></li>';
}
echo($str);
}
O formato dos dados XML é assim:
<page href="/filosofia" title="Filosofia">
<h1>Filosofia</h1>
</page>
<page href="/contato" title="Contato">
<h1>Contato</h1>
</page>
Para cada 'page' no XLM, a função nav() gera um '<li>' no menu.
Só que eu não quero que ele gere para todos. Eu pensei em dois métodos que seriam relativamente fáceis de implementar, mas eu não sei como fazer nenhum deles:
1. Executar o 'foreach' apenas 'n' vezes dentro da função nav(). Sendo 'n' um número que eu possa especificar dentro do código PHP. Assim ele pegaria somente os primeiros 4 (por exemplo) elementos 'page' do XML, e o restante não iria para o menu, mas funcionaria como link pra eu jogar o resto do conteúdo que preciso no site.
2. Colocar mais um atributo no elemento 'page' no XLM, por exemplo, aqui eu vou inserir o atributo nav:
<page href="/filosofia" title="Filosofia" nav="true">
<h1>Filosofia</h1>
</page>
<page href="/contato" title="Contato" nav="true">
<h1>Contato</h1>
</page>
<page href="/formulario" title="Formulário" nav="false">
<h1>Formulário</h1>
</page>
E colocar na função nav() um código que lesse o atributo 'nav' do XML, e só entraria no menu o que tiver 'true' em nav. Com o código acima, 'Filosofia' e 'Contato' iriam para o menu, mas 'Formulário' não iria, o que não impediria o seu funcionamento.
Acho que pode ser bem simples, mas o meu conhecimento em php é muito próximo do zero, e não sei fazer.
Alguém aí sabe?
Carregando comentários...