Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

sEnte

Transformar isto numa função

Mensagens Recomendadas

sEnte

estiver a codar isto

<?php
include_once('resources/init.php');
//$posts = (isset($_GET['id'])) ? get_posts($_GET['id ']) : get_posts();
$posts = get_posts(((isset($_GET['id'])) ? $_GET['id'] : null));
?>
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
 <!--[if It IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js%22></script>
 <![endif]-->
 <style>
  ul {list-style-type: none;}
  li {display: inline; margin-right: 20px;}
 </style>
 <title>My Blog</title>
</head>
<body>
 <nav>
  <ul>
<li><a href="index.php"> Index </a></li>
<li><a href="add_post.php"> Add a Post </a></li>
<li><a href="add_category.php"> Add a Category </a></li>
<li><a href="category_list.php"> Category List </a></li>
  </ul>
 </nav>
 <h1>My Awesome Blog</h1>
 <?php
 foreach ($posts as $post) {
  if (!category_exists('name', $post['name'])) {
$post['name'] = 'Uncategorised';
  }
 ?>

 <h2><a href="index.php?id=<?php echo $post['post_id']?>"><?php echo $post['title']; ?></a></h2>
 <p>Posted on: <?php echo date('Y-m-d H:i:s', strtotime($post['date_posted'])); ?>
in <a href="category.php?id=<?php echo $post['category_id']; ?>"><?php echo $post['name']; ?></a>
 </p>

 <div> <?php echo nl2br($post['contents']); ?></div>
 <menu>
  <ul>
<li><a href="delete_post.php?id=<?php echo $post['post_id']; ?>">Delete this post.</a></li>
<li><a href="edit_post.php?id=<?php echo $post['post_id']; ?>">Edit this post.</a></li>
  </ul>
 </menu>
 <?php
  }
 ?>
</body>
</html>

mas no entanto tenho aqui uma dúvida.

Como posso passar esta parte para uma função?

<?php
foreach ($posts as $post) {
if (!category_exists('name', $post['name'])) {
$post['name'] = 'Uncategorised';
}
?>
<h2><a href="index.php?id=<?php echo $post['post_id']?>"><?php echo $post['title']; ?></a></h2>
<p>Posted on: <?php echo date('Y-m-d H:i:s', strtotime($post['date_posted'])); ?>
in <a href="category.php?id=<?php echo $post['category_id']; ?>"><?php echo $post['name']; ?></a>
</p>
<div> <?php echo nl2br($post['contents']); ?></div>
<menu>
<ul>
<li><a href="delete_post.php?id=<?php echo $post['post_id']; ?>">Delete this post.</a></li>
<li><a href="edit_post.php?id=<?php echo $post['post_id']; ?>">Edit this post.</a></li>
</ul>
</menu>
<?php
}
?>

Não sei bem que parametros usar, se foi caso de usar algum

Editado por apocsantos
geshi

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Posso adicionar o que esta dentro do <menu> na função?

Sinceramente não me parece mas pronto


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Com as poucas funções que tenho lidado normalmente não levam com código HTML só por isso.


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

sim, não devias juntar HTML com PHP, mas como já tens isso tudo misturado, bem que podes continuar ...

ps : o não dever juntar só tem haver com facilidade de manutenção de código, não existe erro em juntar as duas coisas

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Sim eu percebi :P

Ainda estou a aprender xD por isso é normal esta salganhada toda xD

Estranhamente agora tenho outro problema...

Carrego em Edit Post e simplesmente recebo esta mensagem

Not Found
The requested URL /blog/edit_post.php was not found on this server.
Apache/2.2.22 (Ubuntu) Server at localhost Port 80

Ainda por cima o ficheiro está lá e o nome é o mesmo :S

Erro meu. afinal o nome do ficheiro está mail.

Eu tenho edit.post.php e deveria ser edit_post.php

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Aqui tens um exemplo do que o @HappyHippyHippo falou :

<?php
$html = '<h2><a href="index.php?id={{post_id}}">{{post_title}}</a></h2>
<p>Posted on: {{post_date}}
in <a href="category.php?id={{post_category_id}}">{{post_category_name}}</a>
</p>
<div>{{post_contents}}</div>
<menu>
<ul>
<li><a href="delete_post.php?id={{post_id}}">Delete this post.</a></li>
<li><a href="edit_post.php?id={{post_id}}">Edit this post.</a></li>
</ul>
</menu>';
foreach ($posts as $post)
{
if (!category_exists('name', $post['name']))
{
 $post['name'] = 'Uncategorised';
}

$search_replace = array(
 '{{post_id}}' => $post['post_id'],
 '{{post_title}}' => $post['title'],
 '{{post_category_name}}' => $post['name'],
 '{{post_category_id}}' => $post['category_id'],
 '{{post_date}}' => date('Y-m-d H:i:s', strtotime($post['date_posted'])),
 '{{post_contents}}' => nl2br($post['contents']),
);

$html_copy = $html;

foreach ($search_replace as $key=>$value)
{
 str_replace($key, $value, $html_copy);
}

echo $html_copy;
}
?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Forma interessante de ver as coisas. Não sabia que se podia fazer assim


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

então ficas a saber também que o str_replace aceita arrays de elementos o que daria para fazer:

/*
foreach ($search_replace as $key=>$value)
{
 str_replace($key, $value, $html_copy);
}
*/
str_replace(array_keys($search_replace), $search_replace, $html_copy);


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

<?php
$n_repetitions = 200;
$n_replaces = 200;

$for_time = 0.0;
for ($i = 0; $i < $n_repetitions; $i++)
{
   $start = microtime(true);
   for ($j = 0; $j < $n_replaces; $j++)
   {
       $html = '<h2><a href="index.php?id={{post_id}}">{{post_title}}</a></h2>
       <p>Posted on: {{post_date}}
       in <a href="category.php?id={{post_category_id}}">{{post_category_name}}</a>
       </p>
       <div>{{post_contents}}</div>
       <menu>
       <ul>
       <li><a href="delete_post.php?id={{post_id}}">Delete this post.</a></li>
       <li><a href="edit_post.php?id={{post_id}}">Edit this post.</a></li>
       </ul>
       </menu>';

       $search_replace = array(
           '{{post_id}}' => $post['post_id'],
           '{{post_title}}' => $post['title'],
           '{{post_category_name}}' => $post['name'],
           '{{post_category_id}}' => $post['category_id'],
           '{{post_date}}' => date('Y-m-d H:i:s', strtotime($post['date_posted'])),
           '{{post_contents}}' => nl2br($post['contents']),
       );

       foreach ($search_replace as $key=>$value)
       {
           str_replace($key, $value, $html_copy);
       }
   }
   $end = microtime(true);

   $for_time += $end - $start;
}

$rep_time = 0.0;
for ($i = 0; $i < $n_repetitions; $i++)
{
   $start = microtime(true);
   for ($j = 0; $j < $n_replaces; $j++)
   {
       $html = '<h2><a href="index.php?id={{post_id}}">{{post_title}}</a></h2>
       <p>Posted on: {{post_date}}
       in <a href="category.php?id={{post_category_id}}">{{post_category_name}}</a>
       </p>
       <div>{{post_contents}}</div>
       <menu>
       <ul>
       <li><a href="delete_post.php?id={{post_id}}">Delete this post.</a></li>
       <li><a href="edit_post.php?id={{post_id}}">Edit this post.</a></li>
       </ul>
       </menu>';

       $search_replace = array(
           '{{post_id}}' => $post['post_id'],
           '{{post_title}}' => $post['title'],
           '{{post_category_name}}' => $post['name'],
           '{{post_category_id}}' => $post['category_id'],
           '{{post_date}}' => date('Y-m-d H:i:s', strtotime($post['date_posted'])),
           '{{post_contents}}' => nl2br($post['contents']),
       );

       str_replace(array_keys($search_replace), $search_replace, $html_copy);
   }
   $end = microtime(true);

   $rep_time += $end - $start;
}

echo "number of replaces per repetition : ".$n_replaces."<br />\n";
echo "number of repetitions : ".$n_repetitions."<br />\n";

echo "for time : ".$for_time." (avg : ".($for_time / $n_repetitions)."<br />\n";
echo "rep time : ".$rep_time." (avg : ".($rep_time / $n_repetitions)."<br />\n";
?>

output 1ª exeecução:

number of replaces per repetition : 200

number of repetitions : 200

for time : 6.9224481582642 (avg : 0.034612240791321

rep time : 5.1335275173187 (avg : 0.025667637586594

output 2ª exeecução:

number of replaces per repetition : 200

number of repetitions : 200

for time : 6.8578011989594 (avg : 0.034289005994797

rep time : 5.0662922859192 (avg : 0.025331461429596

output 3ª exeecução:

number of replaces per repetition : 200

number of repetitions : 200

for time : 7.2880554199219 (avg : 0.036440277099609

rep time : 6.5037124156952 (avg : 0.032518562078476

output 4ª exeecução:

number of replaces per repetition : 200

number of repetitions : 200

for time : 6.9414403438568 (avg : 0.034707201719284

rep time : 6.3828184604645 (avg : 0.031914092302322

mais tarde poderei fazer um benchmark para um array de maior dimensão e com elementos extras inexistentes no texto a ser substituído.

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

o benchmark disso parece ser fixe, mas para o tipo de trabalho que faco se demorar mais umas centesimas de segundo nao ha mt stress. Agora se for pa uma cena grande convem que seja rapido.


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o benchmark disso parece ser fixe, mas para o tipo de trabalho que faco se demorar mais umas centesimas de segundo nao ha mt stress. Agora se for pa uma cena grande convem que seja rapido.

nota que a média calculada dos dois métodos é entre 0.025s e 0.035s, isto para 200 execuções, e cada execução é

- atribuição do texto à variável $html

- atribuição dos valores do array $search_replace

- subtituição


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MoshMage

então ficas a saber também que o str_replace aceita arrays de elementos o que daria para fazer:

/*
foreach ($search_replace as $key=>$value)
{
 str_replace($key, $value, $html_copy);
}
*/
str_replace(array_keys($search_replace), $search_replace, $html_copy);

Seria interessante fazer um benchmark aos 2, na altura fiquei na dúvida qual seria o mais rápido.

Eu devo ser o louco cá do sitio, mas eu uso "includes"; Li em algum sitio, quando estava a preparar a minha função de template, que a diferença entre replaces e includes era tão minima que mais valia usar o velho <?php echo $variavel; ?>.

Portanto, eu separo o html do php desta maneira:

PSEUDO CODE
$view = new view();
$view->titulo = "Secánevassefazia-secásku";
$view->cospe("template/index.php"); //cospe() = função que faz o include do html no ficheiro e o deita cá para fora depois d'o php estar feito

e depois na pasta template/index.php

<h1><?php echo $titulo ?></h1>

Editado por MoshMage

If all Else fails, use Else If;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Eu devo ser o louco cá do sitio, mas eu uso "includes"; Li em algum sitio, quando estava a preparar a minha função de template, que a diferença entre replaces e includes era tão minima que mais valia usar o velho <?php echo $variavel; ?>.

Portanto, eu separo o html do php desta maneira:

PSEUDO CODE
$view = new view();
$view->titulo = "Secánevassefazia-secásku";
$view->cospe("template/index.php"); //cospe() = função que faz o include do html no ficheiro e o deita cá para fora depois d'o php estar feito

e depois na pasta template/index.php

<h1><?php echo $titulo ?></h1>

E fazes bem em fazer includes. O exemplo que dei era só para se perceber a lógica. A diferença entre replaces e includes não interessa, o que interessa mesmo é se ficas com um template reusável ou não. Se misturares PHP nos templates, esses templates não só ficam restritos a essa linguagem como ficam restritos ao sistema que estiver por trás, e isso faz com que seja mais difícil de manter o código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Estive a olhar melhor isto e surgiu-me um dúvida. será que vale mesmo criar uma função do código que postei? Não me parece que seja valha muito a pena criar uma função quando a maioria do código é HTML


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

a única razão que levaria a criar um função é a sua utilização em múltiplos casos

é tua intenção chamar a função mais que uma vez ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sEnte

Ela neste momento está a ser chamada em duas páginas diferentes,

Uma mostra a id do titulo e a outra mostra a id da categoria.


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.