Еще одна проблема, которую никак не получается решить. В разделе "заказы" выводятся все заказы за всю историю интернет-магазина. Их можно только удалять либо сортировать по дате и т.п.
Как сделать так, чтоб выводились только последние 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, пробовал писать $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, да, действительно, дело не в этом куске. Вот здесь собака зарыта:
<?phpdefine("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, просто хотелось, чтобы вся страница не перезагружалась, а только подгружались данные. Я так понимаю если сделать через яву вся страница будет перегружаться? Если нет, то не могли бы вы дать какой-то пример использования - я яву еще хуже знаю, чем фреймы :)
Надо бы по-нормальному оформить форму ввода статьи - написать какие можно использовать теги (сделайте плиз поддержку 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); \" "); }
И как его переделать я не знаю...