Permalänk

[CodeIgniter] GETtar

Hej!

Jag har kört fast igen, håller på snickra något åt webbshophållet men har stött på patrull med en viktig del av vilken PHP/MySQL site som helst.
Problemet är att jag försöker göra någon form av sortering av produkter på denna site genom en GET men är inte helt hundra på hur jag ska ställa rätt fråga i koden.

GET frågan ser ut som följande:
index.php/site/category/tradgard
Vill att man ska kunna fråga på den GET frågan såsom följande:
site = Oviktig egentligen i detta sammanhang då det är själva controllern som används
category = Huvudsidan med olika kategorier, denna del av queryn är vilken sida vi är på
tradgård = I dagsläget så är den kategorin sorterad i databasen som nummer 1, sorterar ut alla produkter som är tilldelade nummer 1 under kollumnen 'category' i databasen.

Model:

class Model_db_get extends CI_Model{ public function __construct(){ parent::__construct(); } public function getProductCategory($page,$category){ $query = $this->db->query("SELECT * FROM products WHERE active='1' AND category='$category' ORDER BY _id DESC"); return $query->result(); }

View:

<?php foreach($result as $row){ $url = $row->product_url; $product = $row->product_image; $text = "Delat via ARBETSNAMN"; $facebook = base_url('')."img/share.facebook.png"; $twitter = base_url('')."img/share.twitter.png"; echo "<div class=\"productwrapper\"> <div class=\"productimagewrapper\"> $product </div> <div class=\"product_toolbar\"> <a href=\"#\">Om produkten</a> <a href=\"".share_url('twitter', array('url'=>$url, 'text'=>$text, 'via'=>'ARBETSNAMN'))."\"><img src=\"img/share.twitter.png\" alt=\"Twitter\" title=\"Dela på Twitter\"></a> <a href=\"".share_url('facebook', array('url'=>$url, 'text'=>$text, 'via'=>'ARBETSNAMN'))."\"><img src=\"img/share.facebook.png\" alt=\"Facebook\" title=\"Dela på Facebook\"></a> </div> </div>"; }

Controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Site extends CI_Controller { function __construct(){ parent::__construct(); } public function index(){ $this->home(); } public function home(){ $this->load->model('model_db_get'); $this->load->helper('share'); $db_result['result'] = $this->model_db_get->getAllFrontPage(); $config['base_url'] = base_url()."index.php/site/home/"; $data = array('title' => 'ARBETSNAMN', 'main_content' => 'home_v', 'result' => $db_result['result']); $this->load->view('template', $data); } public function category(){ $this->load->model('model_db_get'); $data = array('title' => 'ARBETSNAMN', 'main_content' => 'category_v'); $this->load->view('template', $data); }

Edit: Bytte ut modellen för att hämta data till den som faktiskt ska användas

Visa signatur

AMD Ryzen 5800X3D | Corsair Hydro H115i RGB Platinum | 32gb G.Skill DDR4 @ 3600mhz | Asus X570-F | PowerColor RX6900XT RedDevil Ultimate | 1TB m.2 SSD gen 4 | 256gb m.2 SSD gen 4 | 1TB HDD | Phanteks Revolt Pro 1000W | Phanteks Eclipse P500A

Permalänk
Medlem
Skrivet av Fjanterifjant:

Hej!

Jag har kört fast igen, håller på snickra något åt webbshophållet men har stött på patrull med en viktig del av vilken PHP/MySQL site som helst.
Problemet är att jag försöker göra någon form av sortering av produkter på denna site genom en GET men är inte helt hundra på hur jag ska ställa rätt fråga i koden.

GET frågan ser ut som följande:
index.php/site/category/tradgard
Vill att man ska kunna fråga på den GET frågan såsom följande:
site = Oviktig egentligen i detta sammanhang då det är själva controllern som används
category = Huvudsidan med olika kategorier, denna del av queryn är vilken sida vi är på
tradgård = I dagsläget så är den kategorin sorterad i databasen som nummer 1, sorterar ut alla produkter som är tilldelade nummer 1 under kollumnen 'category' i databasen.

KOD

Det lättaste settet är att i kontrollern så lägger du till två styckern parametrar. I dessa fall kallade jag dem $tradgard och $id

public function category($tradgard, $id){ $this->load->model('model_db_get'); // skriv ut de två variablarna här. echo $tradgard.$id; $data = array('title' => 'ARBETSNAMN', 'main_content' => 'category_v'); $this->load->view('template', $data); }

Hoppas det var det här du menade

Visa signatur

citera gärna så jag hittar tillbaka!

Permalänk
Skrivet av Gardart:

Det lättaste settet är att i kontrollern så lägger du till två styckern parametrar. I dessa fall kallade jag dem $tradgard och $id

KOD

Hoppas det var det här du menade

Hur kallar jag på dessa parametrar tro och skickar dem vidare in i min modell som sedan hämtar ut berörda rader? Har verkligen stirrat för länge på detta.

Tog förresten fel metod ur min modell:

public function getProductCategory($page,$category){ $query = $this->db->query("SELECT * FROM products WHERE active='1' AND category='$category' ORDER BY id DESC"); return $query->result(); }

Visa signatur

AMD Ryzen 5800X3D | Corsair Hydro H115i RGB Platinum | 32gb G.Skill DDR4 @ 3600mhz | Asus X570-F | PowerColor RX6900XT RedDevil Ultimate | 1TB m.2 SSD gen 4 | 256gb m.2 SSD gen 4 | 1TB HDD | Phanteks Revolt Pro 1000W | Phanteks Eclipse P500A

Permalänk

Fick det att fungera genom att segmentera och köra en jämförelse->översättning av variablerna.

Förmodligen långt ifrån den snyggaste lösningen man kan göra men det fungerar iallafall.

La in detta i category metoden i controllern:

$page = $this->uri->segment(2); $category = $this->uri->segment(3); # Define pageid $page = "2"; # Find and define categoryid if($category == "husohem"){$category = "1";} elseif($category == "bilbatomotor"){$category = "2";} elseif($category == "sport"){$category = "3";} elseif($category == "hemelektronik"){$category = "4";} elseif($category == "kontor"){$category = "5";} elseif($category == "resor"){$category = "6";} elseif($category == "halsa"){$category = "7";} elseif($category == "industri"){$category = "8";} elseif($category == "resturanger"){$category = "9";} elseif($category == "tradgard"){$category = "10";} elseif($category == "sportklader"){$category = "11";} elseif($category == "kladeroskor"){$category = "12";}

Visa signatur

AMD Ryzen 5800X3D | Corsair Hydro H115i RGB Platinum | 32gb G.Skill DDR4 @ 3600mhz | Asus X570-F | PowerColor RX6900XT RedDevil Ultimate | 1TB m.2 SSD gen 4 | 256gb m.2 SSD gen 4 | 1TB HDD | Phanteks Revolt Pro 1000W | Phanteks Eclipse P500A

Permalänk
Inaktiv

Ska du ändå kolla igenom $category kan du lika bra köra en switch.

Sen undrar jag bara om site är den enda kontrollern du har. Då undviker du ju lite av hur bra MVC är. Tex. about, home och shop ska vara controllers, inte methods i en controller.

Permalänk
Skrivet av anon150287:

Ska du ändå kolla igenom $category kan du lika bra köra en switch.

Sen undrar jag bara om site är den enda kontrollern du har. Då undviker du ju lite av hur bra MVC är. Tex. about, home och shop ska vara controllers, inte methods i en controller.

Tur att jag har dig! Haft totalt hjärnstopp några dagar nu känner jag. Semester och allt.
Snickrar om det till en switch nu istället.
Sen, jag hade tänkt att lägga det i olika controllers men har det liggandes i en just nu för att ha en snabbare överblick när jag kodar.

Visa signatur

AMD Ryzen 5800X3D | Corsair Hydro H115i RGB Platinum | 32gb G.Skill DDR4 @ 3600mhz | Asus X570-F | PowerColor RX6900XT RedDevil Ultimate | 1TB m.2 SSD gen 4 | 256gb m.2 SSD gen 4 | 1TB HDD | Phanteks Revolt Pro 1000W | Phanteks Eclipse P500A

Permalänk
Medlem

vill man undvika en stor jädra switch, så kan man ju alltid spara det url-namn som förväntas i databasen. tänk bara på att det måste vara ett unikt index på kolumnen, så du inte råkar döpa två till samma sak.

ex:

+----+--------------------+--------------+ | Id | Name | UrlName | +----+--------------------+--------------+ | 1 | Hus och hem | husohem | | 2 | Bil, båt och motor | bilbatomotor | | 3 | Sport | sport | +----+--------------------+--------------+

då får du iofs göra en join med kategori-tabellen när du skall hämta produkterna, alternativt hämta kategorin först och sedan hämta produkterna om kategorin finns.

$sql = "SELECT p.* FROM categories AS c INNER JOIN products AS p ON p.categoryid = c.id WHERE p.active = ? AND c.UrlName = ? ORDER BY p.id DESC"; $query = $this->db->query($sql, array(1, $category));

Visa signatur

as far as we can tell, the massacre went well...