1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

PHP editar menu - mudar ordem,...

Discussão em 'Web Development' iniciada por eRKULIX, 8 de Abril de 2008. (Respostas: 14; Visualizações: 1812)

  1. eRKULIX

    eRKULIX Suspenso

    Bom dia!

    Estou a tentar fazer a edição de um menu apartir de um área de background, gostaria que pudesse fazer as seguintes opções: mudar a ordem dos items e colocar ou não determinado link visível.

    Penso que para fazer isto a melhor opção seria criar algo que mudasse o id de determinado item de mudo a que este mudasse a sua posição. Para o outro ponto talvez queria um campo de visibilidade em que 1 o menu estaria visível e 0 o menu não seria visível, depois ao chamar os campos filtrava-se os resultados somente aparecendo os campos com 1.

    Há formas mais simples/melhores de fazer isto?

    No segundo ponto não me parece que tenha problemas para o realizar, mas em relação a como mudar a id do item ai estou um pouco perdido, como poderei fazer isso, alguma sugestão?


    Obrigado!
     
  2. hostmake

    hostmake Power Member

    Devo ser eu, mas não percebi nada :confused:
     
  3. eRKULIX

    eRKULIX Suspenso

    Bem vou tentar então explicar-me melhor (de facto o primeiro texto está bastante confuso e mal escrito, é das horas).


    Exemplo de um menu: Home, About, Contact

    Um menu que se encontra num base de dados,

    algo assim:

    ID NAME LINK VISIBLE
    1 Home home.php 1
    2 About about.php 1
    3 Contact contact.php 1



    Gostaria de ter um área de edição em que pudesse fazer duas coisas:

    - um das quais mudar a ordem do menu para por exemplo: Home, Contact, About

    - outra ter a hipótese de colocar determinado item invisível, ficando assim: Home, Contact


    Para a primeira questão pensei em puder mudar a id dos itens.

    Para a segunda pensei em colocar um campo que seria a visibilidade onde 1 seria visível e 0 não. Assim ao chamar os resultados chamava apenas os iguais a 1.
     
    Última edição: 8 de Abril de 2008
  4. nosf

    nosf Power Member


    $query_menu = "SELECT * FROM menu WHERE visible = 1";
    $result_menu = mysql_query($query_menu) or die('Erro na query: ' . mysql_error());
    $row_menu = mysql_fetch_assoc($result_menu);
    $totalRows = mysql_num_rows($result_menu);

    echo "<table>";
    echo "<tr>";

    while ($row_menu = mysql_fetch_assoc($result_menu)){
    echo "<td>";
    echo "<a href='".$_SERVER['PHP_SELF']."/".$row_menu['LINK']."'>".$row_menu['NAME']."</a>";
    echo "</td>";
    }

    echo "</tr>";
    echo "</table>";

    Não testei o código, mas vê se é isto de que estás a precisar.
     
  5. eRKULIX

    eRKULIX Suspenso

    Obrigado, mas onde estou com problemas (isto é não sei como fazer) é na parte de mudar a ordem dos ID na base de dados.
     
  6. hostmake

    hostmake Power Member

    Fazes um count á quantos links tens na base de dados, e com esse count crias dentro de uma form selects.

    algo do do estilo:

    <select name="ordem_1">
    <select name="ordem_2">
    <select name="ordem_3">

    e dentro de cada, corres o while dos links, e metes o ($i do loop) que está no ordem_$i, selected.
    e ao fazer update, actualizas os campos todos, espero que me tenha feito entender.
     
  7. DanielGomes

    DanielGomes Power Member

    O mais simples é criares um campo "ordem" ou "peso" e atribuis um número de 1 a 100, os números maiores ficam no fundo do menu, os menores mais em cima. Podes fazer com uma simples caixa de texto. Não tem nada a ver com o ID.

    SELECT * FROM menu ORDER BY peso;
     
  8. hostmake

    hostmake Power Member

    Era o que eu estava a dizer, com um campo ordem, mas de forma a ele ter as selects que ele queria.

    Ex:
    PHP:
    $numero_links MYSQL_QUERY("SELECT * FROM links");
    $numero_links mysql_num_rows($numero_links);

    //Criar selects da form
    for ($i 1$i <= $numero_links$i++) {
    echo 
    "<select name='ordem_".$i."'>";

    //Listar os links
    while ($nlink mysql_fetch_assoc($numero_links)) {
       if (
    $nlink['ordem'] == $i)
          echo 
    "<option value='".$nlink['id']."' SELECTED>".$nlink['nome']."</option>";
       else
          echo 
    "<option value='".$nlink['id']."'>".$nlink['nome']."</option>";
    }

    </
    select>
    }

     
  9. nosf

    nosf Power Member


    Acho que depende da utilização que ele dá ao ID do registo.
    Se lá na estiver tabela só para ordenar os registos podem bem definir o campo ID como inteiro sem autoincrement e editar á mão os IDs.
    Depois pode usar á vontade o ORDER by ID sem ocupar espaço desnecessário com um novo campo "peso".

    Quanto a mim isso não faz o minimo de sentido.
    Porque motivo fazes dois loops ???
    Se o objectivo dele é sacar os registos da tabela e mostra-los por uma ordem.
    1 WHILE chega e sobra.

    Estás a complicar sem necessidade.
     
    Última edição pelo moderador: 11 de Abril de 2008
  10. hostmake

    hostmake Power Member

    o objectivo era clarificar o código para ele, separando-o tbh.
     
  11. DanielGomes

    DanielGomes Power Member

    Porque ter ou não ter um campo "peso" a mais é irrelevante em termos de espaço para algo tão pequeno quanto uma tabela de menus.

    Depois o id é chave do registo e não deve ser mudada de qualquer maneira e muito menos por uma razão como esta. Pela tua lógica o que não faz falta na tabela é mesmo o campo ID. Mas pronto há muitas maneiras de alcançar o mesmo objectivo.
     
  12. nosf

    nosf Power Member

    Pela "minha lógica" o campo ID pode servir tanto de "peso" como continuar a servir de chave.
    Pois caso ele vá criar backoffice para introduzir os links na tabela, pode muito bem fazer um ID=max(ID)+1 antes de inserir um link novo e ter o ID como "peso" e chave ao mesmo tempo, além de ainda poder utilizar o ID futuramente como numero de referência para referênciar áreas para o site de acordo com aquela tabela sem ter que a vir a alterar.

    A "minha lógica" é simples e directa, ou seja maximizar a eficacia dos campos que estão na tabela, e por esse mesmo motivo não vejo a tua lógica de dizeres que pela minha o ID nem faz falta.

    Mas concordo contigo "há muitas maneiras de alcançar o mesmo objectivo".
     
  13. eRKULIX

    eRKULIX Suspenso

    Okay, fiz o menu ordenado por um campo que criei para esse fim (denominado order), também já coloquei a função de ser possível escolher se um item está ou não visível (através do campo visible).
    No entanto estou com um problema na alteração do menu, no que respeita à ordem do mesmo.
    Isto porque que se por exemplo tenho o menu: 1, 2, 3, 4, 5 e quero mudar o 5 para 2 mudo o valor do campo order, mas o antigo 2 continua a ser 2 ficando assim com dois items com esse valor.
     
  14. DanielGomes

    DanielGomes Power Member

    Então tens de mudar o valor do antigo. Uma forma mais simples de não teres de trocar todos é, em vez de 1,2,3,4,5 usares, 10,20,30,40,50. Se queres mudar o 50 para antes do 20 podes usar 11 (exemplo) e tens o caso arrumado.

    Se quiseres fazer as coisas de outra forma, podes usar um sistema de setas pra cima e setas pra baixo e ordenas os campos assim, mas aí vais ter de puxar um bocadinho pela cabeça.
     
  15. hostmake

    hostmake Power Member

    Isso é "batota", não sou nada apologista desses "truques" :P

    É óbvio que se ele quer alterar um campo, o outro valor também tem que ser alterado, isto é tao simples com JavaScript, e depois se quiseres por AJAX então fica um mimo, ao mudares um, fazes com que mude os outros campos sozinho, fazes um POST geral, e um foreach.
     

Partilhar esta Página