Welkom bij Joomla!NL

Om alle mogelijkheden van dit forum te kunnen gebruiken, moet je je eerst registreren.

Vermeld in iedere vraag duidelijk:
  1. De versie van Joomla! 3.X die je gebruikt
  2. De volledige url van je website indien mogelijk.
  3. De versie van de extensie waar de vraag over gaat.

opgelost Paginanavigatie d.m.v. aparte knoppen en swipe besturing

Paginanavigatie d.m.v. aparte knoppen en swipe besturing

16 jul 2013 22:17 - 16 jul 2013 23:56
#1
Beste allemaal,

Ik ben relatief onervaren in het gebruik van javascript en php, dus heb dringend hulp nodig.

Mijn omgeving:
- Joomla 3.1.1
- jQuery 1.10.2
- jQuery Mobile 1.3.1

Wat wil ik bereiken:
Ik wil kunnen navigeren tussen artikelen binnen één categorie. Nu kan dat natuurlijk al met Joomla's Pagenavigation plugin, maar ik wil het net even anders!
  1. Ik wil twee knoppen 'buttonPrev' en 'buttonNext' niet binnen het content gebied, maar 'buiten' het content gebied hebben op een vaste plek binnen het template, bijvoorbeeld in een div 'navigatie' binnen de footer.
  2. Ik wil niet alleen met die knoppen kunnen navigeren, maar ook door het afvangen van 'horizontale swipe events' voor gebruik op tablets (vandaar jQuery Mobile)
  3. Indien doormiddel van het klikken op buttons danwel door swipen naar een ander artikel binnen de categorie wordt genavigeerd, wil ik voorkomen dat de pagina in zijn geheel opnieuw geladen wordt, maar dat alleen het artikel binnen de div 'content' vervangen wordt en de
  4. url overeenkomstig wordt aangepast.

De globale structuur van de oplossing die ik voor ogen heb:
  • Er moet een php-script 'pagenavigationCustom.php' komen (server-side) welke aangeroepen kan worden vanuit de client-side door middel van javascript. Het php-script moet twee waarden retourneren namelijk de url van de volgende pagina (var urlNext) en de url van de 'vorige' pagina (var urlPrev). Ik wil daarvoor een gemodificeerde versie van Joomla's Pagenavigation plugin gebruiken.
  • Er moeten meerdere javascripts/functies komen.
)

Deze javascript functies zijn volgens mij:
  1. Een functie 'geturlsPrevNext' die het php-script aanroept en daarvan de url's van de vorige en volgende artikelen geretourneerd krijgt en deze vervolgens opslaat in bijvoorbeeld de variabelen 'urlPrev' en 'urlNext'. De geretourneerde waarde kan ook ' ' zijn indien het het eerste of laatste artikel binnen de categorie betreft.
  2. Meerdere functies die de verschillende 'click' en 'swipe' events afvangen waarbij- zowel het klikken op de knop 'buttonPrev' als het swipen naar rechts 'swipeleft' leid tot het aanroepen van een functie 'loadArticle' die naar het betreffende artikel navigeert en zowel het klikken op de knop 'buttonNext' als het swipen naar link 'swiperight' leid tot het aanroepen van een functie 'loadArticle' die naar het betreffende artikel navigeert.
  3. Een functie 'loadArticle' die navigeert naar het betreffende artikel
  4. Indien er een url doorgegeven wordt die 'leeg' is (bij het eerste en laatste artikel binnen de categorie), moet de betreffende knop niet getoond worden.

Ik heb een kopie van Joomla's Pagenavigation Plugin (de index.php) file in mijn html directory geplaatst en vervolgens het alleen zodanig aangepast dat de twee variabelen in een array worden geplaatst die geretourneerd kan worden aan een aanroepende javascript functie.
Code:
<?php // Op Joomla's Pagenavigation Plugin gebaseerde functie die een array retourneerd die het vorige en volgende artikel bevat. Het script dat deze functie bevat heet 'getprevnextarticle.php' en staat in mijn template's HTML directory. $app = JFactory::getApplication(); $view = $app->input->get('view'); $print = $app->input->getBool('print'); if ($print) { return false; } $db = JFactory::getDbo(); $user = JFactory::getUser(); $lang = JFactory::getLanguage(); $nullDate = $db->getNullDate(); $date = JFactory::getDate(); $now = $date->toSql(); $uid = $row->id; $option = 'com_content'; $canPublish = $user->authorise('core.edit.state', $option . '.article.' . $row->id); // The following is needed as different menu items types utilise a different param to control ordering. // For Blogs the `orderby_sec` param is the order controlling param. // For Table and List views it is the `orderby` param. $params_list = $params->toArray(); if (array_key_exists('orderby_sec', $params_list)) { $order_method = $params->get('orderby_sec', ''); } else { $order_method = $params->get('orderby', ''); } // Additional check for invalid sort ordering. if ($order_method == 'front') { $order_method = ''; } // Determine sort order. switch ($order_method) { case 'date' : $orderby = 'a.created'; break; case 'rdate' : $orderby = 'a.created DESC'; break; case 'alpha' : $orderby = 'a.title'; break; case 'ralpha' : $orderby = 'a.title DESC'; break; case 'hits' : $orderby = 'a.hits'; break; case 'rhits' : $orderby = 'a.hits DESC'; break; case 'order' : $orderby = 'a.ordering'; break; case 'author' : $orderby = 'a.created_by_alias, u.name'; break; case 'rauthor' : $orderby = 'a.created_by_alias DESC, u.name DESC'; break; case 'front' : $orderby = 'f.ordering'; break; default : $orderby = 'a.ordering'; break; } $xwhere = ' AND (a.state = 1 OR a.state = -1)' . ' AND (publish_up = ' . $db->quote($nullDate) . ' OR publish_up <= ' . $db->quote($now) . ')' . ' AND (publish_down = ' . $db->quote($nullDate) . ' OR publish_down >= ' . $db->quote($now) . ')'; // Array of articles in same category correctly ordered. $query = $db->getQuery(true); // Sqlsrv changes $case_when = ' CASE WHEN '; $case_when .= $query->charLength('a.alias', '!=', '0'); $case_when .= ' THEN '; $a_id = $query->castAsChar('a.id'); $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':'); $case_when .= ' ELSE '; $case_when .= $a_id . ' END as slug'; $case_when1 = ' CASE WHEN '; $case_when1 .= $query->charLength('cc.alias', '!=', '0'); $case_when1 .= ' THEN '; $c_id = $query->castAsChar('cc.id'); $case_when1 .= $query->concatenate(array($c_id, 'cc.alias'), ':'); $case_when1 .= ' ELSE '; $case_when1 .= $c_id . ' END as catslug'; $query->select('a.id,' . $case_when . ',' . $case_when1) ->from('#__content AS a') ->join('LEFT', '#__categories AS cc ON cc.id = a.catid') ->where( 'a.catid = ' . (int) $row->catid . ' AND a.state = ' . (int) $row->state . ($canPublish ? '' : ' AND a.access = ' . (int) $row->access) . $xwhere ); $query->order($orderby); if ($app->isSite() && $app->getLanguageFilter()) { $query->where('a.language in (' . $db->quote($lang->getTag()) . ',' . $db->quote('*') . ')'); } $db->setQuery($query); $list = $db->loadObjectList('id'); // This check needed if incorrect Itemid is given resulting in an incorrect result. if (!is_array($list)) { $list = array(); } reset($list); // Location of current content item in array list. $location = array_search($uid, array_keys($list)); $rows = array_values($list); $row->prev = null; $row->next = null; if ($location - 1 >= 0) { // The previous content item cannot be in the array position -1. $row->prev = $rows[$location - 1]; } if (($location + 1) < count($rows)) { // The next content item cannot be in an array position greater than the number of array postions. $row->next = $rows[$location + 1]; } $pnSpace = ""; if (JText::_('JGLOBAL_LT') || JText::_('JGLOBAL_GT')) { $pnSpace = " "; } if ($row->prev) { $row->prev = JRoute::_(ContentHelperRoute::getArticleRoute($row->prev->slug, $row->prev->catslug)); } else { $row->prev = ''; } if ($row->next) { $row->next = JRoute::_(ContentHelperRoute::getArticleRoute($row->next->slug, $row->next->catslug)); } else { $row->next = ''; } $array = array($row->prev, $row->next); echo json_encode($array); ?>

Nu wil ik met een javascript het bovenstaande php-script aanroepen en vervolgens de geretourneerde url's van het vorige en volgende
artikel opnemen en opslaan in twee lokale javascript variabelen zodat ik deze weer kan gebruiken, niet alleen voor de knoppen,
maar ook voor het horizontaal kunnen swipen van artikel naar artikel op een tablet.

Vraag:
Hoe haal ik de variabelen in mijn clientside javascript??

Ik dacht aan het volgende:
Code:
<script type="text/javascript"> function geturlsPrevNext(){ $.ajax({ type: "POST", url: '../cannazine/html/getprevnextarticle.php', data: { } }).done(function(msg) { var urlPrev == "$msg.[0]"; var urlNext == "$msg.[1]"; }; }; </script>

Doe ik iets fout in het PHP-script of begrijp ik gewoon niet hoe ik variabelen naar javascript overhaal?

Alvast bedankt,

mvg. Rien Kok

Edit Juliank92: Ik heb je topic verplaatst naar het juiste forum.
Laatst bewerkt 16 jul 2013 23:56 door Juliank92.
Discussie gesloten.
  • rien
  • rien's berichtenfoto Heeft onderwerp gestart
  • Nieuw op Joomla!NL
  • Nieuw op Joomla!NL
  • Berichten: 2

Paginanavigatie d.m.v. aparte knoppen en swipe besturing

16 jul 2013 23:53 - 17 jul 2013 18:03
#2
Hi Rien,
bij deze heet ik je namens het Joomla!NL team van harte welkom op dit forum.

Hoe haal ik de variabelen in mijn clientside javascript??


Edit Juliank92: foutieve code verwijderd. Deze is namelijk onbruikbaar.
Groetjes, Julian.

Voordat je een vraag post, gebruik eerst de zoekfunctie van ons forum eens.
Vragen via dit forum
Wil je Joomla!NL steunen? Dat kan met een donatie.
Laatst bewerkt 17 jul 2013 18:03 door Juliank92.
Discussie gesloten.
  • Juliank92
  • Juliank92's Profielfoto
  • Algemeen Moderator
  • Algemeen Moderator
  • Berichten: 1722

Paginanavigatie d.m.v. aparte knoppen en swipe besturing

17 jul 2013 16:00
#3
Best Julian,

Ik begrijp jouw antwoord niet helemaal.
Als ik twee of meer waarden vanuit PHP wil retourneren, dan kan ik dat toch alleen doen d.m.v. een array (of heb ik dat verkeerd begrepen).

Bedoel je dat ik die array in var_msg moet stoppen?
Hoe splits ik die twee variabelen dan weer uit?

gr. Rien
Discussie gesloten.
  • rien
  • rien's berichtenfoto Heeft onderwerp gestart
  • Nieuw op Joomla!NL
  • Nieuw op Joomla!NL
  • Berichten: 2

Paginanavigatie d.m.v. aparte knoppen en swipe besturing

17 jul 2013 18:05
#4
Hoi Rien,

Ik wou gisteravond even een voorbeeldje met het bovenstaande laten zien, alleen is de code fout, en dus ook onbruikbaar. Was er niet helemaal bij met me hoofd (denk ik zo...;)).

Ik zal hier een voorbeeldje, wat uitgewerkt is posten. Waarbij je dan hopelijk enig inzicht krijgt, bij wat ik bedoel. Ik heb hierbij ook even een array toegevoegd.

index.php
Code:
<?php // Array aanmaken $array = array("http://google.nl","Als u op ok drukt gaat u naar Google","Klik hier"); // Bestand met JS inladen $replace = file_get_contents("js.html"); // Vervangen $replace = str_replace('{$var_link}', $array[0], $replace); $replace = str_replace('{$var_msg}', $array[1], $replace); $replace = str_replace('{$var_text}', $array[2], $replace); echo("$replace"); ?>

js.html
Code:
<!DOCTYPE html> <html> <body> <script type="text/javascript"> <!-- function confirmation() { var answer = confirm("{$var_msg}") if (answer){ window.location = "{$var_link}"; } } //--> </script> <a onclick="confirmation()" href="#"> <span>{$var_text}</span> </a> </body> </html>

Ik weet niet of er nog andere manieren zijn om een PHP variable te krijgen in JS, maar dit is er in elk geval een.
Groetjes, Julian.

Voordat je een vraag post, gebruik eerst de zoekfunctie van ons forum eens.
Vragen via dit forum
Wil je Joomla!NL steunen? Dat kan met een donatie.
Discussie gesloten.
  • Juliank92
  • Juliank92's Profielfoto
  • Algemeen Moderator
  • Algemeen Moderator
  • Berichten: 1722
Moderators: PeterJuliank92JelleRomke
Tijd voor maken pagina: 0.977 seconden

Wil je Joomla!NL steunen?

Steun Joomla!NLAlle teamleden werken enthousiast, op vrijwillige basis, mee aan Joomla!NL. Maar een website met forum kost nu eenmaal geld. Dus als je Joomla!NL wilt steunen, dan kan dat, graag zelfs!

Lees hier meer informatie