Redimensionar visualização da imagem via template

  • Identifique-se para criar novos tópicos neste fórum
  • Visitantes anônimos não podem postar neste fórum
Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

amigos,

Gostaria de saber se alguém sabe como modificar o tamanho da imagem em sua mostração, via template para que não "quebre" o theme.

Eu consigo redimesionar a imagem para um tamanho fixo (por exemplo 200 pixels de largura) mas o problema é quando a imagem é menor do que o definido no template. Ai a imagem perde a definição.

Gostaria de redimensionar a imagem somente se ela tiver a largura maior que 200 pixels. Se for menor não faz nada.

Já quebrei a cabeça, porem não consegui colocar um if no template.

Abraços.

Ricardo  Membro   Postagens: 172

tem uma função no PHP que se chama getimagesize

Com ela você pode pegar referências para tamanho, largura, altura, etc.

Adaptando um exemplo do portal php.net


$imagem = array_values(getimagesize('imagem.jpg'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
If($largura > 200)
{
// faca aqui o redimensionamento que você quer.
}
Else.
// coloque aqui o "padrao" para a imagem.

?>


Este código pode ser inserido diretamento no seu theme.html, ok?

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

olá RedEye

Usei a dica que você me mandou e o código ficou assim:


$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
If($largura > 440)
{
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
}
Else {
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}> }
?>

Só que na visualização agora tenho a imagem duplicada, uma ao lado da outra, sendo que uma delas tem a largura de 440 e a outra de 800!

Será que tem algo errado no código?

Ricardo  Membro   Postagens: 172

tens como me mandar esta parte do tema para eu dar uma olhada.
Somente neste código não consigo ver se algo redundante... teoricamente está certo assim, mas pode ser que tenha uma outra referência para a imagem no tema que está te passando desapercebida

Luix  Iniciante   Postagens: 1

olá pimps,

O RedEye deu a dica de como fazer em php, mas para o PHP ser interpretado como PHP diretamente no template tem que ser entre as marcações apropriadas.

Em vez de utilizar as marcações < ?php ... ?> utilize as smarty tags <{-php}> e <{-/php}> (sem os traços "-")

[editado]

Exemplo:




<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
If($largura > 440)
{
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
}
Else {
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>
}
<{/php}>


[/editado]

é isso

Ricardo  Membro   Postagens: 172

é verdade.
Esqueci deste detalhe...rs

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

Fala Luix

Entendi a ideia... mas não funcionou.

Deu página branca agora.

=/

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

Fala RedEye

Não estou mudando o tema, mas sim o template do módulo RMMS (Mini Shop - XOOPS México).

Este trecho do código é da página de apresentação do produto. Quero que se a imagem for maior que 440 px seja redimensionada para 440 e se for menor permaneça com seu tamanho original.

Obrigado pela força.

Ricardo  Membro   Postagens: 172

tens como colar o código do template aqui para eu poder ver?
Não tenho este módulo na minha máquina aqui

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54
<p>Está não mão!<br /><br /><br /><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><h2><a href="index.php"></a><br /><br /></h2></td></tr></table><br /><br /><br /><br /><table border="0" align="center" cellpadding="0" cellspacing="1" class="outer"><tr><th colspan="2"></th></tr></table><br /><br /><br /><br /><br /><br /><br /><br /> <br /><br /><br /><br /><br />O arquivo está totalmente modificado porque eu inclui uma série de campos adicionais na inclusão de um produto.<br /><br />Pelo que pude perceber o erro está na parte que eu deixei em negrito (estou vendo o manual do smarty e tentando modificar) porque quando eu apago essa parte do template não dá mais a tela branca (só que também não aparece a foto) =/</p>
Luix  Iniciante   Postagens: 1

olá pimps,


<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);

<{if $largura > 440}>
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
<{else}>
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>
<{/if}>

<{/php}>

Felipe, pelo que vi, o erro deve ser o que eu negritei e sublinhei acima.

A princípio, o código que vai dentro das tags <{php}> código PHP como indicado nos posts acima <{/php}> devem ser escritos como são em php.

A smarty tag <{if}> serve apenas para condicionais programadas pelo smarty.

é isso

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

opa Luix

Eu postei da forma como estava quando tentava fazer modificações já que no formato.


<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
If ($largura > 440){
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>}
Else{
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>}
<{/php}>


Dá página branca tb.

Tentei de todas as formas... mas sempre caio na página branca da morte

Ricardo  Membro   Postagens: 172

tente fazer o seguinte.
Como o template requer uma smarty tag para processar o PHP ela tem que iniciar e fechar com.

<{php}
Código que desejar em PHP puro mesmo.
{/php}

Ficando assim.

<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
If ($largura > 440){
<{/php}>
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
<{php}>
}
Else{
<{/php}>
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>
<{php}>
}
<{/php}>

O que eu reparei agora que onde colocastes o código em HTML não destes nenhum "echo" para processamento do código como HTML então isso deve estar gerando o seu erro de página branca.

Da forma que está escrito agora tem o código PHP sendo processado entre as marcações e processando o HTML somente de acordo com o critério do if.

Não esqueça de atualizar o módulo depois das alterações no template e veja se agora funciona, ok?

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

fala RedEye

Funcionou... a página branca sumiu, mas agora todas as imagens estão com 800 px de largura!

Juro que agora não entendi nada!

[editado]

Será que resolveria colocando echo para chamar os trechos em html? não sei a sintaxe do echo para testar... vou pesquisar aqui...

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

fuçando aqui descobri o por que as imagens ficaram com 800 pixels.

O módulo RMMS tem, em sua área administrativa, uma opção para se escolher o tamanho da imagem a ser apresentada. Pelo que percebi o módulo redimensiona a imagem para o tamanho escolhido no momento do upload.

Ou seja, como o meu estava preenchido com 800 pixels, quando fiz o upload das imagens elas foram redimensionadas e na apresentação eu "forçava" a se apresentarem com 440 pixels.

Quando fiz o código indicado pelos amigos acima, tirei a forma de "forçar" o redimensionamento e elas apareceram com o tamanho de 800 pixels de novo.

Pois bem, fiz os testes, deixando em branco o campo de tamanho na área administrativa. Agora as imagens aparecem com seu tamanho correto, mas o condicional ainda não está funcionando. Ou seja, se fizer o upload de uma imagem de 500 pixels de largura, ela está sendo apresentada com 500 pixels de largura.

Ou seja, o código informado pelo RedEye não gera nenhum tipo de erro, mas também não gera nenhum efeito

Abraços.

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

pergunta de leigo em php:

Não preciso declarar as variáveis $largura, $altura, $tipos, Satributos ?

Ricardo  Membro   Postagens: 172

não há necessidade de criar as variáveis, mas o que está me deixando curioso agora é outra coisa.
Ele está conseguindo pegar a imagem no seu código.
Acabei de criar o mesmo código para testar, mas em um arquivo PHP genérico e funciona, inclusive o redimensionamento.

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

se quiser testar é só acessar bancodemodelos.com

Tem lá as últimas inclusões... você vai ver que não está redimensionando... e o código está exatamente como você me passou.

=/

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

estava olhando a página do php.net sobre a função getimagesize()

Tentei alterar.

$imagem = array_values(getimagesize('<{$producto.img}>'));

Por.

$imagem = array_values(getimagesize("<{$producto.img}>"));

Com aspas duplas (segundo o php.net usado em referencias a URL) e deu a página branca da morte de novo.

Ricardo  Membro   Postagens: 172

uma outra opção... meio que abusando do código já que não haveria necessidade, mas na dúvida.

<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = getimagesize($imagem);
$largura = $imagem[0];
If ($largura > 440){
<{/php}>
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
<{php}>
}
Else{
<{/php}>
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>
<{php}>
}
<{/php}>

Insira apenas a parte em negrito, ok?

O array que é formado em $imagem é

$imagem[0] = largura.
$imagem[1] = altura.
$imagem[2] = tipo da imagem (jpg, png, gif, etc)
$imagem[3] = largura="xxx" altura="xxx"
$imagem[bits] = bits.
$imagem[channels] = canais.
$imagem[mime] = mime-type.

Vamos ver se agora vai, ok?

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

nada... continua no mesmo.

Cópia do código no meu template:


<{php}>
$imagem = array_values(getimagesize('<{$producto.img}>'));
List($largura, $altura, $tipo, $atributos) = ($imagem);
$largura = $imagem[0];
If ($largura > 440){
<{/php}>
<img src="<{$producto.img}>" border="0" width="440">

<{$producto.nombre}>
<{php}>
}
Else{
<{/php}>
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>

<{php}>
}
<{/php}>


Pelo que estou vendo no portal, apenas o trecho em negrito está sendo executado, o que me faz entender que o condicional está sendo aplicado como FALSO[/B]

Resta saber o por que... =/

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

ligando o debug do php:

Warning: xoopsOption[template_main] should be defined before including header.php in file /footer.php line 68

Warning: getimagesize(<{$producto.img}>) [function.getimagesize]: failed estou open stream: No such file or directory in file /templates_c/pimps-BDM^%%A9^A97^A97920E5%%db%3Armms_productos.html.php line 31

Warning: array_values() [function.array-values]: The argument should be an array in file /templates_c/pimps-BDM^%%A9^A97^A97920E5%%db%3Armms_productos.html.php line 31

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

ligando o debug do php:

Warning: xoopsOption[template_main] should be defined before including header.php in file /footer.php line 68

Warning: getimagesize(<{$producto.img}>) [function.getimagesize]: failed estou open stream: No such file or directory in file /templates_c/pimps-BDM^%%A9^A97^A97920E5%%db%3Armms_productos.html.php line 31

Warning: array_values() [function.array-values]: The argument should be an array in file /templates_c/pimps-BDM^%%A9^A97^A97920E5%%db%3Armms_productos.html.php line 31

Ricardo  Membro   Postagens: 172

ele não busca do banco as propriedades da imagem?
Dá uma olhada dentro do arquivo sql que acompanha o módulo e veja se já tem algum campo para largura/altura.

Pode ser uma opção para redimensionar.

Sobre o debug.
Parece que não acha o arquivo com a foto

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

arquivo sql que acompanha o módulo?

Você quis dizer no banco de dados do portal?

[editado]

O arquivo com a foto fica salvo (ou o módulo o busca) na pasta template_c?

Ricardo  Membro   Postagens: 172

do banco

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

no Banco de Dados está normal... está salvo direitinho.

Pelo que estou vendo, a função getimagesize() não está conseguindo abrir o arquivo (imagem) <{$producto.img}>

Pelo que entendi a variável smarty <{$producto.img}> representa o endereço da minha imagem.

A pergunta é: Dentro do trecho PHP a variável smarty <{$producto.img}> é lida como o endereço para a minha imagem?

Abraços

Luix  Iniciante   Postagens: 1

olá pimps,
Tendo em vista que o código está com dificuldade de ler a marcação <${producto.img}> acredito que você terá que fazer esse código dentro do próprio PHP do arquivo... no rmms/prods.php

Para isso inclua o código para que gere uma smart tag com o valor da largura.

Aí no template, dentro da marcação:


é isso

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

fala Luix tudo bem?

Vou tentar colocar o código dentro do arquivo prods.php apesar de não saber uma virgula de PHP, mas uma coisa me assustou desde antes de começar a tentar:

para isso inclua o código para que gere uma smart tag com o valor da largura...

Não faço a menor ideia de como gerar uma smart tag! rsrs

Luix  Iniciante   Postagens: 1

olá pimps,
Uma mamãozinho com açucar.

1) abra o arquivo /rmms/prods.php;

Na linha 47 inclua o seguinte código:

//A2 - Luix - XOOPS: incluindo paramentro width na imagem do produto.
List($largura, $altura, $tipo, $atributos) = getimagesize($img);
If($largura > 200)
{
// se maior que 200, cria width = 200 em forma de smarty tag.
$xoopsTpl->assign('imgwidth','200');
}
Else{
// se não for maior, ou seja menor, tamanho real.
$xoopsTpl->assign('imgwidth',$largura);
}
// fim da inclusao do paramentro


Apenas mude os valores 200 para o que você preferir.
Salve e feche.

2) abra o arquivo /rmms/templates/rmms_productos.html;

No seguinte trecho do código:
 
<img src="<{$producto.img}>" border="0">

<{$producto.nombre}>


Adicione o width="<{$imgwidth}>"

Ficando assim:
 
<img src="<{$producto.img}>" width="<{$imgwidth}>" border="0">

<{$producto.nombre}>


Sublinhei e negritei a adição.
Salve e feche.

3) atualize o módulo, limpe as templates, coisas do tipo... e já está funcionando.

Aqui funcionou... PHP 4.4.7, XOOPS 2.0.16

é isso

Felipe Aramuni  Regular De: São Paulo - Brasil  Postagens: 54

aeeeeeeeeeeeeee.

Luix você é fod...a.

Perfeito.

Funfando perfeitamente.

muito obrigado

Obrigado ao RedEye também que descobriu a raiz do problema.

Por isso que eu não largo o XOOPS por nada!

Luix  Iniciante   Postagens: 1

olá pimps,
Que bom que funcionou.

Então algumas considerações.

RedEye escreveu:

ele não busca do banco as propriedades da imagem?
Dá uma olhada dentro do arquivo sql que acompanha o módulo e veja se já tem algum campo para largura/altura.

Pode ser uma opção para redimensionar

Lembre-se que nas preferências do módulo RMMS há dois campos onde você define a largura máxima e a alturá máxima das fotos.

Esse opção redimensiona as fotos na hora do upload para o que estiver setado ali.

Caso você deixe marcado 400 (por exemplo), todas as fotos que você upar, terão 400 (de largura ou altura), então este hack vai funcionar parcialmente, porque a valor da variável $largura será sempre 400.

Para funcionar completamente a solução construída neste tópico, é preciso deixar sem nenhum valor setado naqueles campos.

Porém, quando você subir uma foto 1200x1000 ela vai subir normalmente e ocupar mais espaço na conta.

*************

Ah e essa solução fugiu um pouco do título do tópico... porque o redimensionamento ainda é feito pela template, mas o valor é obtido no script da página... Hehe.

é isso

  Pesquisa avançada






Entrada

Codinome:


Senha:





Perdeu a senha?  |Cadastre-se!


Quem nos visita
Há 43 visitantes neste momento... (14 na seção Fóruns)

Associados: 0
Anônimos: 43

outros...

Banner XOOPS Cube