Diskuze: Problém s výpisem příspěvků

PHP PHP Problém s výpisem příspěvků American English version English version

Avatar
Crrack
Člen
Avatar
Crrack:

Ahoj potřebuju pomoct podle tutorialů a knížky si dělám blog, ale příspěvky se mi zobrazují od nejstaršího po nejnovější. Potřeboval bych to prohodit. Aby na vrch byly ty nejnovější.
Zde je kód:

public function extractPosts() {
  $posts = $this->db->dbselect('posts', array('*'));
  foreach ($posts as $key => $post) {
    $posts[$key]['content'] =
      \Michelf\Markdown::defaultTransform($post['content']);
  }
  $template = 'list-posts.php';
  include_once 'frontend/template/' . $template;
}

a poté jen foreach na vypsaní:

<?php require_once 'inc/header.php'; ?>
<?php foreach ($posts as $post): ?>
  <h3><?php echo (!empty($post['title']) ?
    htmlspecialchars($post['title']) :
    'Příspěvek #' . $post['id']); ?></h3>
  <h3><?php echo (!empty($post['image']) ?
    htmlspecialchars($post['image']) :
    'Příspěvek #' . $post['id']); ?></h3>
  <p><?php echo implode(' ', array_slice(explode(' ',
    strip_tags($post['content'])), 0, 10)); ?> [...]</p>
  <a href="<?php echo $this->base->url."?post-id=".$post['id']; ?>"
    class="btn btn-primary">Podrobnosti</a>
  <hr/>
<?php endforeach; ?>
<?php require_once 'inc/footer.php'; ?>

Tady je ještě část souboru pro databazi.

public function dbselect($table, $col, $term = NULL) {
  $colsSQL = implode(', ', $col);
  $termSQL = '';
  $parameters = array();
  if (is_array($term)) {
    $i = 0;
    foreach ($term as $col => $value) {
      if ($i == 0) {
        $termSQL .= " WHERE `$col` = ?";
      } else {
        $termSQL .= " AND `$col` = ?";
      }
      $parameters[$i] = $value;
      $i++;
    }
  }

  $query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL);
  try {
    $query->execute($parameters);
    $records = $query->fetchAll(PDO::FETCH_ASSOC);
  } catch (PDOException $e) {
    echo $e->getMessage();
    $records = false;
  }

  $query->closeCursor();
  return $records;
}

Děkuju moc za jakoukoliv pomoc :-)

 
Odpovědět 13. dubna 16:30
Avatar
mayo505
Redaktor
Avatar
mayo505:

no s týmto kódom to neni až také jednoduché, lebo máš jednu metódu ktorá vykonáva všetky selecty.
Jedno riešenie je pridanie nepovinného parametru funkcii dbselect a jeho použitie vo forme sql klauzuly order by tu

$query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL);
 
Nahoru Odpovědět  +1 13. dubna 16:41
Avatar
Crrack
Člen
Avatar
Odpovídá na mayo505
Crrack:

Můžeš mi to prosím napsat jak to sepsat. Nějak i při hledaní jsem na to furt nepřišel. Já se PHP moc nevěnuji.

 
Nahoru Odpovědět 13. dubna 22:19
Avatar
Odpovídá na Crrack
Dominik Klapuch:

Ten kód je moc divokej :) Nejlehčí budeš mít, když do metody dbSelect přidáš další parametr v podobě $orderBy a ten připojíš za $termSql.

V podstatě nějak takto:

public function dbselect($table, $col, $term = NULL, $orderBy = null).......
$query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL . $orderBy);.....
dbSelect('tabulka', 'sloupce', 'nevim', 'ORDER BY datum DESC');
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 13. dubna 23:15
Kód a data patří k sobě.
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Crrack
mayo505:

najľahšie to bude tak ak píše Dominik :)

 
Nahoru Odpovědět 14. dubna 0:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.