Crearea de aplicații cu o singură pagină cu WordPress și Angular.js

Ce veți crea

Colaborarea cu cadrul Angular.js este rapidă și plină de satisfacții, iar în combinație cu WordPress se poate face o SPA cu adevărat plăcută (Application Single Page) într-o perioadă scurtă de timp. Cu toate controalele CMS și plug-inurile oferite de WordPress, aceasta este o scurtă descriere interesantă.

Configurarea temei

Vom începe să creați o nouă temă folosind _tk boilerplate temă pentru a începe cu. Aceasta este o punere în aplicare a _S subliniază tema de la Automattic, dar cu bootstrap-ul Twitter implementat.

Luați tema de la GitHub și plasați fișierele în tematică director:

$ cd temele $ wget https://github.com/Themekraft/_tk/archive/master.zip wp-content / themes / $ unzip master.zip Arhiva: master.zip 69acda231e2a2f8914374df81b89a7aa37d594fa crearea: _tk-master / inflating: _tk-master /Tmp.php inflație: _tk-master / content-page.php inflație: _tk-master / content-single.php ... ## Redenumiți directorul $ mv _tk-master / unghiul-bootstrap $ rm -f master.zip 

Acum că avem _tk starter temă, vom avea nevoie de NPM pachete unghiular și unghiular-route din interiorul directorului temă (folosim numele unghiular-bootstrap).

$ cd wp-unghiular $ npm init # urmați instrucțiunile pentru a crea fișierul package.json ... "autor": "", "license": "ISC" Este bine? (da) da ## Instalați pachetele $ $ npm pentru a instala unghiul unghiular-rută 
  • Trebuie să inițializați NPM în directorul de teme cu npm init în scopul de a crea package.json, un fișier care NPM folosește pentru a gestiona proiectele.
  • Prin utilizarea funcției --Salvați în pavilionul nostru npm instala unghiular unghiular - rută comanda pe care o spunem NPM pentru a adăuga modulele ca dependente de proiectul nostru.
  • În viitor, dacă avem nevoie să împărtășim acest proiect cu un alt dezvoltator, va trebui doar să ruleze npm install în același director ca și package.json pentru a obține pachetele.

Acum veți avea pachetele din dvs. node_modules director în interiorul temei. Aruncați o privire în director și veți putea vedea mai multe fișiere JS. Vom folosi angular.min.js pentru dezvoltare

Inițializarea unghiului

A include angular.min.js în WordPress trebuie să modificăm functions.php astfel incat sa putem encripta scripturile din WordPress.

În interiorul funcțiilor.php, găsiți _tk_scripts () funcția și adăugați următoarele în partea de jos a funcției:

// Încărcați unghiul 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 / unghiular-rută / unghiular-route.min.js'); wp_enqueue_script ('scripts', get_stylesheet_directory_uri (). '/js/scripts.js', array ('angularjs', 'angularjs-route')); 

Va trebui, de asemenea, să creați js / scripts.js-acum creați doar un fișier gol.

Acum, reîmprospătați tema într-un browser și în instrumente de dezvoltatori pe care le veți putea vedea angular.min.js incluse acum.

Utilizarea partialelor

Angular.js are un sistem excelent pentru actualizarea doar a unei bucăți parțiale de cod HTML. Pentru a profita de acest lucru și de unghiular-route modul, va trebui să creați un director în interiorul temei numite amprente parțiale.

$ mkdir partials 

În interiorul amprente parțiale director, creați un fișier numit main.html pentru a testa și a adăuga orice HTML doriți.

Localizați calea parțial pentru WordPress

Pentru ca Angular să poată încărca partialele, trebuie să furnizăm o adresă URL completă. Am avut unele probleme cu utilizarea get_stylesheet_directory_uri () metodă, dar încercați-o pentru dvs. Dacă nu funcționează, utilizați adresa URL completă.

Adăugați următoarele la _tk_scripts funcția de mai jos în cazul în care ați adăugat angularjs și unghiular-route linii din ultimul pas:

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

Dacă acest lucru nu reușește (care la momentul scrisului a fost pentru mine), scrieți în URL, de ex.

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

Activarea WP-API

Pentru ca Angular să lucreze cu WordPress, trebuie să activați pluginul WP-API REST. Acest lucru este simplu, deoarece este doar instalarea unui plugin.

Descărcați și instalați pluginul de la git și rulați următoarele în Plugin-uri dir:

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

Apoi, activați pluginul în wp-admin panou. Veți putea vedea ieșirea JSON la your-wordpress.com/wp-json odată ce este activată.

Construirea de trasee

Rutele alcătuiesc paginile specifice ale blogului dvs. Putem defini una pentru noi main.html parcurgeți acum - și configurați-o pentru a fi afișată pe pagina index a WordPress.

Mai întâi, asigurați-vă că aplicația Angular.js este definită prin intermediul funcției ng-app atribut și în header.php efectuați următoarele:

  ng-app = "wp">   

Aici sunăm aplicația wp cu ng-app atribut. De asemenea, am setat baza astfel încât Angular să poată găsi JSON-ul în care am activat WP-API.

Adăugați următoarele la js / scripts.js:

($): $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', controler: 'Main')) .controller ('Principal', functie ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /') .posts = res;);); 

Acum înăuntru amprente parțiale / main.html adaugă asta:

  • Post.title

Și, în sfârșit, înăuntru index.php, imediat după get_header.php (), adăugați atributul Angular ng-view pe o div etichetă.

Reîmprospătați indexul WordPress și o listă cu gloanțe a postărilor din blog va fi afișată acum pe pagina de pornire.

Acest lucru se datorează ng-controler invocând Principal controler de la scripts.js si ng-view atribut specificând unde ar trebui să facă Angular.

Afișarea mesajului Post By Slug

Să adăugăm acum traseul pentru afișarea unui blog WordPress prin intermediul serviciului URL de conținut.

Deschis js / scripts.js și ajustați fișierul după cum urmează:

($): $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', controler: 'Main')) .when ('/: slug', templateUrl: localized.partials + 'content.html', controler: 'Content') (Funcția (res) ($ scope.posts = res;); () ) .controller ("Conținut", ['$ scope', '$ http', '$ routeParams', funcția ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /? [nume] = '+ $ routeParams.slug) .success (funcția (res) $ scope.post = res [0];);]); 

Prin adăugarea Conţinut controler, putem specifica $ http.get URI pentru posturile JSON și specificați melc ca parametru filtru.

Pentru a crea acest lucru, folosim următorul cod: $ http.get ('wp-json / posts /? filter [nume] =' + $ routeParams.slug).

Notă: Pentru a obține /:melc traseu de lucru, trebuie să specificați /% Postname% / ca structura dvs. permalink în wp-admin.

Asigurați-vă că ați setat content.html cu urmatoarele:

Post.title

Post.content

Acum, dacă actualizați pagina, veți putea naviga la postările dvs. de pe blog prin intermediul link-urilor din lista de gloanțe pe care ați făcut-o în pasul anterior.

Utilizarea serviciilor unghiulare în WordPress

Până acum am văzut cum să creați rute și să începeți să lucrați cu wp-JSON API-ul. Înainte de a începe să scriem orice logică avem nevoie de un loc pentru ca ea să meargă, și asta se află într-un unghiular serviciu (în acest exemplu folosim a Fabrică serviciu).

Creați un fișier nou js / services.js și adăugați următorul cod pentru a prelua categorii și postări:

 funcția ThemeService ($ http) var ThemeService = categories: [], mesaje: [], pageTitle: 'Ultimele mesaje:', currentPage: 1, totalPages: 1, currentUser: ; // Setați titlul paginii în  tag-ul _setTitle (documentTitle, pageTitle) document.querySelector ('title') innerHTML = documentTitle + '| AngularJS Demo Theme '; ThemeService.pageTitle = Titlul paginii;  // Funcția de paginare setare _setArchivePage (postări, pagină, anteturi) ThemeService.posts = posts; ThemeService.currentPage = pagina; ThemeService.totalPages = anteturi ("X-WP-TotalPages");  ThemeService.getAllCategories = funcția () // Dacă acestea sunt deja setate, nu trebuie să le reintroduceți dacă (ThemeService.categories.length) return;  // Obțineți termenii categoriei de la wp-json returnați $ http.get ('wp-json / taxonomies / category / terms') succes (funcția (res) ThemeService.categories = res;); ; ThemeService.getPosts = funcția (pagina) return $ http.get ('wp-json / posts /? Page =' + pagina + 'și filtra [posts_per_page] = 1'). Dacă pagina (isNaN (page) || page> headers ('X-WP-TotalPages')) _setTitle (Pagina nu a fost găsită, "Pagina nu a fost găsită"); altceva // Deal cu paginare dacă (pagina> 1) _setTitle ("Postări pe pagină" +, "Postări pe pagină" + pagina + ': 'Acasă', 'Ultimele mesaje:'); _setArchivePage (res, pagina, anteturi);); ; returna ThemeService;  În sfârșit, înregistrați serviciul app.factory ("ThemeService", ['$ http', ThemeService]); </pre> <p>Aceasta este o configurație de bază a fabricii, unde avem două funcții interne <code>_setTitle</code> și <code>_setArchivePage</code>. Aceste metode sunt numite de la <code>getPosts</code> și <code>getCategories</code> pentru a actualiza titlul paginii curente și, de asemenea, a seta un număr întreg intern pentru a afla numărul paginii la care ne uităm.</p> <p>Va trebui să începem să folosim <code>ngSanitize</code> modul de analiză a intrărilor în serviciul nostru. Instalați acest lucru cu <code>NPM</code> așa că în interiorul directorului temă:</p> <pre>$ npm instalare unghiulară-dezinfectare - salvați </pre> <p> <code>ThemeService</code> este doar un obiect de bază JavaScript care efectuează o căutare de categorii prin <code>$ http.get</code>, așa cum este <code>getPosts</code> metodă. Acum îi vom face pe con- trolul nostru să cunoască acest serviciu. Deschis <code>scripts.js</code> și modificați controlerul pentru a fi conștienți de <code>ThemeService</code>.</p> <pre>// Principal controller app.controller ('Main', ['$ scope', '$ http', 'ThemeService', funcția ($ scope, $ http, ThemeService) // Get Categorii de la ThemeService ThemeService.getAllCategories (); // Obțineți prima pagină a postărilor de la ThemeService ThemeService.getPosts (1); $ scope.data = ThemeService;]); </pre> <p>Nu uitați să activați <code>unghiular-steriliza</code> modul în interiorul dvs. <code>scripts.js</code> de asemenea, pe prima linie cu:</p> <pre>var app = angular.module ('wp', ['ngRoute', 'ngSanitize')); </pre> <p>În cele din urmă, va trebui să vă asigurați <code>js / services.js</code> este încorporat în WordPress, precum și <code>unghiular-steriliza</code> modul. Faceți acest lucru prin modificarea <code>functions.php</code> fișier și adăugarea următoarelor înaintea lui <code>wp_localize_script</code> apel:</p> <pre>wp_enqueue_script ('angularjs-sanitize', get_stylesheet_directory_uri (). '/node_modules/angular-sanitize/angular-sanitize.min.js'); wp_enqueue_script ("temă-serviciu", get_stylesheet_directory_uri () ./js/services.js '); </pre> <p>Acum va trebui să actualizăm <code>main.html</code> parțial pentru a afișa aceste categorii care sunt furnizate de ThemeService.</p> <pre><h1>Categorii</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>Acum veți putea vedea mesajele și categoriile dvs. afișate în pagina dvs. de pornire prin intermediul <code>ng-view</code> folosind un <code>fabrică</code> service pentru Angular. Beneficiul acestui lucru este că toate componentele vor avea datele la dispoziția lor. Deci, acum putem împărți obiectul categoriilor între toți controlorii noștri pe rutele noastre.</p> <h2>Luând lucruri mai departe</h2> <p>Acum, că avem un serviciu creat pentru tema noastră, putem continua să dezvoltăm stratul de date și să încorporăm stilul Bootstrap în codul HTML returnat.</p> <p>Posibilitățile care sunt acum configurate în tema dvs. sunt cu adevărat nesfârșite și, prin verificarea depozitului furnizat, veți avea un punct de pornire rapid pentru crearea de aplicații WordPress cu o singură pagină și cu unghiulară și Bootstrap..</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">Cod</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">Crearea basslines de tip Skrillex Tech în NI Massive - Parametri de ajustare</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">Crearea tipografiei stilului Origami simplu în 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="/">ro.accentsconagua.com</a><div class="h-block-a"></div></div>
			<div class="footer-text">
				Informații interesante și sfaturi utile privind programarea. Dezvoltarea de site-uri, web design si dezvoltare web. Tutoriale Photoshop. Crearea de jocuri pe calculator și aplicații mobile. Deveniți un programator profesionist de la zero.
			</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="Căutare...">
							<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>