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

HolyMurderer

Sistema de skins

16 mensagens neste tópico

Boas!

Estou a tentar fazer um sistema de skins, idêntico ao do site dos metallica, mas não estou a conseguir.

Estive a ver o sistema do Joomla/Mambo/etc..., mas não é bem o que procuro. O do site dos Metallica é mesmo o ideal, mas não consigo perceber algumas coisas.

Os maiores problemas com que me deparo é a detecção de qual a skin será e como alterar as imagens, visto que não queria usar menus com texto e cor, mas sim uma imagem mesmo com rollover. Pelo que percebi cada skin está na sua pasta, tem um nome ou um identifier ou ambos.

Estava a pensar em ter num ficheiro geral o seguinte:

-Menus (nome e link)

-Título

-Keywords

-Texto do Header

-Texto do Footer

-Qual a skin (variável global com o nome da pasta onde se encontra a skin) através duma Option Box

E em cada skin:

-Menus (imagens) e seus correspondentes rollovers

-CSS Styles para os links, textos, etc

-Imagem de fundo do Header

-Imagem de fundo do Footer

-Imagens do site em si, que dependem de cada skin

Se me lembrar de mais algo, altero.

Para perceberem melhor o que estou a fazer, se vos der por exemplo o menu Home, o que acontece é saber qual é a skin (a pasta) de acordo com a variável de sessão e, se a skin se chamar teste, tentar ir buscar a imagem teste/imagens/menu_home.jpg e teste/imagens/menu_home_rollover.jpg e fazer o seu correspondente rollover pelo css que estiver na pasta em questão.

Algum conselho que me saibam dar, ajudar, ou algum tutorial online para isto? Estou mesmo a empancar pois tento fazer e sinto que há sempre algo que falha, ou que não estou a raciocinar correctamente...

Sei que a ideia parece confusa, peço desculpa por isso, mas realmente estou confuso sobre como fazer isto...

Muito obrigado pelo vosso tempo, ajuda e disponibilidade.

Um abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez o melhor fosse um sistema tipo MVC mas só com o View, pesquisa por esse modelo de programacao que dá jeito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A forma mais fácil é guardares numa cookie o nome da skin que o utilizador está a usar.

Para alternar crias uma página: alterar_skin.php?skin=... que faz mudar a cookie.

Agora a parte principal provavelmente deves ter o teu site com include Header.php ... include footer.php

Se for assim só tens de acrescentar:

include "Skins/". $_COOKIE["SkinActiva"] . "/header.php";

(por exemplo)

Mais dúvidas diz.

Não acho muito bom utilizar o esquema MVC só para resolver este problema. E a View do MVC não diz respeito a várias skins mas a vários tipos de output, Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

include "Skins/". $_COOKIE["SkinActiva"] . "/header.php";

Tendo um ficheiro que vai incluir outro file, com esse include, podia fazer um ataque RFI. ;)

Cuidado com o uso das variáveis que podem ser alteradas pelo cliente. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gostei dessa solução, MX+. Parece-me simples, para o header e para o footer.

O grande mal desse método é o facto de não funcionar muito bem com skins com aspectos diferentes... Imagina que o body em si é muito diferente, deixa de ter as coisas nos mesmos sítios... como farias nesse sentido?

djthyrax, que aconselhas então, para prevenir essa situação?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, que aconselhas então, para prevenir essa situação?

if($_COOKIE["SkinActiva"] == 'azul'){
    include "skinazul.php";
}elseif($_COOKIE["SkinActiva"] == 'verde'){
    include "skinverde.php";
}else{
    include "skinnaoexiste.php";
}    

// ou

switch($_COOKIE["SkinActiva"]){
    case "verde":
        include "skinverde.php";
        break;
    case "azul":
        include "skinazul.php";
        break;
    case "rosa":
    case "violeta":
        include "skinrosaOUvioleta.php";
        break;
    default:
        include "skinInvalida.php";
}

O grande mal desse método é o facto de não funcionar muito bem com skins com aspectos diferentes... Imagina que o body em si é muito diferente, deixa de ter as coisas nos mesmos sítios... como farias nesse sentido?

skin_exemplo.html:

<html><body><div id="header"><!-- { template -- header } --></div><!-- { template -- corpo } --></body></html>

Processamento:

function getTemplate($skin = 'skin_exemplo.html'){
    return file_get_contents("skin_exemplo.html");
}
function changeTemplate($item, $value, &$output){
    $output = str_ireplace("<!-- { template -- $item } -->", $value, $output);
}
$output = getTemplate();
changeTemplate("hEaDeR", "HAI!", $output);
changeTemplate("corpo", "LOLCODE WARNING!\n<br />ACHTUNG!", $output);

Not tested.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, estou a perceber a ideia.

Só me falta tirar umas dúvidas.

Nesse tal ficheiro, skinazul.php, por exemplo, faria mais includes, para incluir as funções todas em outros ficheiros, como por exemplo os textos, os conteúdos MySQL, os títulos das páginas, as keywords, etc? Ou isso ficaria no ficheiro principal, no ficheiro que tem o código que referiste?

Pensei em ter um index.php, que vai ter os conteúdos gerais do site e vai fazer include a um functions.php e a um skin.php. Esse skin.php é que irá fazer a selecção e uso de skins, o functions.php irá conter os titles, as keywords, o código para acesso à base de dados, etc... Na skin em si, estava a pensar dividir em 3 partes, em 3 ficheiros, o header, body e footer, em cada uma das skins que venha a fazer. Que acham?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, estou a perceber a ideia.

Só me falta tirar umas dúvidas.

Nesse tal ficheiro, skinazul.php, por exemplo, faria mais includes, para incluir as funções todas em outros ficheiros, como por exemplo os textos, os conteúdos MySQL, os títulos das páginas, as keywords, etc? Ou isso ficaria no ficheiro principal, no ficheiro que tem o código que referiste?

Acrescentei coisas ao meu post. Anyway, no primeiro [ code], era para fazeres coisas diferentes com skins diferentes. No segundo [ code], já é para fazeres tudo no main file. :(

Pensei em ter um index.php, que vai ter os conteúdos gerais do site e vai fazer include a um functions.php e a um skin.php. Esse skin.php é que irá fazer a selecção e uso de skins, o functions.php irá conter os titles, as keywords, o código para acesso à base de dados, etc... Que achas?

Faz como preferires. Desde que te consigas orientar, all good. ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também editei umas coisas, se puderes dar a opinião, agradecia ;) As minhas dúvidas neste momento são mais teóricas, do que práticas :(

obrigadão pela ajuda toda até ao momento

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também editei umas coisas, se puderes dar a opinião, agradecia ;) As minhas dúvidas neste momento são mais teóricas, do que práticas :(

obrigadão pela ajuda toda até ao momento

Já tinha editado o post para esse teu edit ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL. É o que dá escrever em simultâneo ;)

Mais uma vez obrigadão :(

De qualquer forma, mais opiniões sobre a melhor forma de estruturar tudo são bem vindos ;)

Até vou mandar aqui mais uma dúvida para o ar, que até pode ser boa para o futuro, para mais pessoas, além de mim: Já pensei em fazer o esquema todo através de classes, mas não consigo fazer a mínima ideia de qual a estrutura das mesmas, como iria fazer tudo. Na prática sei implementar e usar classes, mas na teoria, ainda tenho algumas dificuldades em fazer o esquema todo, por ter pouca prática com classes... Alguma ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na minha opinião não haveria muito benefício em usar classes. Anyway, o Nazgulled fez na penultima edição da Revista PROGRAMAR um artigo sobre templates em PHP, podes dar lá uma olhada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yap o meu post foi muito rápido. com as recomendações de segurança do dj e com umas noções de tutorias consegues fazer tudo á maneira.

Ajuda continua a postar por aqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas pessoal!

Surgiu-me uma dúvida!

Como vocês fariam uma pesquisa a uma DB MySQL, com várias notícias, aparecer numa página, adaptada a cada skin que os users escolham, mesmo que o aspecto da página mude com cada skin, do tipo, se as notícias numa skin aparecessem na vertical (umas em cima das outras), e noutra skin na horizontal, com 3 ou 4 notícias lado a lado, como por exemplo destaques?

A ideia é a pesquisa na DB e o resultado final facilmente aparecerem na página, de acordo com a skin escolhida por cada user que estiver a ver a página...

Estou a fazer esse esquema com placeholders, para definir onde ficaria o cabeçalho, menu, etc... A mesma situação referida acima se pode fazer nos menus, pois cada skin terá menus apresentados de forma diferentes, mas serão os mesmos e dinâmicos.

Obrigado e um abraço

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