Kære udviklere!
Her kommer en lidt indviklet forklaring, samt et indviklet spørgsmål. Det drejer sig om at jeg er ved at udvikle mit eget CMS til mit website. Lige nu fungerer det bare på localhost naturligvis. Jeg er blevet meget inspireret af hvordan Wordpress fungerer i forbindelse med artikelvisninger osv. Det er lidt den måde jeg prøver at efterligne.
På nuværende tidspunkt har jeg kontrol over hvilke sider man er inde på, og hvad disse sider skal kunne vise. Dog har jeg et problem når jeg skal have indhold ind på siderne.
Eksempelvis har jeg tilknyttet min forside til en statisk side (altså via database) så den viser en rå tekst jeg har skrevet. Dvs. at der kun fremkommer et enkelt resultat. Når jeg så vil lave en arkiv-visningsside, vil der jo naturligvis fremkommer flere resultater end på f.eks. forsiden.
Filerne ser således ud:
content/
--themes/
----green-adventure/
------css/
--------style.css
------template-parts/
--------content.php
------index.php
------archive.php
--functions.php
--index.php
^Håber at overstående er til at forstå. Jeg kører nemlig med temaer.
I
functions.php opretter jeg alle funktionerne til content delen af mit tema. Derved også hvad der bliver vist alt afhængigt af hvilken side du er inde på.
index.php- <div class='main-container'>
- <?php
- if( have_posts() ) :
-
- $i = 0;
-
- while( have_posts() ):
-
- get_template_part();
-
- $i++;
-
- if($i === count( the_post() )) {
- break 1;
- }
-
- endwhile;
-
- endif;
- ?>
- </div>
archive.php- <div class='main-container'>
- <?php
- if( have_posts() ) :
-
- $i = 0;
-
- while( have_posts() ):
-
- get_template_part();
-
- $i++;
-
- if($i === count( the_post() )) {
- break 1;
- }
-
- endwhile;
-
- endif;
- ?>
- </div>
functions.php- <?php
-
- if(basename($_SERVER['PHP_SELF']) == 'functions.php') { header('Location: ../'); }
-
- $contentData = "";
-
- function page_exists($id) {
- global $db;
-
- $dataList = $db->Select( 'SELECT ID FROM pages WHERE ID = ' . $id );
-
- return (count($dataList) == 1);
- }
-
- function the_post() {
- global $contentData;
- //if($contentData !== "") { return $contentData; }
-
- if($contentData !== "") {
- return $contentData;
- }
- }
-
- function the_title() {
- global $contentData;
-
- $data = 'N/A';
-
- if($contentData !== "") { $data = $contentData['title']; }
-
- return $data;
- }
-
- function the_ID() {
- global $contentData;
-
- $data = 'N/A';
-
- if($contentData !== "") { $data = $contentData['ID']; }
-
- return $data;
- }
-
- function the_content() {
- global $contentData;
-
- $data = 'N/A';
-
- if($contentData !== "") { $data = $contentData['content']; }
-
- return $data;
- }
-
- function _count() {
- global $contentData;
- return count($contentData);
- }
-
- function have_posts() {
- global $db, $contentData;
-
- $p = ((isset($_GET['p'])) ? $_GET['p'] : null);
-
- if($p === null || $p === "" || empty($p)) {
- $dataList = $db->Select( 'SELECT frontpage_id FROM options WHERE ID = 1' );
-
- if(count($dataList === 1)) {
- $frontpageId = $dataList[0]['frontpage_id'];
-
- if($frontpageId != 0) {
- if(page_exists($frontpageId)) {
- $contentData = $db->Select( 'SELECT * FROM pages WHERE ID = ' . $frontpageId );
- return true;
- } else {
- /* show latest news and so on */
- }
- }
- } else {
- die('Something went wrong!');
- }
- } else {
- if($p === 'archive') {
- $dataList = $db->Select( 'SELECT posts.*, categories.alias FROM posts INNER JOIN categories ON posts.category_id = categories.ID' );
-
- if(count($dataList > 0)) {
- $contentData = $dataList;
- return true;
- }
- }
- }
- }
-
- function get_template_part($file = 'content.php') {
- include 'content/themes/' . get_template_dir() . '/template-parts/' . $file;
- }
Jeg prøver på at skrive samme kode på alle filerne der skal vise sider, med ændringer hvis disse skal forekomme. Disse posts jeg laver ligger i arrays, og har derfor felter såsom 'title', 'ID', 'content' osv. Disse vises i mine template-parts. Eksempelvis med et kald til
the_title() eller
the_content().
ProblemetJeg kan ikke finde ud af hvordan jeg skal loope det her data da jeg gerne vil bruge funktioner til at kalde på dataen, men mit data ligger i arrays. Mit mål var at kunne retunere mit data fra
functions.php og hente den i
index.php eller
archive.php ved blot at skrive noget i stil med
- if( have_posts() ):
- while( have_posts() ):
- get_template_part('content.php');
- endwhile;
- endif;
Men så fortsætter den bare med at loope data.
Hvis der er nogen der kunne have en løsning, eller en idé til hvad jeg kunne gøre - så ville jeg blive super glad!
Men som sagt, det er indviklet. Så hvis der er nogen der ikke helt forstår mit problem, så vil jeg gerne uddybe det endnu mere.
På forhånd tak!