इंटरनेट पर अपने ज्ञान को लिखने और साझा करने के लिए एक ब्लॉग का होना आवश्यक है ताकि दृश्यता और हमें अपने क्षेत्र में एक विषय पर एक प्राधिकरण के रूप में जाना जा सके।
यह लेख आपको सिखाएगा कि एक ब्लॉग कैसे बनाया जाए जिसमें प्रत्येक लेख के लिए गतिशील पृष्ठ हों।
साथ चलने के लिए, GitHub पर कोडबेस और इसके रेपो और संदर्भ के लिए डेमो देखें।
इस ट्यूटोरियल को पूरा करने के लिए निम्नलिखित की आवश्यकता है:
आरंभ करने के लिए, टर्मिनल खोलें और कमांड चलाएँ:
npx create-nuxt-app blog-for-developers
ऊपर दिया गया कमांड एक कमांड लाइन इंटरफेस (सीएलआई) प्रांप्ट शुरू करेगा जो हमें अपनी परियोजना के विभिन्न पहलुओं को कॉन्फ़िगर करने की अनुमति देगा।
अब जब बॉयलरप्लेट सभी फाइलों और फ़ोल्डरों के साथ सेट हो गया है, तो विकास सर्वर को चलाते हैं जो इस पर उपलब्ध है
http://localhost:3000
परियोजना के अंदर। # change directory to project folder
cd blog-for-developers
# start the development environment
npm run dev
नेक्स्ट क्या है?
NuxtJS एक खुला स्रोत सहज ज्ञान युक्त Vue ढांचा है जो हमें वेब विकास को सरल और शक्तिशाली बनाते हुए यूजर इंटरफेस बनाने की अनुमति देता है।
नेक्स्ट कंटेंट क्या है?
इस परियोजना के प्रारंभिक सेटअप के दौरान, हमने Nuxt सामग्री मॉड्यूल का चयन किया। यह मॉड्यूल हमें एपीआई जैसे इंटरफेस के माध्यम से मार्कडाउन, जेएसओएन, वाईएएमएल, एक्सएमएल और यहां तक कि सीएसवी फाइलों तक पहुंचने के लिए गिट-आधारित हेडलेस सीएमएस के रूप में हमारे कोडबेस का उपयोग करने देता है। इस मॉड्यूल के साथ
@nuxt/content
, यह इंजेक्ट करेगा $content
उदाहरण के लिए हमारी परियोजना में विश्व स्तर पर इसे किसी परियोजना में कहीं भी एक्सेस करने के लिए। क्लाउडिनरी क्या है?
क्लाउडिनरी वेब और मोबाइल एप्लिकेशन के लिए क्लाउड-सेवा छवि और वीडियो प्रबंधन उपकरण है। क्लाउडिनरी के साथ, हम किसी भी ब्राउज़र और डिवाइस पर डिजिटल अनुभव अपलोड, बना और प्रबंधित कर सकते हैं।
इससे पहले कि हम Nuxt सामग्री का उपयोग करके ब्लॉग के लिए सामग्री को मार्कडाउन में बनाएं, आइए पहले ब्लॉग के लिए लैंडिंग पृष्ठ बनाएं जिसमें नेविगेशन लिंक और कुछ टेक्स्ट शामिल होंगे।
फ़ॉन्ट शैली जोड़ें
में
nuxt.config.js file
, हम अपने पसंदीदा फ़ॉन्ट को हेड सेक्शन में जोड़ सकते हैं और एक विशेष फ़ॉन्ट परिवार का उपयोग कर सकते हैं जैसा कि नीचे देखा गया है: उपरोक्त कोड ब्लॉक का पृष्ठ पर तब तक कोई प्रभाव नहीं पड़ेगा जब तक हम उस सीएसएस को नहीं लिखेंगे जो फ़ॉन्ट का उपयोग करेगा।
अब, निम्न कोड को इसमें जोड़ें
pages/index.vue
जिसमें होम पेज पर नेविगेशन लिंक और कुछ टेक्स्ट शामिल होंगे। घटक निकालें, <Tutorial />
. <template> <section class =" showcase "> < header > < h2 class =" logo "> < nuxt - link to ="/"> ecosurf </ nuxt - link > </ h2 > < nav class =" nav desktop "> < ul > < li class =" nav__list "> < nuxt - link to ="/ blogs "> Stories </ nuxt - link > </ li > </ ul > </ nav > </ header > < video
autoplay
loop muted
src =" https: // res . cloudinary . com / terieyenike / video / upload / v1651393236 / mixkit - tropical - island - landscape - view - 4692 - large_yanvml . mp4 "></ video > < div class =" overlay "></ div > < div class =" text "> < h2 data - type =" uppercase " class =" stroke "> Never Stop </ h2 > < h3 data - type =" uppercase "> Exploring The World </ h3 > < p > View of the tropical island landscape, from a hill with houses, palm
trees and many trees, and in the distance the hills that surround the
sea, on a sunny day . </ p > </ div > < ul class =" social "> < li > < a href =" https: // twitter . com / terieyenike " rel =" noopener noreferrer " target =" _blank ">< img
alt =" twitter profile " src =" https: // i . ibb . co / Wnxq2Nq / twitter . png "/></ a > </ li > < li > < a href =" https: // instagram . com / terieyenike " rel =" noopener noreferrer " target =" _blank ">< img
alt =" instagram profile " src =" https: // i . ibb . co / ySwtH4B / instagram . png "/></ a > </ li > </ ul > </ section > </ template >
उपरोक्त कोड ब्लॉक में, हमने a . को शामिल किया है
<video>
क्लाउडिनरी में संग्रहीत वीडियो के स्रोत के साथ ऑटोप्ले, लूप, और म्यूट जैसी विशेषताओं के साथ जो वीडियो लोड होने पर म्यूट कर देता है। क्लाउडिनरी में संग्रहीत मीडिया प्राप्त करने के लिए, हम अपने वांछित वीडियो को मीडिया लाइब्रेरी टैब पर अपलोड करते हैं। इसके बाद, उस URL को कॉपी करें जिसे संलग्न किया जाएगा src
की <video>
. साथ ही, हमने नेविगेशन हेडर में लिंक को के साथ संदर्भित किया है
nuxt-link
दोनों घर के लिए घटक /
और यह /blogs
मार्ग जो हम अपने सभी ब्लॉग देखने के लिए बनाएंगे। assets/styles/main.css
, और इस सार से निम्नलिखित शामिल करें। nuxt.config.js
फ़ाइल, निम्न के साथ बनाई गई CSS फ़ाइल को शामिल करने के लिए फ़ाइल को अपडेट करें: export default { ... css : [ '@/assets/styles/main.css' ], ... }
यहां बताया गया है कि हमारा पेज कैसा दिखना चाहिए:
अपनी ब्लॉग साइट बनाने के लिए, हमारे पास प्रदर्शित करने और प्रस्तुत करने के लिए सामग्री होनी चाहिए
/blogs
पृष्ठ। सबसे पहले, एक बनाएं content
निर्देशिका और फिर ब्लॉग निर्देशिका जिसमें सभी मार्कडाउन फ़ाइलें होंगी। मार्कडाउन में सभी सामग्री को लिखना विभिन्न प्रोग्रामिंग भाषाओं के लिए सिंटैक्स हाइलाइटिंग के साथ शीर्षक, लिंक और कोड ब्लॉक जैसे बहुत सारे मार्कडाउन सिंटैक्स मानकों का समर्थन करता है। content/blogs/egghead.md
. --- title: Egghead cover _image: https://res.cloudinary.com/terieyenike/image/upload/v1651446130/pexels-jeremy-bishop-8241100_ oklfpe.jpg author: Teri Eyenike description: All we need to do is open up our terminal and run the command npm install @nuxt/content. Once it's installed, you'll see that inside of our package.json, we see our Nuxt Content module. Next, to finalize the setup, let's go ahead and open up our nuxt.config.js, and let's go ahead and scroll down to the section that's labeled Modules. date: May 2, 2021 publishOn: 2021-05-02T00:00:00 tags: ["learning", "platform"] --- [ Egghead ]( https://www.egghead.io ) is a great platform for developers to enhance their skills! <!-- more content -->
मार्कडाउन फाइलों में फ्रंट मैटर की अवधारणा का उपयोग करके मेटाडेटा जोड़ने की क्षमता होती है, जिसे फ्रंट मैटर की शुरुआत और स्टॉप पर ट्रिपल-डैश सिंटैक्स के साथ दर्शाया जाता है। मेटाडेटा, जो पाठकों को प्रदर्शित किया जाता है जैसे प्रकाशन का समय और ब्लॉग सामग्री का अंश, वह है जो पाठकों को प्रदर्शित किया जाता है। अन्य विभिन्न गुणों को शामिल किया जा सकता है।
पीएस: सामने के मामले के अंदर, यह वाईएएमएल सिंटैक्स का उपयोग करता है।
पोस्ट ला रहा है
ब्लॉग पेज के लिए पोस्ट लाने के लिए, आइए एक नया मार्ग बनाएं
pages
. एक फ़ोल्डर बनाएँ, जिसे ब्लॉग कहा जाता है, और उसमें बनाएँ index.vue
निर्देशिका के लिए फ़ाइल, ब्लॉग। pages/blogs/index.vue
फ़ाइल प्रदान की गई मार्कडाउन फ़ाइलों को प्रदर्शित करने के लिए। // pages/blogs/index.vue
<template> < main >
< header >
< h2 class = "logo" >
< nuxt-link to = "/" > ecosurf </ nuxt-link >
</ h2 >
< nav class = "nav desktop" >
< ul >
< li class = "nav__list" >
< nuxt-link to = "/blogs" > Stories </ nuxt-link >
</ li >
</ ul >
</ nav >
</ header >
< div class = "container section" >
< div class = "container__grid" >
< div v-for = "blog in blogs" :key = "blog.slug + blog.createdAt" class = "card" >
< img :src = "blog.cover_image"
alt = "blog photographs" />
< div class = "pad__card" >
< div class = "author" >
< p class = "author__name" > {{ blog.author }} </ p > < span > | </ span >
< p > {{ blog.date }} </ p >
</ div >
< h2 class = "title" > {{ blog.title }} </ h2 >
< p > {{ blog.description.substring(0, 150) }}... </ p >
< button >
< nuxt-link :to = "`/blogs/${blog.slug}`" > Read More </ nuxt-link >
</ button >
</ div >
</ div >
</ div >
</ div >
</ main >
</template> < script >
export default { async asyncData ( {$content} ) { const blogs = await $content( "blogs" ).sortBy( "publishOn" , "desc" ).fetch() return { blogs } }, head ( ) { return { title : "Read interesting stories as a nomad" , meta : [ { hid : 'description' , name : 'description' , content : 'Daily and juicy content as you learn, work, and relax. WFH'
} ] } } } </ script >
< style scoped >
header { background : #111111 ; position : unset; } .container { width : 85% ; max-width : 75rem ; margin -inline: auto; } .section { padding : 3em 0 ; } .container__grid { display : grid; gap: 2em ; grid-template- columns : repeat (auto-fit, minmax ( 19rem , 1 fr)); } .card { background : #f0f7f4 ; box-shadow : 0px 4px 3px rgba ( 0 , 0 , 0 , 0.1 ); border-radius : 5px ; } .card img { object-fit : cover; border-top-left-radius : 5px ; border-top-right-radius : 5px ; width : 100%
} .pad__card { padding : 2em ; } .author { display : flex; align-items : center; } .author , .title { margin-bottom : 1em ; } .author span { margin : 0 0.3em ; } .author__name { text-transform : capitalize; } button { border : unset; padding : 1em 2em ; margin-top : 2em ; background : #0D5159 ; font-weight : 700 ; cursor : pointer; } button a { color : #fff ; } </ style >
उपरोक्त कोड ब्लॉक निम्न कार्य करता है:
asyncData
: हमारे पृष्ठ को Nuxt से उत्पन्न करने के लिए उपयोग किया जाता है क्योंकि यह उपयोगकर्ताओं के लिए अलग-अलग फ़ाइलों को स्थिर रूप से उत्पन्न करता है। हम में गुजरते हैं $content
विधि जहां ब्लॉग नोट्स संग्रहीत किए जाते हैं, sortBy()
समारोह, और fetch
तरीका। sortBy()
: दो पैरामीटर लेता है, publishOn
(इसे तिथि के अनुसार क्रमबद्ध करें) और सबसे हाल ही में प्रकाशित सामग्री के आधार पर आप सामग्री को कैसे दिखाना चाहते हैं, इस पर desc विशेषताएँ /blogs/
ब्लॉग स्लग का उपयोग करके और पढ़ें बटन पर क्लिक करें <nuxt-link>
अवयव। पदों का प्रतिपादन
सामग्री निर्देशिका से प्रदान की गई पोस्ट के स्निपेट को देखने के लिए अंतिम चरण ब्लॉग पर v-for निर्देश और लूप का उपयोग करना और प्रत्येक लेख को एक कार्ड में प्रस्तुत करना है।
यहां बताया गया है कि ब्लॉग पेज अब कैसा दिखना चाहिए:
आइए अब प्रत्येक ब्लॉग पोस्ट के लिए डायनामिक URL रूट वाले पेज बनाएं। Nuxt में, गतिशील पृष्ठ बनाने के लिए, हम .vue फ़ाइल नाम से पहले एक अंडरस्कोर जोड़ते हैं ताकि URL को हार्डकोड न किया जा सके।
हम तब बनाते हैं
_slug.vue
ब्लॉग निर्देशिका के अंतर्गत फ़ाइल करें और निम्न कोड जोड़ें: // pages/blogs/_slug.vue
<template> < main >
< header >
< h2 class = "logo" >
< nuxt-link to = "/" > ecosurf </ nuxt-link >
</ h2 >
< nav class = "nav desktop" >
< ul >
< li class = "nav__list" >
< nuxt-link to = "/blogs" > Stories </ nuxt-link >
</ li >
</ ul >
</ nav >
</ header >
< div class = "container" >
< div class = "return" >
< nuxt-link to = "/" >
< img alt = "back to home" src = "/home.png" />
</ nuxt-link >
< span > / </ span >
< nuxt-link to = "/blogs" > Blog </ nuxt-link >
< span > / </ span >
< p > {{ note.title.substring(0, 15) }}... </ p >
</ div >
< section >
< h1 > {{ note.title }} </ h1 >
< nuxt-content :document = "note" cla />
</ section >
</ div >
</ main >
</template> < script >
export default { async asyncData ( {$content, route} ) { const note = await $content( `blogs/ ${route.params.slug} ` ).fetch() return { note } } } </ script >
< style scoped >
header { background : #111111 ; position : unset; } .container { width : 85% ; max-width : 75rem ; margin -inline: auto; } section { padding-bottom : 2em ; } .return { display : flex; margin : 1.5em 0 ; } .return img { width : 20px ; height : 20px ; } .return span { margin : 0 1em ; } h1 { margin-bottom : 1em
} </ style >
कोड का यह ब्लॉक निम्न कार्य करता है:
${route.params.slug}
: हम रूट पैरामीटर और स्लग का उपयोग करके निर्देशिका ब्लॉग से एक विशिष्ट फ़ाइल लाने के लिए सामग्री का उपयोग करते हैं जो हमारे वास्तविक फ़ाइल नाम पर मैप करेगा document
पूरे के साथ note
वस्तु scoped
: स्कोप को शैली तत्व में परिभाषित करना सुनिश्चित करें कि स्टाइल केवल एक विशिष्ट पृष्ठ पर लागू होता हैजब आप अपने विचारों को व्यापक दर्शकों के साथ साझा करना चाहते हैं तो ब्लॉग का निर्माण बहुत अच्छा होता है और Nuxt ने हमें इस लेख में ऐसा करने का एक तरीका प्रदान किया है। अभी भी अन्य विशेषताएं हैं जिन्हें हम यह सुनिश्चित करने के लिए खोज सकते हैं कि हमारे पास एक मजबूत ब्लॉग वेबसाइट है।
और अधिक जानें
लाइव डेमो आज़माएं