Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pelo título parece confuso né? mas vou explicar: Bom, tenho uma lista de links em variaveis. ex.:
$lista1 = '
<li class="lista-num"><b style="text-transform:uppercase; text-decoration:none;">1ª Lista</b></li><li class="lista-num"><a href="[http://site.com](http://site.com)" rel="nofollow" target="lista">Nome Lista1</a></li>
<li class="lista-num"><a href="[http://site.com](http://site.com)" rel="nofollow" target="lista">Nome Lista2</a></li>
<li class="lista-num"><a href="[http://site.com](http://site.com)" rel="nofollow" target="lista">Nome Lista3</a></li>
<li class="lista-num"><b style="text-transform:uppercase; text-decoration:none;">1-1 Lista</b></li>
<li class="lista-num"><a href="[http://site.com](http://site.com)" rel="nofollow" target="lista">Nome Lista1</a></li>
<li class="lista-num"><a href="[http://site.com](http://site.com)" rel="nofollow" target="lista">Nome Lista2</a></li>';
$lista2...e por ai vai.. Agora para exibir os nomes das listas faço o seguinte:
1ª Verifico se ela existe:
if($lista1){
$listanum = 1;
if($lista2){
$listanum = 2;
if($lista3){
$listanum = 3;
if($lista4){
$listanum = 4;
if($lista5){
$listanum = 5;
}
}
}
}
}
2ª Crio um while para aparecer lista1, lista2...:
if($lista1 or $lista2){
$contador = 1;
while($contador <= $listanum){
$numlista = ($contador);
?>
<li class="lista<?php echo $numlista;?>">
<div class="icone-play1"><i class="fa fa-play"></i></div>
<div class="lst-num"><i><?php echo $numlista;?>ª Lista</i></div>
</li>
<?php $contador++;
}
}
?>
</ul>
</li>
3ª Agora faço a parte de mostrar a lista:
<?php if($lista1 or $lista2){ ?>
<li class="select-lst">
<div class="ico2"><i class="fa fa-play-circle"></i></div>
<div style="line-height:17px; padding:13px 0px 0px 8px; float:left; text-transform:uppercase;">
<span style="color:#ffffff; font-weight:400; font-size:14px; padding-left:1px;">Selecione a<br/>
<span style="font-weight:900; color:#ffffff; font-size:18px;">lista</span>
</span>
</div>
<div class="clear"></div>
<div class="sub-lst">
4ª Aqui vai sair o restultado da lista:
while($contador2 <= $temporadasnum){
$numlst = ($contador2);
5ª A minha idéia a partir daqui é a seguinte: quero exibir a lista, porém fazendo alterações no texto dela, queria colocar um link, como não consegui por um link em uma classe.. esse foi minha maneira gambiarra de fazer.. tentei usar uma imagem com opacidade 0(mesma imagem que tem no background da class lista-num. e usar map.. para isso tenho que criar um contador para mudar o margin top da imagem e outro para o map, para funcionar!..
Tentei contar quantas linhas tinha deu certo.. porém não consegui fazer com que o código se repetisse.. teria que fazer um código para ignorar as linhas inválidas para não dá erro na exibição! e também não teria o contador!
$nlista1 = count(explode("\r\n", $lista1));
$nlista2 = count(explode("\r\n", $lista2));
$nlista3 = count(explode("\r\n", $lista3));
$lst = 'nlista'.$numlst;
$lst = $$lst;
$numtop = $numlst+62;
$numlst = 'lista'.$numlst;
?>
<ul class="lista<?php echo $numlst;?>-code" name="lista<?php echo $numlst;?>-code" id="lista<?php echo $numlst;?>-code">
<?php
for ($i = 1; $i <= $lst;$i++)
{
$textoo = str_replace('<li class="lista-num">', '<img style="opacity:0;position:absolute;width:355px; height:62px; float:left; padding:22px 0px 0px 70px;margin-top:'. $numtop .'" usemap="#lst-map' . $numlst . $i . '" src="IMAGEM"><map name="lst-map'. $numlst . $i . '"><area shape="rect" coords="0,0,52,77" href="LINK"></map><li class="lista-num">', $$numlist);
$numtop++;
}
?>
<?php echo $textoo;?>
</ul>
<?php $contador2++; }} ?>
</div>
O problema é que o contador do for não funciona, quer dizer.. exibe só um resultado para todos.. preciso de números diferentes para poder funcionar o map!
Funcionou em parte.. porque apareceu o código, porém como é o mesmo número de margin top e o usemap só apareceu em uma posição!!
Se souberem outras maneiras de solucionar esse problema sem precisar dessa gambiarra toda.. ou se souberem solucionar com outra linguagem como script.. Infelizmente não sei nada de javascript e jquery!
*um dado importante: o sistema é wordpress!
Existe uma forma mais simples de fazer isso com jquery ou javascript?
Isso pode ser feito em qualquer linguagem. A ideia geral é a mesma
Outro detalhe, não utilize as keywords abaixo:
- AND;
- OR;Utilize os seus respectivos símbolos:
- &&;
- ||;
- !;
As keywords possuem uma precedência diferente dos símbolos. Simplificando, isso:
$true = true;
$false = false;
$teste = $false || $true;
var_dump($teste); \\ saída correta = true
É diferente disso:
$true = true;
$false = false;
$teste = $false OR $true;
var_dump($teste); \\ saída errada = false
Conforme a precedência, o símbolo '=' possuí uma precedência maior que a keyword OR mas menor que o símbolo ||. Ou seja, o código é traduzido da seguinte forma:
$teste = ($false || $true);
($teste = $false) OR $true;
Você pode ler mais sobre precedência de operadores em: http://www.php.net/manual/en/language.operators.precedence.phpEntão.. penei muito, pedi muita ajuda, muitos amigos ajudaram e cheguei em um resultado com erro no implode e na variavel lista2, tou usando localhost!!
Preferi mudar os nomes das variaveis de lista para temporadas ep, porque me ajudou a fazer o código!
$temporadas = array('lista1' => $lista1, 'lista2' => $lista2);
$temporadas = array_filter($temporadas);
$temporada = array_slice($temporadas,0);
$contemp = count($temporada);
$contempep = count($temporada);
function get_replace($i,$tempsep){
return '<img style="opacity:0;position:absolute;width:355px; height:62px; float:left; padding:22px 0px 0px 70px;margin-top:" usemap="#ep-map'.$tempsep.$i.'" src="LINK"><map name="ep-map'.$tempsep.$i.'"><area shape="rect" coords="0,0,52,77" href="LINK"></map>';
}
function gambiarra($vartemp, $tempsep = null){
$i = 1;
$linhas = explode("\n", $vartemp);
for($i=0 ; $i<sizeof($vartemp) ; $i++){
$linhas[$i] = str_replace('<li class="temp-num">', get_replace($i,$tempsep).'<li class="temp-num">', $linhas[$i]);
}
return implode("\n", $linhas);
}
$tempsep = 1;
while($tempsep <= $contempep){
echo "<ul class='temp".$tempsep."-code' name='temp".$tempsep."-code' id='temp".$tempsep."-code'>";
$vartemp = $temporada."['lista".$tempsep."']";
$vartemp = implode(",",$vartemp);
echo gambiarra($vartemp);
echo "</ul>";
$tempsep++;
}
O margin-top da imagem ta em negrito porque precido de um contador ali, não faço a minima ideia de como fazer, aliás, posso por dentro do for da funcao gambiarra.. não sei se vai da certo!
Esse é o codigo simplicado que consegui fazer, mas com erro.. não mostra o resultado dentro da lista!
A função sizeof deve contar o array, você está contando a string:
for($i=0 ; $i<sizeof($vartemp) ; $i++){
Provavelmente o for não está sendo executado.
Nesse seu caso, é até mais vantagem usar foreach:
foreach($linhas AS $key => $linha) {
Como o seu intuito é modificar o valor original do array, utilize referências
foreach($linhas AS &$linha) {
$linha = 'novo valor da linha';
}
você começou errado.
Não há por que usar $lista1, $lista2, $lista3...
Isso só vai gerar duplicação de código
Crie um array e rode um loop nele. Assim só um trecho de código vai atuar em todas as listas
$lista = [
'lista 1 aqui',
'lista 2 aqui'
];
Depois é só rodar um loop em $lista
Vai reduzir bem o seu código