কন্টেন্ট ম্যানেজমেন্ট
কালেকশন, এন্ট্রি, লোকেল এবং রিলিজ সহ একটি হেডলেস CMS। Content প্যানেল বা SDK থেকে কন্টেন্ট পরিচালনা করুন।
Proyecta-তে একটি পূর্ণাঙ্গ হেডলেস CMS রয়েছে। এটি schema-first: তুমি কালেকশন (কাঠামোবদ্ধ কন্টেন্ট টাইপ) সংজ্ঞায়িত করো, তারপর প্রতিটি কালেকশনের ফিল্ড অনুযায়ী এন্ট্রি তৈরি করো। এন্ট্রিগুলো লোকালাইজ করা যায় এবং রিলিজে গ্রুপ করা যায়।
Content প্যানেল
Section titled “Content প্যানেল”SDK ব্যবহার করে বা AI-কে জিজ্ঞেস করে কন্টেন্ট পরিচালনা করা যায়। Content API-তে ছয়টি রিসোর্স টাইপ রয়েছে:
| ট্যাব / রিসোর্স | কী কাজে লাগে |
|---|---|
| Collections | কন্টেন্ট schema সংজ্ঞায়িত ও পরিচালনা করা (যেমন, “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | একটি কালেকশনের মধ্যে টাইপ করা স্লট (Collections-এর সাব-রিসোর্স হিসেবে পরিচালিত) |
| Entries | একটি কালেকশনের মধ্যে এন্ট্রি ব্রাউজ, তৈরি, সম্পাদনা, publish এবং মুছে ফেলা |
| Locales | অনুবাদ করা কন্টেন্টের জন্য ভাষা/অঞ্চল লোকেল যোগ ও পরিচালনা করা |
| Releases | এন্ট্রিগুলো একসাথে live করা (বা unpublish করা) — releases.publish() দিয়ে ম্যানুয়ালি publish করা |
| Assets | মিডিয়া ফাইল (ছবি, ভিডিও, PDF) আপলোড ও পরিচালনা করা যা এন্ট্রি থেকে রেফারেন্স করা যায় |
কালেকশনের এন্ট্রিতে যেতে Collections ট্যাবে একটি কালেকশনে ক্লিক করো। Entries ট্যাব থেকে পৃথক কন্টেন্ট আইটেম তৈরি, সম্পাদনা, publish এবং মুছে ফেলা যায়।
SDK (proyecta.content) ব্যবহার করে প্রোগ্রামাটিক্যালিও সবকিছু পরিচালনা করা যায়।
ধারণাসমূহ
Section titled “ধারণাসমূহ”| ধারণা | এটি কী |
|---|---|
| Collection | একটি schema — এক ধরনের কন্টেন্টের আকৃতি (যেমন “Blog Post”, “FAQ”, “Product Spec”) |
| Field | একটি কালেকশনে টাইপ করা স্লট (যেমন title: string, body: rich_text, coverImage: asset) |
| Entry | একটি কালেকশনের একটি একক ইনস্ট্যান্স (একটি ব্লগ পোস্ট, একটি FAQ আইটেম) |
| Asset | একটি আপলোড করা মিডিয়া ফাইল যা এন্ট্রি থেকে রেফারেন্স করা যায় |
| Locale | একটি ভাষা/অঞ্চল যেখানে কন্টেন্ট অনুবাদ করা হয় |
| Release | একই সময়ে live হওয়া (বা unpublish হওয়া) এন্ট্রির একটি গ্রুপ |
Quickstart
Section titled “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });কালেকশন
Section titled “কালেকশন”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);এন্ট্রি
Section titled “এন্ট্রি”এন্ট্রিগুলো হলো আসল কন্টেন্ট রো। প্রতিটি এন্ট্রি একটি কালেকশনের অন্তর্গত এবং সেই কালেকশনের ফিল্ড অনুযায়ী ডেটা বহন করে।
// Browse entries (pass the collection's api_id, not its numeric id)for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) { console.log(entry);}
// Update an entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);অ্যাসেট
Section titled “অ্যাসেট”অ্যাসেট আপলোড প্রথম শ্রেণির ফিচার — এন্ট্রিতে ছবি, ভিডিও বা PDF সংযুক্ত করতে এটি ব্যবহার করো:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteচ্যাট-চালিত ফাইল আপলোডের জন্য (builder-এ ড্র্যাগ করে), দেখো Files & Media।
লোকালাইজেশন
Section titled “লোকালাইজেশন”কন্টেন্ট একাধিক লোকেলে অনুবাদ করা যায়। প্রতিটি লোকেল proyecta.content.locales দিয়ে পরিচালিত একটি রেকর্ড:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}এন্ট্রি fetch করার সময়, তুমি একটি নির্দিষ্ট লোকেলের অনুবাদ চাইতে পারো। বৃহত্তর i18n চিত্রের জন্য দেখো Internationalization।
একটি রিলিজ হলো এন্ট্রির একটি বান্ডেল যা একই সময়ে live হয় (বা unpublish হয়)। এটি তোমাকে একটি সমন্বিত কন্টেন্ট ড্রপ — একটি মার্কেটিং লঞ্চ, একটি নতুন প্রোডাক্ট পেজ, একটি FAQ রিফ্রেশ — স্টেজ করতে এবং সবকিছু একসাথে atomically পরিবর্তন করতে দেয়।
দ্রষ্টব্য: স্বয়ংক্রিয় টাইমড publishing এখনো বাস্তবায়িত হয়নি।
scheduled_atতারিখ সহ রিলিজগুলোscheduledস্ট্যাটাসে প্রবেশ করে কিন্তুreleases.publish()দিয়ে ম্যানুয়ালি publish করতে হবে। নির্দিষ্ট সময়ে স্বয়ংক্রিয় publishing শীঘ্রই আসছে।
// Create a release (optionally with a target date)const release = await proyecta.content.releases.create({ name: 'Monday launch', scheduled_at: '2024-01-08T09:00:00Z',});
// Manually publish a release when readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}একটি রিলিজের সময়সূচি পরিবর্তন করতে, এটি মুছে আবার তৈরি করো — কোনো update endpoint নেই।
সাধারণ প্যাটার্ন (AI-কে দিয়ে সেটআপ করাও)
Section titled “সাধারণ প্যাটার্ন (AI-কে দিয়ে সেটআপ করাও)”"Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug].""Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page.""Set up a multi-language landing page using Proyecta Content with English and Spanish locales.""Create a release containing three blog posts and publish it manually when ready."
কখন Content ব্যবহার করবে বনাম Database
Section titled “কখন Content ব্যবহার করবে বনাম Database”| ব্যবহারের ক্ষেত্র | এটি ব্যবহার করো |
|---|---|
| সম্পাদকীয় কন্টেন্ট (পোস্ট, FAQ, মার্কেটিং কপি) — publish/draft স্ট্যাটাস, scheduling, লোকালাইজেশন দরকার | Content API |
| অ্যাপ ডেটা (ব্যবহারকারী, অর্ডার, লাইন আইটেম) — query speed, ট্রানজেকশন, real-time দরকার | Database |
| কোডে স্ট্যাটিক অ্যাসেট | প্রজেক্টে public/ ডিরেক্টরি |
| ব্যবহারকারী-আপলোড করা ফাইল | Files & Media |
শীঘ্রই আসছে
Section titled “শীঘ্রই আসছে”- Rich-text entry editor — Content প্যানেলে
rich_textফিল্ডের জন্য পূর্ণ WYSIWYG সম্পাদনা - কন্টেন্ট পরিবর্তনের Live preview তোমার অ্যাপের বিপরীতে
- Content roles — developer পারমিশন থেকে editor পারমিশন আলাদা করা