Applicaties voor één pagina maken met WordPress en Angular.js

Wat je gaat creëren

Het werken met het Angular.js-framework is snel en de moeite waard, en in combinatie met WordPress kan het in een korte tijdsspanne een hele mooie SPA (Single-page Application) maken. Met alle CMS-besturingselementen en plug-ins die WordPress biedt, is dit een interessante kortere weg.

Het thema opzetten

We beginnen met het maken van een nieuw thema met behulp van de _tk standaard thema om te beginnen. Dit is een implementatie van de _s onderstreept thema van Automattic maar met Bootstrap van Twitter geïmplementeerd.

Pak het thema uit GitHub en plaats de bestanden in uw thema's directory:

$ cd-thema's $ wget https://github.com/Themekraft/_tk/archive/master.zip wp-content / themes / $ unzip master.zip Archive: master.zip 69acda231e2a2f8914374df81b89a7aa37d594fa create: _tk-master / inflating: _tk-master /404.php opblazen: _tk-master / archive.php opblazen: _tk-master / comments.php opblazen: _tk-master / content-page.php opblazen: _tk-master / content-single.php ... ## Hernoem de map $ mv _tk-master / angular-bootstrap $ rm -f master.zip 

Nu dat we de _tk startthema, we hebben de NPM pakketjes hoekig en hoekig-route vanuit je themamap (we gebruiken de naam hoekig-bootstrap).

$ cd wp-angular $ npm init #volg je de prompts om je package.json bestand aan te maken ... "author": "", "license": "ISC" Is dit in orde? (Ja) Ja ## Installeer de pakketten $ $ npm installeer hoekige hoekroute - opslaan 
  • U moet initialiseren NPM binnen de themahoofdmap met npm init om het te maken package.json, een bestand dat NPM gebruikt om projecten te beheren.
  • Door de --opslaan vlag in onze npm installeer hoekige hoek-route - opslaan commando dat we vertellen NPM om de modules toe te voegen als afhankelijkheden van ons project.
  • Als we dit project in de toekomst met een andere ontwikkelaar moeten delen, hoeven deze alleen te worden uitgevoerd npm installeren in dezelfde map als de package.json om de pakketten te krijgen.

Nu heb je de pakketten in je node_modules map in uw thema. Neem een ​​kijkje in de directory en je zult verschillende js-bestanden kunnen zien. We zullen gebruiken angular.min.js voor ontwikkeling

Angular initialiseren

Opnemen angular.min.js in WordPress moeten we de functions.php bestand zodat we de scripts in WordPress kunnen plaatsen.

Zoek binnen functies.php de _tk_scripts () functie en voeg het volgende toe aan de onderkant van de functie:

// Laad hoekig wp_enqueue_script ('angularjs', get_template_directory_uri (). '/ Node_modules / angular / angular.min.js'); wp_enqueue_script ('angularjs-route', get_template_directory_uri (). '/ node_modules / angular-route / angular-route.min.js'); wp_enqueue_script ('scripts', get_stylesheet_directory_uri (). '/js/scripts.js', array ('angularjs', 'angularjs-route')); 

Je moet ook maken js / scripts.js-maak nu gewoon een leeg bestand aan.

Vernieuw nu uw thema in een browser en in ontwikkelaarshulpmiddelen die u kunt zien angular.min.js nu inbegrepen.

Partials gebruiken

Angular.js heeft een geweldig systeem om alleen een deel van HTML bij te werken. Om hiervan te profiteren en de hoekig-route module, zullen we een map moeten maken binnen het genoemde thema partials.

$ mkdir partials 

Binnen in de partials map, maak een bestand met de naam main.html voor het testen en voeg de HTML toe die je leuk vindt.

Lokaliseer het Partialspad voor WordPress

Voor Angular om de partials te kunnen laden, moeten we een volledige URL opgeven. Ik had wat problemen met het gebruik van de get_stylesheet_directory_uri () methode, maar probeer het zelf. Als het niet werkt, gebruikt u uw volledige URL.

Voeg het volgende toe aan de _tk_scripts functie hieronder waar u de angularjs en hoekig-route regels uit de laatste stap:

// Met get_stylesheet_directory_uri () wp_localize_script ('scripts', 'localized', array ('partials' => get_stylesheet_directory_uri (). '/ Wp-content / themes / angular-bootstrap / partials /')); 

Als dit niet lukt (wat op het moment van schrijven voor mij was), schrijf dan in de URL, bijv.

// Met hardcoded value wp_localize_script ('scripts', 'localized', array ('partials' => 'http://www.mydomaind.com/wp-content/themes/angular-bootstrap/partials/')); 

WP-API inschakelen

Voor Angular om met WordPress te werken, moeten we de REST-plug-in WP-API inschakelen. Dit is eenvoudig, want het is gewoon de installatie van een plug-in.

Download en installeer de plug-in vanuit git en voer het volgende uit in uw plugins dir:

git clone [email protected]: WP-API / WP-API.git json-rest-api 

Schakel vervolgens de plug-in in uw wp-admin paneel. U kunt JSON-uitvoer zien op your-wordpress.com/wp-json zodra het is ingeschakeld.

Bouw routes

Routes vormen de specifieke pagina's van je blog. We kunnen er een definiëren voor onze main.html nu gedeeltelijk - en stel het in om te worden getoond op de indexpagina van onze WordPress.

Zorg er eerst voor dat de app Angular.js wordt gedefinieerd via de ng-app attribuut, en in header.php maak het volgende:

  ng-app = "wp">   

Hier bellen we de app wp met de ng-app attribuut. Ook hebben we de baseren tag zodat Angular de JSON kan vinden die we hebben ingeschakeld WP-API.

Voeg het volgende toe aan js / scripts.js:

angular.module ('wp', ['ngRoute']) .config (function ($ routeProvider, $ locationProvider) $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', controller: 'Hoofd')) .controller ('Hoofd', functie ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /'). Success (function (res) $ scope .posts = res;);); 

Nu binnen partials / main.html Voeg dit toe:

  • Post.title

En eindelijk binnen index.php, direct daarna get_header.php (), voeg het Angular attribuut toe ng-view op een div label.

Vernieuw de index van uw WordPress en een lijst met opsommingen van uw blogposts wordt nu weergegeven op de startpagina.

Dit komt door de ng-controller een beroep doen op de Hoofd controller van scripts.js en de ng-view attribuut waarin wordt opgegeven waar Angular moet worden weergegeven.

Een bericht weergeven door Slug

Laten we nu de route toevoegen voor het weergeven van een WordPress-blog via de URL-slug.

Open js / scripts.js en pas het bestand aan zodat het als volgt luidt:

angular.module ('wp', ['ngRoute']) .config (function ($ routeProvider, $ locationProvider) $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', controller: 'Hoofd') .when ('/: slug', templateUrl: localized.partials + 'content.html', controller: 'Content') .andere (redirectTo: '/');) .controller ('Main', functie ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /'). Success (function (res) $ scope.posts = res;); ) .controller ('Inhoud', ['$ scope', '$ http', '$ routeParams', functie ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /? filter [naam] = '+ $ routeParams.slug) .success (functie (res) $ scope.post = res [0];);]); 

Door de Inhoud controller, kunnen we de $ http.get URI voor de JSON-berichten en geef de naaktslak als de filterparameter.

Om dit te maken gebruiken we de volgende code: $ http.get ('wp-json / posts /? filter [naam] =' + $ routeParams.slug).

Opmerking: om de /:naaktslak route werken, moet u specificeren /% Postname% / als uw permalink-structuur in de wp-admin.

Zorg ervoor dat u de content.html met het volgende:

Post.title

Post.content

Als u nu de pagina vernieuwt, kunt u naar uw blogberichten navigeren via de links in de lijst met opsommingen die u in de vorige stap hebt gemaakt.

Angular Services gebruiken in WordPress

Tot nu toe hebben we gezien hoe routes kunnen worden gemaakt en kunnen werken met de wp-json API. Voordat we beginnen met het schrijven van logica, hebben we een plaats nodig om te gaan, en dat is binnen een hoek service (in dit voorbeeld gebruiken we een Fabriek service).

Maak een nieuw bestand js / services.js en voeg de volgende code toe om categorieën en berichten op te halen:

 function ThemeService ($ http) var ThemeService = categories: [], posts: [], pageTitle: 'Latest Posts:', currentPage: 1, totalPages: 1, currentUser: ; // Stel de paginatitel in de  tag functie _setTitle (documentTitle, pageTitle) document.querySelector ('title'). innerHTML = documentTitel + '| AngularJS Demo Theme '; ThemeService.pageTitle = pageTitle;  // Setup paginering functie _setArchivePage (berichten, pagina, headers) ThemeService.posts = berichten; ThemeService.currentPage = pagina; ThemeService.totalPages = headers ('X-WP-TotalPages');  ThemeService.getAllCategories = function () // Als ze al zijn ingesteld, hoeven ze niet opnieuw te worden opgehaald als (ThemeService.categories.length) return;  // Haal de categorievoorwaarden op van wp-json retourneer $ http.get ('wp-json / taxonomies / category / terms'). Success (function (res) ThemeService.categories = res;); ; ThemeService.getPosts = functie (pagina) return $ http.get ('wp-json / posts /? Page =' + page + '& filter [posts_per_page] = 1'). Success (function (res, status, headers)  ThemeService.posts = res; page = parseInt (pagina); // Controleer paginavariabele voor geestelijke gezondheid if (isNaN (pagina) || page> headers ('X-WP-TotalPages')) _setTitle ('Pagina niet gevonden', 'Pagina niet gevonden'); else // Behandel paginering als (pagina> 1) _setTitle ('Posts op pagina' + pagina, 'Posts op pagina' + pagina + ':'); else _setTitle ( 'Home', 'Laatste berichten:'); _setArchivePage (res, pagina, headers);); ; return ThemeService;  // Registreer tot slot de service app.factory ('ThemeService', ['$ http', ThemeService]); </pre> <p>Dit is een standaard fabrieksinstelling, waar we twee interne functies hebben <code>_setTitle</code> en <code>_setArchivePage</code>. Deze methoden worden aangeroepen <code>getPosts</code> en <code>getCategories</code> om de huidige paginatitel bij te werken en ook een intern geheel getal in te stellen om te weten naar welk paginanummer we kijken.</p> <p>We zullen moeten beginnen met het gebruik van de <code>ngSanitize</code> module voor het parseren van ingangen voor onze service. Installeer dit met <code>NPM</code> zo in je themamap:</p> <pre>$ npm installeer angular-sanitize - save </pre> <p>De <code>ThemeService</code> is gewoon een standaard JavaScript-object waarmee via een categorie een zoekopdracht wordt uitgevoerd <code>$ http.get</code>, zoals het is <code>getPosts</code> methode. We zullen onze controller nu bewust maken van deze service. Open <code>scripts.js</code> en wijzig de controller om op te letten <code>ThemeService</code>.</p> <pre>// Hoofdcontroller app.controller ('Hoofd', ['$ scope', '$ http', 'ThemeService', functie ($ scope, $ http, ThemeService) // Get Categories from ThemeService ThemeService.getAllCategories (); // Haal de eerste pagina met berichten op van ThemeService ThemeService.getPosts (1); $ scope.data = ThemeService;]); </pre> <p>Vergeet niet om de <code>hoekige ontsmetten</code> module in uw <code>scripts.js</code> ook op de eerste regel met:</p> <pre>var app = angular.module ('wp', ['ngRoute', 'ngSanitize']); </pre> <p>Eindelijk moet je zorgen voor de <code>js / services.js</code> is zowel in WordPress als in de wachtrij geplaatst <code>hoekige ontsmetten</code> module. Doe dit door het wijzigen van de <code>functions.php</code> bestand en het toevoegen van de volgende voor de <code>wp_localize_script</code> bellen:</p> <pre>wp_enqueue_script ('angularjs-sanitize', get_stylesheet_directory_uri (). '/node_modules/angular-sanitize/angular-sanitize.min.js'); wp_enqueue_script ('theme-service', get_stylesheet_directory_uri (). '/js/services.js'); </pre> <p>Nu moeten we het updaten <code>main.html</code> gedeeltelijk om deze categorieën weer te geven die worden geleverd door de Themaservice.</p> <pre><h1>Categorieën</h1> <ul> <li ng-repeat="category in data.categories"> <span ng-if="current_category_id && category.ID == current_category_id" ng-bind-html="category.name"></span>  </li> </ul> <p> Data.pageTitle</p> <ul> <li ng-repeat="post in data.posts">  <img ng-src="post.featured_image_thumbnail_url" alt=" Post.featured_image.title.rendered" /> <div ng-bind-html="post.excerpt.rendered"></div> </li> </ul> </pre> <p>U kunt nu uw berichten en categorieën zien op uw startpagina via <code>ng-view</code> met behulp van een <code>fabriek</code> service voor Angular. Het voordeel hiervan is dat alle componenten over de gegevens beschikken. We kunnen nu het object Categorieën delen tussen al onze controllers in onze routes.</p> <h2>Dingen verder brengen</h2> <p>Nu we een service hebben ingesteld voor ons thema, kunnen we doorgaan met het ontwikkelen van de gegevenslaag en Bootstrap-styling opnemen in de geretourneerde HTML.</p> <p>De mogelijkheden nu Angular is geconfigureerd in uw thema zijn echt eindeloos en door de aanwezige repository te bekijken, heeft u een snel startpunt voor het maken van Angular- en Bootstrap-enabled WordPress-toepassingen met één pagina.</p>


<div class="rek-block">
	<center>	
			<ins class="adsbygoogle"
			style="display:inline-block;width:580px;height:400px"
			data-ad-client="ca-pub-3810161443300697"
			data-ad-slot="9434875811"></ins>
	   <script>
	   (adsbygoogle = window.adsbygoogle || []).push({});
	   </script>
	</center>
</div>


<div class="h-alltags">
<a href="articles/code">Code</a>
</div>

		</div>

</div>
</div>




</div>


<div class="next_posts clearfix">
	<div class="n_post">
        
		<div class="next_posts-h1 left_nh1"><a href="/articles/music/creating-skrillex-style-tech-basslines-in-ni-massive-adjusting-parameters.html">Creëren van Skibrlex Style Tech Basslines in NI Massive - Parameters aanpassen</a></div>
			
			<div class="next_posts-img" style="background-image: url('//accentsconagua.com/img/images_24/creating-skrillex-style-tech-basslines-in-ni-massive-adjusting-parameters_3.jpg');"></div>	
			
        				
	</div>		
	<div class="n_post">
        
		<div class="next_posts-h1 right_nh1"><a href="/articles/design/creating-simple-origami-style-typography-in-illustrator.html">Eenvoudige Origami-stijltypografie maken in Illustrator</a></div>
			
			<div class="next_posts-img" style="background-image: url('//accentsconagua.com/img/images_26_1/creating-simple-origami-style-typography-in-illustrator_23.jpg');"></div>
					
        
	</div>
</div>


<footer>
	<div class="container">
			<div class="footer-langs">
					<ul class="site-langs-list">
							<li><a href="https://www.accentsconagua.com"><i class="flag flag-DE"></i>Deutsch</a></li>					
							<li><a href="https://fr.accentsconagua.com"><i class="flag flag-FR"></i>Français</a></li>
							<li><a href="https://nl.accentsconagua.com"><i class="flag flag-NL"></i>Nederlands</a></li>
							<li><a href="https://no.accentsconagua.com"><i class="flag flag-NO"></i>Norsk</a></li>
							<li><a href="https://sv.accentsconagua.com"><i class="flag flag-SE"></i>Svenska</a></li>
							<li><a href="https://it.accentsconagua.com"><i class="flag flag-IT"></i>Italiano</a></li>
							<li><a href="https://es.accentsconagua.com"><i class="flag flag-ES"></i>Español</a></li>
							<li><a href="https://ro.accentsconagua.com"><i class="flag flag-RO"></i>Românesc</a></li>
					</ul>
				</div>
				
			<div class="h-block"><a href="/">nl.accentsconagua.com</a><div class="h-block-a"></div></div>
			<div class="footer-text">
				Interessante informatie en nuttige tips over programmeren. Website ontwikkeling, webdesign en webontwikkeling. Photoshop-zelfstudies. Creatie van computerspellen en mobiele applicaties. Word een volledig professionele programmeur.
			</div>
	</div>
</footer>

<div class="search">
	<img class="searchico" src="//accentsconagua.com/img/search.svg" alt="">
</div>
	<div class="modal">
			<div class="modal-content">
							<span class="close-button">×</span>

							<input class="searchmain" type="text" id="search-input" placeholder="Zoeken...">
							<ul class="searchli" id="results-container"></ul>

						</div>
</div>


<link rel="stylesheet" href="css/flags.css">

<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
  "popup": {
	"background": "#edeff5",
	"text": "#838391"
  },
  "button": {
	"background": "#4b81e8"
  }
},
"theme": "classic",
"position": "bottom-right"
})});
</script>


	<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
	<script src="js/scripts.min.js"></script>	
	<script src="js/common.js"></script>
	<link rel="stylesheet" href="css/fontawesome-all.min.css">

	<script>
			var modal = document.querySelector(".modal");
			var trigger = document.querySelector(".search");
			var closeButton = document.querySelector(".close-button");

			function toggleModal() {
						modal.classList.toggle("show-modal");
			}

			function windowOnClick(event) {
						if (event.target === modal) {
										toggleModal();
						}
			}

			trigger.addEventListener("click", toggleModal);
			closeButton.addEventListener("click", toggleModal);
			window.addEventListener("click", windowOnClick);
</script>



    <script src="https://unpkg.com/simple-jekyll-search@1.5.0/dest/simple-jekyll-search.min.js"></script>

<script>
        SimpleJekyllSearch({
          searchInput: document.getElementById('search-input'),
          resultsContainer: document.getElementById('results-container'),
          json: '/search.json',
          searchResultTemplate: '<li><a href="{url}">{title}</a></li>'
        })
</script>

<script src="jquery.unveil2.min.js"></script>
<script>
	$('img').unveil();
</script>

</body>
</html>