блок статей

Автор Lysyj, 14 ноября 2008, 16:16:45

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Lysyj

я на оф сайте ТП взял такой код

// Articles By Date
// September 25, 2008 | Tim Antley
// Version II.5 (The Ken Edition)

// Displays x Number Of Approved Articles Per Page / Sorted By Date (Latest To Oldest)
// Simple Pagination In Table Output Form
// Retrieve URL Variables To Parse
// Restrictive Category Selection

global $db_prefix, $scripturl, $context;

// script variables for customization
$show_date        = true;        // show date in table; true or false
$show_views        = true;        // show number of views for each article
$show_author    = false;        // show name of author in table; true or false
$show_header    = true;        // show table header w/ field values
$use_theme_css    = true;    // use theme CSS or set using colors below

// will use numeric values if $use_theme_css set to false
$css_row        = '999999';    // background color for first row; 999999 = light gray
$css_row_alt    = '666666'; // alternating row color; 666666 = dark gray

$link_width        = 60;        // max length of article name in table
$link_target    = '_blank';    // target for article link; _self = same window, _blank = new window
$link_color        = 'FF9900'; // hyperlink color; actually gets set in custom CSS block below

$limit            = 20;        // number of results to display per page

$cats_allowed    = array(1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 20);    // valid category numbers; '0' = all categories; separate values with commas

$page            = '';        // set to article # that this script is in

// no need to edit past this point! warranty void if modified...

$article        = array();
$limits            = array(10, 20, 30, 40, 50);
$row_class        = '';

// put URL variables into array
parse_str($_SERVER['QUERY_STRING'], $url_vars);

$start            = 0;        // set to 0; will check for URL value soon

// check for 'cat' and 'limit' values via GET first; use POST value instead, if set
if(isset($_GET['cat']))        $category    = $_GET['cat'];   
if(isset($_POST['cat']))    $category    = $_POST['cat'];

if(!isset($category))        $category    = $cats_allowed[0];    // default to first value if not set through POST or URL
if(!in_array($category, $cats_allowed)) $category    = $cats_allowed[0]; // validate category against allowed categories

if(isset($_GET['limit']))    $limit        = $_GET['limit'];
if(isset($_POST['limit']))    $limit        = $_POST['limit'];

if($limit < 0 || !in_array($limit, $limits)) $limit    = 10;

$url_link        = '';        // set to null

// build url string from array (exclude script variables)
foreach($url_vars as $key => $value)
{
    $key    = strtolower($key);    // restrict to lowercase
   
    if($key != 'page' && $key != 'start' && $key != 'cat' && $key != 'limit')
    {
        $url_link    .= $key . '=' . $value . '&';
    }   
}

$url_link        .= 'limit=' . $limit . '&';

// custom CSS block to set style
if(!$use_theme_css)
{
    echo '
    <style type="text/css">
    .article_nav a:link, a:hover
    {
    text-decoration: underline;
    color: #' . $link_color . ';
    }
    </style>';

    $css            = 'style=background: #';
}
else
{
    $css            = 'class="windowbg';
    $css_row        = '';
    $css_row_alt    = '2';
}

// crude way to get page name; $context SHOULD have this somewhere...
if(!empty($_GET['page']))    $page    = $_GET['page'];

// get starting point from URL and set to integer value; already defaulted to 0 if not set
if(!empty($_GET['start']))    $start    = intval($_GET['start']);

$query    = db_query(
    "SELECT id, value1, type
    FROM {$db_prefix}tp_variables
    WHERE type = 'category'
    ", __FILE__, __LINE__);

$cats[0]    = array('id' => 0, 'cat_name' => 'Без категории'); // pre-populate generic category
   
while ($row = mysql_fetch_assoc($query))    // populate category array
{
    $cats[]    = array(
                'id' => $row['id'],
                'cat_name' => $row['value1'],
                );
}

// create drop-down list by parsing against allowed categories
if(count($cats_allowed) > 1 || !in_array(0, $cats_allowed))
{
    foreach($cats as $key => $value)
    {
        if(!in_array($value['id'], $cats_allowed))
        {
            unset($cats[$key]);
        }
    }
}

if($category != 0)
{
    $query        = db_query(
    "SELECT *
    FROM {$db_prefix}tp_articles
    WHERE approved = 1
    AND category = {$category}
    ", __FILE__, __LINE__);
}
else
{
    $query        = db_query(
    "SELECT *
    FROM {$db_prefix}tp_articles
    WHERE approved = 1
    ", __FILE__, __LINE__);
}




$total_rows    = mysql_num_rows($query); // get number of articles approved

if($category != 0)
{
    $query        = db_query(
    "SELECT id, value1
    FROM {$db_prefix}tp_variables
    WHERE id = {$category}
    ", __FILE__, __LINE__);

    $cat_desc    = mysql_fetch_array($query);
    $cat_desc    = $cat_desc['value1'];
   
    if(empty($cat_desc))    $cat_desc    = 'Описание категории отсутствует';

    $query        = db_query(
    "SELECT id, date, subject, shortname, author, views, category
     FROM {$db_prefix}tp_articles
     WHERE approved = 1
     AND category = {$category}
     ORDER BY date DESC
     LIMIT {$start}, {$limit}
     ", __FILE__, __LINE__);

}
else
{
    $cat_desc    = 'Категорию не найдено';
   
    $query        = db_query(
    "SELECT id, date, subject, shortname, author, views, category
     FROM {$db_prefix}tp_articles
     WHERE approved = 1
     ORDER BY date DESC
     LIMIT {$start}, {$limit}
     ", __FILE__, __LINE__);
}

while ($row = mysql_fetch_assoc($query))    // place article info into $article array
{
    $article[]    = array(
                    'id' => $row['id'],
                    'date' => $row['date'],
                    'subject' => $row['subject'],
                    'shortname' => $row['shortname'],
                    'author' => $row['author'],
                    'views' => $row['views'],
                    'category' => $row['category'],
                    );
}

// display category select menu form w/ submit button
echo '</p><p align="center"><img src="http://limwap.info/tp-images/Image/user_1_2.gif" alt="limwap"/></p><p><font color="green">Выбрать категорию</font><br/>';
echo '<form name="article_menu" method="POST" action="' . $scripturl . '?' . $url_link . 'page=' . $page . '">';
echo '<select name="cat">';

foreach($cats as $item)
{
    echo '<option ' . ($item['id'] == $category ? 'selected ' : '') . 'value="' . $item['id'] . '">' . $item['cat_name'] . '</option>';
}
echo '</select> &nbsp;';

echo '<select name="limit">';
foreach($limits as $limit_sel)
{
    echo '<option ' . ($limit == $limit_sel ? 'selected ' : '') . 'value="' . $limit_sel . '">' . $limit_sel . '</option>';
}
echo '</select> На странице ';

echo '<input type="submit" name="Submit" value="Изменить">';
echo '</form>';
echo "<div style=\"text-align: right; font-weight: bold; color: rgb(255, 0, 255);\">поиск музыки на сайте</div>
<div style=\"text-align: right;\">
<form id=\"searchbox_012713901460048253100:ode3rgfa9ag\" action=\"http://www.google.com/cse\">
    <input type=\"hidden\" value=\"012713901460048253100:ode3rgfa9ag\" name=\"cx\" /> <input type=\"text\" size=\"20\" name=\"q\" />   <input type=\"submit\" value=\"Поиск\" name=\"sa\" /><br />
</form>
</div>";
echo "<table cellspacing=\"1\" cellpadding=\"1\" align=\"\" summary=\"\" style=\"width: 745px; height: 43px;\">
    <tbody>
        <tr>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=1\">Pank</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=4\">Шансон</a>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=5\">Hip-Hop</a>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=6\">Gothic</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=7\">Rap</a></td>
            <td> <a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=8\">POP</a></td>
        </tr>
        <tr>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=9\">СКА</a> <br />
            </td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=10\">РОК</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=12\">R&B</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=14\">Альтернатива</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=13\">Аудиокниги</a></td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=11\">Сборники</a></td>
        </tr>
        <tr>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=19\">Darkwave</a> <br />
            </td>
            <td><a style=\"font-weight: bold;\" href=\"http://limwap.info/index.php?cat=20\">Death</a></td>
            </tr>
       
    </tbody>
</table>";
// display article table with info
if(count($article) > 0)
{

    // simple pagination routine; took entirely too long to get this right...
    if($start + $limit <= $total_rows)
    {
        $next_pg    = $start + $limit;
    }
    else
    {
        $next_pg    = $total_rows;
    }
   
    if($start - $limit >= 0)
    {
        $prev_pg    = $start - $limit;
    }
    else
    {
        $prev_pg    = 0;
    }

    // start of top navigation block
    echo '<hr /><div class="titlebg">Статей в категории ' . ($total_rows <5 ? '' : '') . '' . $total_rows . '
    <br/>' . $cat_desc . '</div>';

    echo '<div class="titlebg" class="article_nav">';
   
    if($start > 1) echo '<a href="' . $scripturl . '?' . $url_link . 'page=' . $page . '&start=' . $prev_pg . '&cat=' . $category . '">Назад</a> | ';
   
    echo $start + 1 . ' - ' . $next_pg;
   
    if($next_pg < $total_rows) echo ' | <a href="' . $scripturl . '?' . $url_link . 'page=' . $page . '&start=' . $next_pg . '&cat=' . $category . '">Дальше</a>';
   
    echo '</div><hr />';

    echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">';
   
    if($show_header) // display a table header
    {
        echo '<tr class="windowbg2">';
       
        if($show_date)        echo '<td align="right">&nbsp; Дата </td>';
        if($show_views)        echo '<td align="center">&nbsp; Просмотров &nbsp;</td>';
        if($show_author)    echo '<td align="left">&nbsp; Автор &nbsp;</td>';
       
       
        echo '<td align="left">&nbsp;Название </td>';
    }
   
    foreach($article as $item)
    {
        if(empty($item['shortname'])) $item['shortname'] = $item['id'];
        // make shortname = id if it doesn't already exist (for JPDeni!)

        if($use_theme_css)
        {
            echo '<tr class="windowbg' . ($row_class    = $row_class == $css_row ? $css_row_alt : $css_row) . '">';
        }
        else
        {
            echo '<tr style="background: #' . ($row_class    = $row_class == $css_row ? $css_row_alt : $css_row) . '">';
        }
               
        if($show_date)
        {
            echo '<td align="right"> &nbsp;' . date("j.n.Y", $item['date']) . '</td>';
        }
       
        if($show_views)        echo '<td align="center">&nbsp;' . $item['views'] . '' . '</td>';
        if($show_author)    echo '<td align="left">&nbsp;(' . $item['author'] . ')</td>';
       
        echo '<td align="left">&nbsp;<a href="' . $scripturl . '?page=' . $item['shortname'] . '" target="' . $link_target . '">';
        echo substr($item['subject'], 0, $link_width) . '</a>';
       
        echo '&nbsp;</td></tr>';
    }
   
    echo '</table>';
}
else    // no articles = simple notice of nothing found; no table used
{
    echo '<div class="titlebg">Категория в стадии разработки</div><hr />';
}

// start of navigation block
echo '<hr /><div class="titlebg" class="article_nav">';

if($start > 1) echo '<a href="' . $scripturl . '?' . $url_link . 'page=' . $page . '&start=' . $prev_pg . '&cat=' . $category . '">Назад</a> | ';

echo $start + 1 . ' - ' . $next_pg;

if($next_pg < $total_rows) echo ' | <a href="' . $scripturl . '?' . $url_link . 'page=' . $page . '&start=' . $next_pg . '&cat=' . $category . '">Дальше</a>';

echo ' | Всего статей : ' . $total_rows;

echo '</div>';

mysql_free_result($query);    // free up memory (nice to do)


в коде я уже дописал свое...
но не хватает нескольких функций. а именно:

1. вывод выбранных статей а это( $cats_allowed) побуквенно. например вверху алфавит кирилицей а под ним английский. нажал на букву и тебе показало статьи которые начинаются на выбранную букву.
2. когда переходишь на букву, то чтобы была возможность постраничного просмотра и чтобы это было равно ($limit)