Я хотел бы, чтобы последний пост показывался полностью, а не обрезался, но тогда остальные посты будут обрезаны. Я не уверен, как это сделать, вот и я!
Вот немного кода!
<div id="news">
<?php
$query=mysql_query("SELECT NewsID, Title, Content, Author,
date_format(Date, '%m/%d/%y') AS Date
FROM news ORDER BY NewsID DESC LIMIT 2");
while($row=mysql_fetch_assoc($query)){
echo "<div class=\"news_item\">
<div class=\"title\">
<a href=\"article.php?newsID=$row[NewsID]\">$row[Title]</a>
</div>
<div class=\"date\">
Posted: $row[Date] by $row[Author]
</div>
<div class=\"news_content\">
<p>".trimNewsContent($row[Content])."</p>
</div>
</div>";
}
?>
</div>
Прежде всего: не использовать mysql_
функции, но mysqli_
или же PDO
, mysql_
функции устарели несколько лет назад и больше не поддерживаются в самых последних версиях PHP.
Есть несколько способов, описанных в ответах на этот вопрос о том, как определить последнюю строку набора результатов.
Я не буду давать решение на основе устаревших mysql_
функции; Вы должны сначала преобразовать свой код.
Если вы идете на mysqli_
и получить связь в $ жулик, тогда вы можете сделать это:
$query = mysqli_query($con, "SELECT NewsID, Title, Content, Author, date_format(Date, '%m/%d/%y') AS Date FROM news ORDER BY NewsID DESC LIMIT 2");
// fetch all rows
$rows = mysqli_fetch_all($query); // pass MYSQLI_ASSOC as 2nd argument if needed
foreach($rows as $i => $row) {
$content = $i == count($rows)-1 ? $row['Content'] : trimNewsContent($row['Content']));
echo ".... // etc
$content
....// etc
";
}
Если цель состоит в том, чтобы обработать первую запись по-другому, просто измените условие соответствующим образом:
$content = $i == 0 ? $row['Content'] : trimNewsContent($row['Content']));
Это предположение, что последний — это ваш первый результат, который основан на запросе.
Вам нужно условие и способ узнать, когда обрезать, так что вне вашего цикла while добавьте:
$shouldTrim = false; //Sine the latest is your first item you do not want to trim first
Затем в верхней части цикла
$content = "";
if($shouldTrim){//Anything but the latest
$content = trimNewsContent($row[Content]);
} else { //This is your latest
$content = $row[Content]; //output to full content
$shouldTrim = true; //Set this to true going forward will trim
}
Теперь вы можете сделать
<p>".$content."</p>
Это как сказал Марк Б и ботаник. Вам нужно знать, где находится последний пост. Один из способов сделать это:
$query2 = mysql_query("SELECT count(*) AS nb_news FROM news");
$nbNews = mysql_fetch_array($query2);
При этом вы знаете, сколько у вас новостей.
Перед вами пока:
$i = 0;
Сразу после вашего приращения $ i: $i++;
Затем проверьте, равен ли $ i количеству новостей, если это так, вы находитесь в последнем сообщении:
if($i == $nbNews['nb_news'])
{
$content = $row[Content];
}
else
{
$content = trimNewsContent($row[Content]);
}