2013-11-16 4 views
0

У меня есть сценарий новостей (cutephp), который создает записи новостей с 5 строками, идентификатором, датой публикации, резюме, заголовком и контентом.Заказ новостей по ID

Дата в настоящее время хранится в формате дневного месяца, что отлично подходит для меня, но в его нынешнем виде - если я создаю несколько сообщений в тот же день - заказ становится испорченным.

Сообщения создаются с помощью следующего кода:

форму на editarticle.php:

<ul> 

     <li> 
     <label for="title">Article Title</label> 
     <input type="text" name="title" id="title" placeholder="Name of the article" required  autofocus maxlength="255" value="<?php echo htmlspecialchars($results['article']->title)?>" /> 
     </li> 

     <li> 
     <label for="summary">Article Summary</label> 
     <textarea name="summary" id="summary" placeholder="Brief description of the article" required maxlength="1000" style="height: 5em;"><?php echo htmlspecialchars($results['article']->summary)?></textarea> 
     </li> 

     <li> 
     <label for="content">Article Content</label> 
     <textarea name="content" id="content" placeholder="The HTML content of the article" required maxlength="100000" style="height: 30em;"><?php echo htmlspecialchars($results['article']->content)?></textarea> 
     </li> 

     <li> 
     <input type="hidden" name="publicationDate" id="publicationDate" required maxlength="10" value="<?php echo $publicationDate; ?>" /> 
     </li> 


    </ul> 

Какие сообщения в admin.php:

function newArticle() { 

$results = array(); 
$results['pageTitle'] = "New Article"; 
$results['formAction'] = "newArticle"; 

if (isset($_POST['saveChanges'])) { 

// User has posted the article edit form: save the new article 
$article = new Article; 
$article->storeFormValues($_POST); 
$article->insert(); 
header("Location: admin.php?status=changesSaved"); 

} elseif (isset($_POST['cancel'])) { 

// User has cancelled their edits: return to the article list 
header("Location: admin.php"); 
} else { 

// User has not posted the article edit form yet: display the form 
$results['article'] = new Article; 
require(TEMPLATE_PATH . "/admin/editArticle.php"); 
} 

} 

Результаты вызываются с помощью:

function homepage() { 
$results = array(); 
$data = Article::getList(HOMEPAGE_NUM_ARTICLES); 
$results['articles'] = $data['results']; 
$results['totalRows'] = $data['totalRows']; 
$results['pageTitle'] = "Widget News"; 
require(TEMPLATE_PATH . "/hptest.php"); 
} 

и отображается с помощью:

<?php foreach ($results['articles'] as $article) { ?> 

<div class="four columns services first-column mobile-two"> 
        <h3 class="services-title" style="text-align:left"><a href="news.php?action=viewArticle&articleId=<?php echo $article->id?>"><?php echo htmlspecialchars($article->title)?></a></h3> 
        <p align="left"><?php echo htmlspecialchars($article->summary)?></p> 
<p align="left">Published By <i><a href="index.php#our-team">Jack</a></i> on <i><?php echo date('j F', $article->publicationDate)?></i></p> 
       </div> 


<?php } ?> 

Как бы идти о заказе результаты по ID по возрастанию? на данный момент упорядочение вроде перепутано, как можно видеть здесь: http://dev.pixxl.us/bwc/news.php?action=archive Хотя там нет временных меток - я могу сказать вам, что они самые старые и новейшие каждый день.

Заранее спасибо.

Edited, GetList:

public static function getList($numRows=1000000, $order="publicationDate DESC") { 
$conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles 
ORDER BY " . mysql_escape_string($order) . " LIMIT :numRows"; 

$st = $conn->prepare($sql); 
$st->bindValue(":numRows", $numRows, PDO::PARAM_INT); 
$st->execute(); 
$list = array(); 

    while ($row = $st->fetch()) { 
    $article = new Article($row); 
    $list[] = $article; 
} 
+1

это должно быть сделано в 'статье :: GetList)' метода (. В настоящее время должен существовать «ORDER BY publications_date ASC», и он должен быть «ORDER BY publicaions_date ASC, id ASC'. Может быть, вы должны опубликовать метод getList() 'вместо отображения материала. – steven

+0

Привет - Я добавил метод списка в нижней части вопроса. Но я попытаюсь внести изменения, которые вы указали, - я дам вам знать, если это сработает. – Jack

ответ

1

, кажется, что вам нужно просто изменить вызов GetList так:

$data = Article::getList(HOMEPAGE_NUM_ARTICLES, "publicationDate DESC, ID DESC"); 

я подозреваю, что ID это правильное название для ID-поля в вашей базе данных mysql.

Кстати: странно видеть реализацию PDO в сочетании с mysql_escape_string

+0

Это отлично работает. Спасибо. – Jack

Смежные вопросы