Autor | Zpráva | ||
---|---|---|---|
Konkor Profil * |
#1 · Zasláno: 29. 9. 2013, 13:36:40
Pro výpis dat z databáze používám toto:
{if !empty($side->categories[2])} {foreach $side->categories[2] as $_} <li class=" "> <a href="{link Show:default, $_['nice_name']}">{=$_['meta_name']}</a> </li> {/foreach} {/if} Vše se vypíše dobře, ale není to podle abecedy. Hledal jsem a mělo by to jít nějak pomocí ORDER BY, ale nepřišel jsem jak na to.. Tak prosím o rady. |
||
juriad Profil |
#2 · Zasláno: 29. 9. 2013, 13:49:44
Toto je nějaká šablona. Někde dříve pokládáš dotaz (hledej slovo SELECT). Tam přidej na konec
ORDER BY název-sloupce .
Případně, až ten dotaz do databáze najdeš, tak se ozvi. |
||
Konkor Profil * |
#3 · Zasláno: 29. 9. 2013, 14:18:56
A poznám z té šablony, co bych měl kde hledat?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>{if isset($page) && $page !== NULL && $page->getMetaKeywords() !== NULL}{$page->getMetaKeywords()}{else}{=Environment::expand('%metaKeywords%')}{/if} online | {=$server->name}</title> <meta name="description" content="{if isset($page) && $page !== NULL && $page->getMetaDescription() !== NULL}{$page->getMetaDescription()}{else}{=Environment::expand('%metaDescription%')}{/if}"> <link rel="stylesheet" type="text/css" href="{=Environment::expand('%themeBaseUri%/style.css')}"> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="/misc/base.js"></script> <script src="/sorttable.js"></script> <link href="/favicon.png" rel="icon" type="image/png" /> </head> <body> <div id="content"> <a id="logo" href="http://web.cz/" ></a> <div id="search"> <?php $searchform = $presenter->getComponent('searchForm'); $searchform->render('begin'); ?> <?php echo $searchform['q']->control; ?> <input type="submit" class="btn_search" value="" /> <?php $searchform->render('end'); ?> </div> <div class="clr"></div> <div id="big_content"> <ul id="menu"> {foreach $side->pages as $_} <li><a href="{link Show:default, $_->getNiceName()}">{=$_->getName()}</a></li> {/foreach} </ul> <div class="clr"></div> <div id="big_content_2"> <div class="boxes_big" > <a href="http://web.cz/ceske/" id="link1">České</a> <a href="http://web.cz/ceskej/" id="link2">Slovenské</a> <a href="/icq-online/" id="link3">ICQ online</a> <a id="bb1" href="http://web.cz/ceske/" >CZ</a> <a id="bb2" href="http://web.cz/ceskej/" >SK</a> </div> <div id="login" {if !is_null($udata)}style="position: relative;left: 0px;border: 1px solid #CCD4D7; background: none repeat scroll 0 0 #E2EBEF; padding: 10px; height: 150px; border-radius: 10px; "{/if}> {if is_null($udata)} <div id="loginpr" >Přihlášení</div> {$form_1->render('begin')} {$form_1->render('errors')} {$form_1['email']->control} <div id="loginpj" >Přihlašovací email: </div> {$form_1['pwd']->control} <div id="loginpw" >Heslo:</div> <input type="submit" class="button" name="ok" id="frmloginForm-ok" value="Přihlásit se"> <a id="loginreg" href="{link User:registration}" >Registrovat</a> {$form_1->render('end')} {else} <h2>{$udata->payer_company}</h2> <ul> {if $udata->role_id == 1} <li> <a href="/admin/">Administrace</a> </li> {/if} <li> <a href="{link User:setting}">Nastavení profilu</a> </li> <li> <a href="{link User:favourites}">Oblíbená videa</a> </li> <li> <a href="{link User:logout}">Odhlášení</a> </li> </ul> {/if} </div> <div class="clr"></div> <div id="full_left"> {if !empty($side->items_2)} <div class="left_kat"> <div class="box_l_1"> <div class="box_l_2">{!$server->prvni_kat2}</div> </div> <div class="clr"></div> <div class="box_l_3"> <ul> {if !empty($side->items_2)} {foreach $side->items_2 as $_} <li class=" "> <a href="{link Show:default, $_->getNiceName()}">{=$_->getMetaKeywords()}</a> </li> {/foreach} {/if} </ul> <div class="clr"></div> </div> </div> {/if} <div class="left_kat"> <div class="box_l_1"> <div class="box_l_2">Podle státu </div> </div> <div class="clr"></div> <div class="box_l_3"> <ul> {if !empty($side->categories[1])} {foreach $side->categories[1] as $_} <li class=" "> <a href="{link Show:default, $_['nice_name']}">{=$_['meta_keywords']}</a> </li> {/foreach} {/if} </ul> <div class="clr"></div> </div> </div> {if !empty($side->categories[2])} <div class="left_kat"> <div class="box_l_1"> <div class="box_l_2">Podle druhu</div> </div> <div class="clr"></div> <div class="box_l_3"> <ul> {if !empty($side->categories[2])} {foreach $side->categories[2] as $_} <li class=" "> <a href="{link Show:default, $_['nice_name']}">{=$_['meta_keywords']}</a> </li> {/foreach} {/if} </ul> <div class="clr"></div> </div> </div> {/if} </div> <div id="right_cat"> <?php echo $content->render(); ?> </div> <div class="clr"></div> <div id="footer"> Copyright © 2009 - 2013 </div> </div> </div> </div> </body> </html> |
||
Rfilip Profil |
#4 · Zasláno: 29. 9. 2013, 15:06:52
Tohle vypadá na šablonu něčeho, pravděpodobně nějakého mvc/mvp frameworku, zkus sem dát link na stránku, frameworky se občas podepisují v http hlavičkách, či v výsledném html kodu nebo adresářové struktuře.
|
||
Konkor Profil * |
#5 · Zasláno: 29. 9. 2013, 15:10:09
|
||
Rfilip Profil |
#6 · Zasláno: 29. 9. 2013, 15:58:21
Jedná se o ne moc dobře udělanou šablonu nette frameworku, viz http hlavička "X-Powered-By:Nette Framework".
Za předpokladu standartní adresářové struktury, se podívej do souboru app/presenters/HomepagePresenter.php do metody renderDefault |
||
Konkor Profil * |
#7 · Zasláno: 29. 9. 2013, 16:58:11
Struktura není zachována, ale myslím, že jsem ten soubor našel, nicméně mi tam to ORDER nejde nikam dát:
<?php abstract class Front_BasePresenter extends /*Nette\Application\*/Presenter { public $lang; public $server; public function startup() { // preload mapper::manufacturers()->findAll(); mapper::categories()->findMain(); mapper::pages()->findNotRef(); if (Environment::getUser()->isAuthenticated()) { $this->template->udata = Common::getUserData(Environment::getUser()->getIdentity()->id); $form = dibi::query('SELECT * FROM favourites WHERE uid = %i',Environment::getUser()->getIdentity()->id)->fetchAll(); if($form){ foreach($form as $_form){ $prod[] = mapper::products()->findById($_form->vid); } $this->template->prods = $prod; } } $_SERVER['SERVER_NAME'] = str_replace("www.", "", $_SERVER['SERVER_NAME']); $server = dibi::query('SELECT * FROM shopaholic_weby WHERE adresa = %s', $_SERVER['SERVER_NAME'])->fetch(); if(!$server){ die('Web není přidán v administraci'); } $this->server = $server; $this->template->server = $server; // visited products if (!isset(Environment::getSession(SESSION_ORDER_NS)->visited)) { Environment::getSession(SESSION_ORDER_NS)->visited = array(); } } public function beforeRender() { // curly brackets $this->template->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke'); // texy $texy = new Texy; $this->template->registerHelper('texy', array($texy, 'process')); // side $side = array(); $i = 1; foreach (mapper::categories()->findAll2($this->server->zkratka) as $_) { $items[$_['type']][] = $_; } $q = dibi::query('SELECT ref_id FROM shopaholic_pages WHERE nice_name = %s', $this->server->prvni_kat)->fetchSingle(); if($q){ $q = dibi::query('SELECT id FROM shopaholic_products WHERE lang = %s',$this->server->zkratka,' AND category_id1 = '.$q.' OR category_id2 = '.$q)->fetchAll(); foreach($q as $_q){ $b[] = mapper::products()->findById($_q->id); } $side['items_2'] = $b; } $side['manufacturers'] = mapper::manufacturers()->findAll(); $side['categories'] = $items; $side['pages'] = mapper::pages()->findNotRef2($this->server->zkratka); $side['cart'] = Environment::getSession(SESSION_ORDER_NS); $side['recent_products'] = Environment::getSession(SESSION_RECENTPRODUCTS_NS)->recent; $this->template->side = (object) $side; $this->template->vars = Environment::getVariables(); $this->template->form_1 = $this->getComponent('loginForm'); } public function createComponent($name) { switch ($name) { case 'searchForm': $form = new AppForm($this, $name); $form->addText('q', __('Query:')); $form['q']->getControlPrototype()->onclick( 'if (this.value === "' . __('Input search keywords') . '") { this._default = this.value; this.value = ""; }'); $form['q']->getControlPrototype()->onblur( 'if (this.value === "" && this._default !== undefined) { this.value = this._default; }'); $form->setAction($this->link('Search:default')); $form->setMethod('get'); if ($this->getParam('q')) { $form->setDefaults(array('q' => $this->getParam('q'))); } else { $form->setDefaults(array('q' => __('Input search keywords'))); } break; case 'loginForm': $form = new AppForm($this, $name); $form->addText('email', __('E-mail:')) ->setEmptyValue('@') ->addRule(Form::FILLED, __('You have to enter your e-mail.')) ->addRule(Form::EMAIL, __('This is not an e-mail address.')); $form->addPassword('pwd', __('Password:')) ->addRule(Form::FILLED, __('You have to enter your password')); $form->addSubmit('ok', __('')); $form['ok']->setRendered(TRUE); $form->onSubmit[] = array($this, 'onloginFormSubmit'); break; default: return parent::createComponent($name); } } public function onloginFormSubmit(Form $form) { $user = Environment::getUser(); $user->setAuthenticationHandler(new Authenticator()); $values = $form->getValues(); try { $user->authenticate($values['email'], $values['pwd']); adminlog::log(__('Successfully logged in as "%s"'), Environment::getUser()->getIdentity()->getName()); $this->redirect('default'); $this->terminate(); } catch (AuthenticationException $e) { adminlog::log(__('Unsuccessful log in (username: "%s", password: "%s")'), $values['username'], $values['password']); $form->addError($e->getMessage()); } } } |
||
Rfilip Profil |
#8 · Zasláno: 29. 9. 2013, 17:32:18
Takže musíme najít třídu mapper, ta by měla být standardně v app/Model.
|
||
Konkor Profil * |
#9 · Zasláno: 29. 9. 2013, 18:07:24
Teď bohužel nevim co přesně myslíš, tady je soubor mapper.php
<?php /** * Mapper */ abstract class mapper extends /*Nette\*/Object { /** * @var array Mapper objects */ private static $mappers = array(); /** * @var array Mappers' domain objects */ private static $domains = array(); /** * @var array Pool of fetched objects */ protected $pool = array(); /** * Get mapper * @param string * @return mixed */ public static function object($name) { if (!isset(self::$mappers[$name])) { self::$mappers[$name] = new $name; } return self::$mappers[$name]; } /** * Convert mapper to domain name * @param string * @return string */ private static function domainize($mapper) { if (isset(self::$domains[$mapper])) { return self::$domains[$mapper]; } if ($mapper[strlen($mapper) - 1] === 's') { return substr($mapper, 0, strlen($mapper) - 1); } throw new /*\*/Exception("Cannot find domain for $mapper."); } /** * Add/change mappers' domain * @param string * @param string */ private static function mapperDomain($mapper, $domain) { self::$domains[$mapper] = $domain; } /** * Call to undefined static method * @param string * @param array * @return mapper */ public static function __callStatic($name, $args) { return self::object($name); } /** * product_availabilities mapper * @return product_availabilities */ public static function product_availabilities() { return self::object('product_availabilities'); } /** * categories mapper * @return categories */ public static function categories() { return self::object('categories'); } /** * manufacturers mapper * @return manufacturers */ public static function manufacturers() { return self::object('manufacturers'); } /** * order_delivery_types mapper * @return order_delivery_types */ public static function order_delivery_types() { return self::object('order_delivery_types'); } /** * order_emails mapper * @return order_emails */ public static function order_emails() { return self::object('order_emails'); } /** * order_payment_types mapper * @return order_payment_types */ public static function order_payment_types() { return self::object('order_payment_types'); } /** * order_statuses mapper * @return order_statuses */ public static function order_statuses() { return self::object('order_statuses'); } /** * orders mapper * @return orders */ public static function orders() { return self::object('orders'); } /** * pages mapper * @return pages */ public static function pages() { return self::object('pages'); } /** * pictures mapper * @return pictures */ public static function pictures() { return self::object('pictures'); } /** * products mapper * @return products */ public static function products() { return self::object('products'); } /** * actualities mapper * @return actualities */ public static function actualities() { return self::object('actualities'); } /** * Should not be constructed outside of mapper */ protected function __construct() { } /** * Primary key getter * @return string */ public function getPK() { return 'id'; } /** * Table name getter * @return string */ public function getTable() { return get_class($this); } /** * Domain object class getter * @return string */ public function getDomain() { return self::domainize(get_class($this)); } /** * Reset pool */ public function resetPool() { $this->pool = array(); } /** * Update data in DB * @param array */ protected function update(array $data) { $pk = $data[$this->getPK()]; unset($data[$this->getPK()]); return dibi::query( 'UPDATE %n', ':prefix:' . $this->getTable(), 'SET', $data, 'WHERE %n=%i', $this->getPK(), $pk ); } /** * Insert data into DB * @param array */ protected function insert(array $data) { return dibi::query( 'INSERT INTO %n', ':prefix:' . $this->getTable(), $data ); } /** * Delete from DB * @param array */ protected function delete(array $where) { return dibi::query( 'DELETE FROM %n', ':prefix:' . $this->getTable(), 'WHERE', $where ); } } |
||
Rfilip Profil |
#10 · Zasláno: 29. 9. 2013, 18:40:03
Ano,to je přesně ono, ale v tom souboru je odkázané dál, není v stejné složce třída categories? Pokud ano dej ji sem to už by měl být poslední soubor. Tam by měla být metoda findAll2 kterou potřebujeme upravit.
|
||
Konkor Profil * |
#11 · Zasláno: 29. 9. 2013, 18:43:44
Tak snad toto:
[pre]<?php final class categories extends mapper { /** * @var string Base query */ private $query; /** * @var array Main categories (depth = 0) */ private $main = NULL; /** * @var array All categories */ private $all = NULL; /** * Constructor */ protected function __construct() { $this->query = ' SELECT [categories].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description] FROM [:prefix:categories] AS [categories] LEFT JOIN [:prefix:pages] AS [pages] ON [pages].[ref_id] = [categories].[id] AND [pages].[ref_type] = \'' . pages::CATEGORY . '\' LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id]'; } /** * Converts list of categories with depths to tree * @param array * @return array */ public function treeize(array $categories) { $root = array(NULL, array()); $indexes = array(0 => 0); foreach ($categories as $_) { list($depth, $category) = $_; $indexes[$depth]++; $add =& $root; for ($i = 0; $i < $depth; $i++) $add =& $add[1][$indexes[$i] - 1]; $add[1][] = array($category, array()); $indexes[$depth + 1] = 0; } return $root[1]; } /** * Find all categories * @return array */ public function findAll2($lang) { if ($this->all === NULL) { $this->all = array(); $res = dibi::query(' SELECT [categories].[type] AS [type], [categories].[lang] AS [lang], [node].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description], (COUNT([parent].[id]) - 1) AS [depth] FROM [:prefix:categories] AS [node], [:prefix:categories] AS [parent], [:prefix:pages] AS [pages] LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:categories] AS [categories] ON [categories].[id] = [pages].[ref_id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id] WHERE ([node].[lft] BETWEEN [parent].[lft] AND [parent].[rgt]) AND [pages].[ref_id] = [node].[id] AND [pages].[ref_type] = %s', pages::CATEGORY, ' AND [categories].[lang] = %s',$lang,' GROUP BY [node].[id] ORDER BY [node].[lft]'); foreach ($res as $row) { $this->all[] = (array) $row; } } return $this->all; } public function findAll3($lang) { if ($this->all === NULL) { $this->all = array(); $res = dibi::query(' SELECT [categories].[type] AS [type], [categories].[lang] AS [lang], [node].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description], (COUNT([parent].[id]) - 1) AS [depth] FROM [:prefix:categories] AS [node], [:prefix:categories] AS [parent], [:prefix:pages] AS [pages] LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:categories] AS [categories] ON [categories].[id] = [pages].[ref_id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id] WHERE ([node].[lft] BETWEEN [parent].[lft] AND [parent].[rgt]) AND [pages].[ref_id] = [node].[id] AND [pages].[ref_type] = %s', pages::CATEGORY, ' GROUP BY [node].[id] ORDER BY [node].[lft]'); foreach ($res as $row) { $this->all[] = (array) $row; } } return $this->all; } public function findAll() { if ($this->all === NULL) { $this->all = array(); $res = dibi::query(' SELECT [node].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description], (COUNT([parent].[id]) - 1) AS [depth] FROM [:prefix:categories] AS [node], [:prefix:categories] AS [parent], [:prefix:pages] AS [pages] LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id] WHERE ([node].[lft] BETWEEN [parent].[lft] AND [parent].[rgt]) AND [pages].[ref_id] = [node].[id] AND [pages].[ref_type] = %s', pages::CATEGORY, ' GROUP BY [node].[id] ORDER BY [node].[lft]'); foreach ($res as $row) { $arr = (array) $row; $thumbnail = array(); $thumbnail['id'] = $row->thumbnail_id; $thumbnail['file'] = $row->thumbnail_file; $thumbnail['description'] = $row->thumbnail_description; $thumbnail['thumbnail'] = NULL; unset($arr['thumbnail_id'], $arr['thumbnail_file'], $arr['thumbnail_description']); $picture = array(); $picture['id'] = $row->picture_id; $picture['file'] = $row->picture_file; $picture['description'] = $row->picture_description; $picture['thumbnail'] = is_null($row->thumbnail_id) ? NULL : new picture($thumbnail); unset($arr['picture_id'], $arr['picture_file'], $arr['picture_description']); $arr['picture'] = is_null($row->picture_id) ? NULL : new picture($picture); $depth = intval($arr['depth']); unset($arr['depth']); // for finding subcategories $this->pool[$row->id] = new category($arr); $this->all[] = array($row->depth, $this->pool[$row->id]); } } return $this->all; } /** * Find main categories * @return array */ public function findMain() { if ($this->main === NULL) { $this->main = $this->poolResults(dibi::query(' SELECT [node].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description |
||
Rfilip Profil |
#12 · Zasláno: 29. 9. 2013, 19:07:25
Jo to je ono jde o upravu tohoto SQL (metoda findAll2):
SELECT [categories].[type] AS [type], [categories].[lang] AS [lang], [node].[id] AS [id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description], (COUNT([parent].[id]) - 1) AS [depth] FROM [:prefix:categories] AS [node], [:prefix:categories] AS [parent], [:prefix:pages] AS [pages] LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:categories] AS [categories] ON [categories].[id] = [pages].[ref_id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id] WHERE ([node].[lft] BETWEEN [parent].[lft] AND [parent].[rgt]) AND [pages].[ref_id] = [node].[id] AND [pages].[ref_type] = %s', pages::CATEGORY, ' AND [categories].[lang] = %s',$lang,' GROUP BY [node].[id] ORDER BY [node].[lft] Podle čeho chcete řadit? |
||
Konkor Profil * |
#13 · Zasláno: 29. 9. 2013, 19:20:44
prefix používám shopaholic_ a chtěl bych to řadit podle meta_keywords
Snad je to to co potřebuješ. |
||
Rfilip Profil |
#14 · Zasláno: 29. 9. 2013, 19:31:41
Takže v kodu z [#11] v metodě findAll2 nahrad řádek
ORDER BY [node].[lft] tímto ORDER BY [node].[meta_keywords]
|
||
Konkor Profil * |
#15 · Zasláno: 29. 9. 2013, 19:42:49 · Upravil/a: Konkor
Nahradil, jsem to ORDER BY [pages].[meta_keywords] , ještě jsem změnil to pages, nebude to dělat neplechu? Když sem to udělal jak si psal, tak se stránka nenačetla...
Vypadá, že vše je ok. Tak moc díky :) |
||
Časová prodleva: 5 dní
|
|||
Konkor Profil * |
#16 · Zasláno: 4. 10. 2013, 17:33:03
Omlovám se že znovu otrvuji, ale ještě bych chtěl opravit řazení tohoto:
{foreach $products as $product} <? $cat1 = mapper::categories()->findById(common::getProdData($product->getId())->category_id1); $cat2 = mapper::categories()->findById(common::getProdData($product->getId())->category_id2); $count = dibi::query('SELECT COUNT(*) FROM shopaholic_views WHERE product_id = %i', $product->getId(), ' AND date = %s', date("Y-m-d"))->fetchSingle(); $name = $product->getName(); if(empty($q)){$porovnat = $category->getMetaKeywords(); } if(!empty($name)){ ?> <tr> <td id="tab1d" valign="top"> <a href="{link Show:default, $product->getNiceName()}">{$product->getMetaKeywords()}</a> </td> <td id="tab2d" valign="top"> {if ($cat1->getMetaKeywords())!=($porovnat)}{!$cat1->getMetaKeywords()}{/if} {if ($cat2->getMetaKeywords())!=($porovnat)}{!$cat2->getMetaKeywords()}{/if} </td> <td id="tab3d" valign="top"> {!$count} </td> </tr> <? } ?> {/foreach} Myslel jsem si že to bude tento soubor, ale nevím jak to kde upravit, chci aby se to řadilo stejně jako minule. Snad by to mělo jít upravit v tomto souboru nějak: [pre]<?php final class products extends mapper { /** * @var string Base query */ private $query; /** * Constructor */ protected function __construct() { $this->query =' SELECT [products].[id] AS [id], [products].[code] AS [code], [products].[price] AS [price], [products].[tags_id] AS [tags_id], [pages].[name] AS [name], [pages].[nice_name] AS [nice_name], [pages].[content] AS [description], [pages].[meta_keywords] AS [meta_keywords], [pages].[meta_description] AS [meta_description], [products].[price] AS [price], [pictures].[id] AS [picture_id], [pictures].[file] AS [picture_file], [pictures].[description] AS [picture_description], [pictures].[thumbnail_id] AS [thumbnail_id], [thumbnails].[file] AS [thumbnail_file], [thumbnails].[description] AS [thumbnail_description], [product_availabilities].[id] AS [availability_id], [product_availabilities].[name] AS [availability_name] FROM [:prefix:products] AS [products] LEFT JOIN [:prefix:pages] AS [pages] ON [pages].[ref_id] = [products].[id] AND [pages].[ref_type] = \'' . pages::PRODUCT . '\' LEFT JOIN [:prefix:product_availabilities] AS [product_availabilities] ON [products].[availability_id] = [product_availabilities].[id] LEFT JOIN [:prefix:pictures] AS [pictures] ON [pages].[picture_id] = [pictures].[id] LEFT JOIN [:prefix:pictures] AS [thumbnails] ON [pictures].[thumbnail_id] = [thumbnails].[id]'; } /** * Find all * @return array */ public function findAll($limit = NULL, $offset = NULL) { $query = array( $this->query, 'ORDER BY [pages].[nice_name]' ); if ($limit !== NULL) { $query[] = 'LIMIT %i'; $query[] = intval($limit); } if ($offset !== NULL) { $query[] = 'OFFSET %i'; $query[] = intval($offset); } return $this->poolResults(dibi::query($query)); } /** * Find by ids * @param int * @return product[] */ public function findByIds($ids = array()) { if (!is_array($ids)) { $ids = func_get_args(); } if (empty($ids)) { return array(); } $ret = $this->poolResults(dibi::query($this->query, 'WHERE [products].[id] IN %l', $ids)); return $ret; } /** * Find by codes * @param int * @return products[] */ public function findByCodes($codes = array()) { if (!is_array($codes)) { $codes = func_get_args(); } if (empty($codes)) { return array(); } return $this->poolResults(dibi::query($this->query, 'WHERE [products].[code] IN %l', $codes)); } /** * Find by id * @param int * @return product */ public function findById($id) { $ret = $this->poolResults(dibi::query($this->query, 'WHERE [products].[id] = %i', $id, 'LIMIT 1')); return isset($ret[0]) ? $ret[0] : NULL; } /** * Find by nice name * @param string * @return product */ public function findByNiceName($nice_name) { $ret = $this->poolResults(dibi::query($this->query, 'WHERE [pages].[nice_name] = %s', $nice_name, 'LIMIT 1')); return isset($ret[0]) ? $ret[0] : NULL; } /** * Find by category * @param category * @return array */ public function findByCategory(category $category, $limit = NULL, $offset = NULL, $letter = NULL, $sort = NULL) { try { $arrs[$category->getId()] = $category->getId(); $cats = mapper::categories()->findSubcategories($category); if($cats){ foreach($cats as $_cats){ $arrs[$_cats->getId()] = $_cats->getId(); } } $_SERVER['SERVER_NAME'] = str_replace("www.", "", $_SERVER['SERVER_NAME']); $server = dibi::query('SELECT * FROM shopaholic_weby WHERE adresa = %s', $_SERVER['SERVER_NAME'])->fetch(); $query = array( $this->query, 'LEFT JOIN [:prefix:categories] AS [categories] ON ([categories].[id] = [products].[category_id1] OR [categories].[id] = [products].[category_id2])', 'WHERE [categories].[id] IN ( %s )', $arrs, ' AND [products].`lang` = %s', $server->zkratka); if ($sort !== NULL) { switch($sort){ case 1: $query[] = 'ORDER BY [products].[price] ASC'; break; case 2: $query[] = 'ORDER BY [products].[price] DESC'; break; case 3: $query[] = 'ORDER BY [pages].[name] ASC'; break; case 4: $query[] = 'ORDER BY [pages].[name] DESC'; break; } } if ($limit !== NULL) { $query[] = 'LIMIT %i'; $query[] = intval($limit); } if ($offset !== NULL) { $query[] = 'OFFSET %i'; $query[] = intval($offset); } $ret = $this->poolResults(dibi::query($query)); return $ret; } catch (Exception $e) { return array(); } } /** * Find by manufacturer * @param manufacturer * @return array */ public function findByManufacturer(manufacturer $manufacturer, $limit = NULL, $offset = NULL, $letter = NULL) { try { $query = array( $this->query, 'WHERE [products].[manufacturer_id] = %i', $manufacturer->getId() ); if ($letter !== NULL) { $query = array_merge($query, (array) 'AND', $this->whereLetter($letter)); } $query[] = 'ORDER BY [pages].[nice_name]'; if ($limit !== NULL) { $query[] = 'LIMIT %i'; $query[] = intval($limit); } if ($offset !== NULL) { $query[] = 'OFFSET %i'; $query[] = intval($offset); } $ret = $this->poolResults(dibi::query($query)); return $ret; } catch (Exception $e) { return array(); } } /** * Find category of some product * @param int * @return category */ public function findCategoryOf($id) { return self::categories()->findById( dibi::query('SELECT [category_id] FROM [:prefix:products] WHERE [id] = %i', $id)->fetchSingle()); } /** * Find manufacturer of some product * @param int * @return manufacturer */ public function findManufacturerOf($id) { return self::manufacturers()->findById( dibi::query('SELECT [manufacturer_id] FROM [:prefix:products] WHERE [id] = %i', $id)->fetchSingle()); } /** * Find random * @param int * @return products[] */ public function findDoporucujeme($count) { return $this->poolResults(dibi::query($this->query, 'WHERE tags_id = 2', 'ORDER BY RAND()', 'LIMIT %i', $count)); } public function findRandom($count) { return $this->poolResults(dibi::query($this->query, 'ORDER BY RAND()', 'LIMIT %i', $count)); } public function findNews($count) { return $this->poolResults(dibi::query($this->query, 'ORDER BY [products].[id] DESC', 'LIMIT %i', $count)); } public function findSort($count) { return $this->poolResults(dibi::query($this->query, 'ORDER BY RAND()', |
||
Tori Profil |
#17 · Zasláno: 4. 10. 2013, 18:13:21
Chcete seřadit ty produkty? A kde a jak se v kontroleru plní proměnná
$this->template->products ?
|
||
Konkor Profil * |
#18 · Zasláno: 4. 10. 2013, 18:46:55 · Upravil/a: Konkor
Bohužel nechápu
Myslíš $product->getMetaKeywords() (podle tehle proměnné to chci seřadit, podle prvních písmen v abecedě) |
||
Konkor Profil * |
#19 · Zasláno: 5. 10. 2013, 17:04:28
Nebo něco jiného?
|
||
Časová prodleva: 10 let
|
0