Kel_Kimpbell

Рейтинг
138
Регистрация
25.07.2006

Еще одна проблема, которую никак не получается решить. В разделе "заказы" выводятся все заказы за всю историю интернет-магазина. Их можно только удалять либо сортировать по дате и т.п.

Как сделать так, чтоб выводились только последние 25 заказов? Вот код этого дела:

<?php


$content = '';
$path[] = array('url' => PATH::BuildGet(array('action' => 'view')), 'title' => T('Orders'));

switch (init($_GET['action'])) {
case 'detailed_order':
$path[] = array('url' => PATH::BuildGet(array('action' => 'detailed_order')), 'title' => T('Detailed order'));
$content = catch_output('detailed_order');
break;
case 'delete':
delete_order();
break;
case 'view':
case '':
$content = catch_output('view');
break;

}

return array(
'content' => $content,
'path' => $path,
);

///////////////////////////////////////////////////////////////////////////////

function delete_order(){
if(isset($_GET['o_id']) && !empty($_GET['o_id']) && is_numeric($_GET['o_id'])){
$o_id = $_GET['o_id'];
}else{
PATH::Location(PATH::PrevURI(1));
}

$db = DB::instance();

$db->Execute("DELETE FROM orders WHERE o_id = ".$o_id);

PATH::Location(PATH::PrevURI(1));
}


function detailed_order() {
$grid = new CGrid("grid");
$users_headers = array(
'oi_title' => T('Title'),
'oi_price' => T('Price') . " / USD",
'oi_quantity' => T('Quantity'),
'total' => T('Total') . " / USD",
);
$grid->SetHeaders($users_headers);

$o_id = intval($_GET['o_id']);
$order_info = ORDERS::getOrderById($o_id);
$data = ORDERS::getOrderItems($o_id);
$l = LANG::getCurrentLang();

$total_sum = 0;
if (!empty($data))
foreach($data as $k => $v) {
$total_sum += $v['oi_price'] * $v['oi_quantity'];
$data[$k]['total'] = sprintf("%.2f", $total_sum);
$data[$k]['oi_price'] = sprintf("%.2f", $v['oi_price']);
$data[$k]['oi_quantity'] = intval($v['oi_quantity']);
}
$grid->SetRows($data);
$grid->SetPrimaryKey('oi_id');

$t = new S;
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t -> register_function('build_std_url', 'build_pager_url');
$t -> compile_id = "order_details_admin";
$t -> assign(array(
'order' => $order_info,
'grid' => $grid -> Build(),
'total_sum' => $total_sum,
));
$t->display('details.tpl');
}

function view()
{
$grid = new CGrid("grid");
$grid->actions_template = 'file:' . realpath(dirname(__FILE__) . '/../tpl/actions.tpl');

$users_headers = array(
'o_id' => T('ID'),
'o_creation_date' => T('Date'),
'o_track_id' => T('Trackid'),
'o_buyer_id' => T('Buyer'),
'total_items' => T('Items'),
'total_sum' => T('Sum'),
);

$grid->SetHeaders($users_headers);
$grid->SetSortFields(array_keys($users_headers));

$addsql = "";
if (isset($_GET['buyer_id']) && !empty($_GET['buyer_id'])){
$addsql = " WHERE o_buyer_id = " . intval($_GET['buyer_id']);
}

$db = DB::instance();
$rs = $db->PageExecute("SELECT * FROM orders {$addsql} " . $grid->GetOrderByString(), PAGER_MAX_ON_PAGE, $grid->PagerCurrent());
$data = $rs->getAll();

if (!empty($data))
foreach($data as $k => $v) {
$data[$k]['o_buyer_id'] = $db -> getOne("SELECT u_login FROM users_auth_users WHERE u_id = {$v['o_buyer_id']}");

$items = $db -> GetAll("SELECT * FROM orders_items WHERE oi_order_id = {$v['o_id']}");
$count_items = 0;
$sum = 0;
foreach($items as $item){
$count_items += $item['oi_quantity'];
$sum += $item['oi_quantity'] * $item['oi_price'];
}
$data[$k]['total_items']= $count_items;
$data[$k]['total_sum'] = $sum;
}

$grid->SetRows($data);

$grid->SetCellOptionsToCol("_actions", array(
'detailed' => PATH::BuildGet(array("action" => "detailed_order", "o_id" => "[key]")),
"delete" => PATH::BuildGet(array("action" => "delete", "o_id" => "[key]")),
));

$grid->SetPrimaryKey('o_id');
$grid->SetPager($rs->MaxRecordCount(), PAGER_MAX_ON_PAGE);

$users = $db -> GetAssoc("SELECT u_id, CONCAT(u_full_name, ' ', u_last_name, ' ', u_patronymic_name ) as name FROM users_auth_users ORDER BY name");
$t = new S;
$t -> compile_id = "list_orders";
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t->assign(array(
'grid' => $grid->Build(),
'users' => $users,
));
$t->display('view.tpl');
}
?>

За сам список заказов я так понимаю отвечает вот эта часть:

function view()

{
$grid = new CGrid("grid");
$grid->actions_template = 'file:' . realpath(dirname(__FILE__) . '/../tpl/actions.tpl');

$users_headers = array(
'o_id' => T('ID'),
'o_creation_date' => T('Date'),
'o_track_id' => T('Trackid'),
'o_buyer_id' => T('Buyer'),
'total_items' => T('Items'),
'total_sum' => T('Sum'),
);

$grid->SetHeaders($users_headers);
$grid->SetSortFields(array_keys($users_headers));

$addsql = "";
if (isset($_GET['buyer_id']) && !empty($_GET['buyer_id'])){
$addsql = " WHERE o_buyer_id = " . intval($_GET['buyer_id']);
}

$db = DB::instance();
$rs = $db->PageExecute("SELECT * FROM orders {$addsql} " . $grid->GetOrderByString(), PAGER_MAX_ON_PAGE, $grid->PagerCurrent());
$data = $rs->getAll();
Shtogrin:
поле надо указать
ORDER BY n_view_date DESC

Огромнейшее спасибо! Получилось :)

Shtogrin, пробовал писать $news = $db -> GetAll("SELECT * FROM news WHERE n_id in (" . join(',', $ids) . ") ORDER BY DESC"); - матюкается. фатал эррор пишет..

хотя во втором шаге ведь DESC помог

$news = $db -> GetAssoc("SELECT n_id, CONCAT(n_view_date, ' - ', n_title) FROM news ORDER BY n_view_date DESC LIMIT 0,10");

добавил только DESC LIMIT 0,10 (лимит для того чтоб только последние 10 новостей в списке можно было выбрать. больше просто не нужно)

topy, да, действительно, дело не в этом куске. Вот здесь собака зарыта:

<?php
define("FROM_NEWSLETTER", "no-reply@site.com.ua");

function thanks() {
$t = new S;
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t->compile_id = "newsletter_thanks";
$t->display('sended.tpl');
}


function preview_letter(){
die($_POST['d']['body']);
}

function step3() {
$template = '';

$db = DB::instance();
if (isset($_POST['d'])) {
$data = $_POST['d'];
$q = "SELECT * FROM subscribers WHERE s_active = 1";

$emails = $db -> GetAll($q);

//$emails = array(0=>array('s_id'=>666, 's_email'=>'sddsg@gmail.com', 's_active'=>1));

foreach ($emails as $e) {
$body = str_replace('##UNSUBSCRIBE_ID##', md5($e['s_email'] . $e['s_id'] . AUTH_SALT), $data['body']);
$m = new CMail();
$m -> to($e['s_email']);
$m -> From(FROM_NEWSLETTER);
$m -> Subject($data['subject']);
$m -> body($body, 'html');
$m -> Send();
}
PATH::Location(PATH::BuildGet(array('action' => 'thanks')));
}


$ids = $_SESSION['_NEWSLETTER_NEWS'];
$ids[] = 0;
$news = $db -> GetAll("SELECT * FROM news WHERE n_id in (" . join(',', $ids) . ")");

$b = new S;
$b->template_dir = realpath(dirname(__FILE__).'/../tpl');
$b->compile_id = "newsletter_body";
$b -> assign(array(
'blocks' => $_SESSION['_NEWSLETTER_BLOCKS'],
'news' => $news,
'news_block_num' => $_SESSION['_NEWSLETTER_NEWS_BLOCK']
));
$body = $b->fetch('body.tpl');


$t = new S;
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t->compile_id = "newsletter_step3";
$t -> assign(array(
'body' => $body,
));
$t->display('step3.tpl');
}

function step2(){
$error = "";
if (isset($_POST['d'])){
$data = $_POST['d'];
$news_block_num = $data['news_block_num'];
if (empty($data['news_ids'])){
$error = T("You must choose news for news block");
}

if (empty($error)){
$_SESSION['_NEWSLETTER_NEWS'] = $data['news_ids'];
$_SESSION['_NEWSLETTER_NEWS_BLOCK'] = $news_block_num;
PATH::Location(PATH::BuildGet(array('action' => 'step3')));
}
}

$db = DB::instance();
$news = $db -> GetAssoc("SELECT n_id, CONCAT(n_view_date, ' - ', n_title) FROM news ORDER BY n_view_date DESC LIMIT 0,10");
$blocks = $_SESSION['_NEWSLETTER_BLOCKS'];
$t = new S;
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t->compile_id = "newsletter_step2";
$t -> assign(array(
'news' => $news,
'blocks' => $blocks,
'error' => $error,
));
$t->display('step2.tpl');
}

function step1(){
$error = "";
if (isset($_POST['d'])){
$data = $_POST['d'];
$blocks = (isset($data['titles']) ? $data['titles'] : array() );
foreach($blocks as $k => $v){
if (strlen(trim($v)) <= 0){
unset($blocks[$k]);
}
}



if (empty($blocks)){
$error = T("Please define at list one block");
} else {
$_SESSION['_NEWSLETTER_BLOCKS'] = $blocks;
}

if (empty($error)){
if ($data['use_news_block'] != 0){
PATH::Location(PATH::BuildGet(array('action' => 'step2')));
} else {
$_SESSION['_NEWSLETTER_NEWS'] = array();
$_SESSION['_NEWSLETTER_NEWS_BLOCK'] = -1;
PATH::Location(PATH::BuildGet(array('action' => 'step3')));
}
}
}

$t = new S;
$t->template_dir = realpath(dirname(__FILE__).'/../tpl');
$t->compile_id = "newsletter_step1";
$t -> assign(array(
'error' => $error,
));
$t->display('step1.tpl');
}

////////////////////////////////////////////////////////////////////////////////////////////////
$path[] = array('url' => 'index.php?section=newsletter', 'title' => T('Newsletter'));

switch (init($_GET['action']))
{
case 'thanks':
$path[] = array('url' => '', 'title' => T('Thanks'));
$content = catch_output("thanks");
break;
case 'preview_letter':
preview_letter();
break;
case 'step3':
$path[] = array('url' => PATH::BuildGet(array('section' => 'newsletter', 'action' => 'step3')), 'title' => T('Step 3'));
$content = catch_output("step3");
break;
case 'step2':
$path[] = array('url' => PATH::BuildGet(array('section' => 'newsletter', 'action' => 'step2')), 'title' => T('Step 2'));
$content = catch_output("step2");
break;
default:
$path[] = array('url' => PATH::BuildGet(array('section' => 'newsletter', 'action' => 'step1')), 'title' => T('Step 1'));
$content = catch_output("step1");
}

return array(
'content' => $content,
'path' => $path,
);

?>

На втором шаге изменить порядок новостей удалось. Третий шаг - предпросмотр получившегося письма - всеравно выдает новости в неправильном порядке. Step3 в самом начале файла находится. Тут наверно надо исправлять.

Нет, не уверен. Но я так думаю что если изменить сортировку списка во втором шаге, то и при отправке новости будут в нужном порядке. А это весь код, который был в step2.tpl

Знач копать нужно отсюда, но вот куда.. не силен я в смарте.

Заказал у ТС анимированный гиф баннер 468*60 для нашего инэт-магазина в 8 часов вечера, в 10 баннер был уже готов. Работой доволен, получилось довольно прикольно(обошелся в 15 вмз). Вот собственно и сам баннер:

burunduk, просто хотелось, чтобы вся страница не перезагружалась, а только подгружались данные. Я так понимаю если сделать через яву вся страница будет перегружаться? Если нет, то не могли бы вы дать какой-то пример использования - я яву еще хуже знаю, чем фреймы :)

i++:
Цитата:
Сообщение от rypy Посмотреть сообщение
2. Отсутствует возможность верстки статей. Где тэги, где все? Можно ли выделить стронгом или создать анкоры ссылок? Про тайтлы я даже не спрашиваю, этого пока и на сеозавре нет.
Не совсем понял, какая верстка имеется в виду? Статья может содержать html код, следующие теги: a (href,target); b; br; div; h1; h2; h3; h4; h5; h6; i; p; span; strong; u; ul; li (расширим по запросу).
<title> страницы статьи берется из названия статьи, или вы про атрибут title в ссылках?

Надо бы по-нормальному оформить форму ввода статьи - написать какие можно использовать теги (сделайте плиз поддержку p align="justify"), сделать возможность предпросмотра статьи. Также написать/ввести ограничение по кол-ву символов в статье, ссылок.

Неплохо это сделано на xmest.ru - скриншот формы редактирования статьи.

Но и там есть свои баги - а именно то что некоторые теги при повторном редактировании заменяются(например br - пустой строкой, код пробела - на пробел и т.п. - а надо чтоб тег оставался тегом), нельзя вставлять картинки(неактивирован тег img), и то что статья в предпросмотре выглядит не так как при размещении на сайте.

Вот если вы учтете свои баги и баги хmest'а - то будет чудесно, т.к. ваша биржа как-то приятней выглядит чтоли.. да и народу больше.

На е107 все заработало - осталось решить вопрос другого сайта с onclick..

Да. Вот это я и хочу поставить. Но вот на одном сайте картинки открываются через onclick, а на другом - на движке e107 - просто не хочет работать - в первый раз отлично пошло, а затем заглохло - вобщем мистика. А на сайте, где картинки через onclick открываются, код очень жестокий

$images[$k]['image'] = Img(FILES_URL . $item['i_id'] . "/gallery/" . $v['ig_id'] . "/" . $v['ig_small_filename'], "width=\"150\" height=\"113\" class=\"bordered_image\" style=\"cursor: pointer;\" onclick=\"newWin('" . FILES_URL . $item['i_id'] . "/gallery/" . $v['ig_id'] . "/" . $v['ig_large_filename'] . "', {$sizes[0]} + 20, {$sizes[1]} + 20); \" ");
}

И как его переделать я не знаю...

Всего: 719