'\" t .\" Man page generated from reStructuredText .\" by the Docutils 0.22.3 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PELICAN" "1" "Dec 25, 2025" "4" "PELICAN" .SH "نام (NAME)" pelican \- مستندات ابزار pelican .sp ابزار Pelican یک سازنده وب‌سایت ایستا است که با زبان Python \%\& نوشته شده است. نکات برجسته آن عبارتند از: .INDENT 0.0 .IP \(bu 2 محتوای خود را مستقیماً با ویرایشگر دلخواه خود در قالب‌های reStructuredText \% یا Markdown \% بنویسید .IP \(bu 2 شامل یک ابزار خط فرمانی ساده برای تولید (یا تولید مجدد) وب‌سایت شما .IP \(bu 2 تعامل و اتصال آسان با سامانه‌های توزیع‌شده کنترل نسخه و وب‌هوک‌ها .IP \(bu 2 خروجی کاملاً ایستا که میزبانی آن را در هر مکانی آسان می‌سازد .UNINDENT .sp آماده شروع هستید؟ راهنمای شروع سریع (Quickstart) \%<> را بررسی کنید. .SH "ویژگی‌ها (FEATURES)" .sp ویژگی‌های برجسته Pelican عبارتند از: .INDENT 0.0 .IP \(bu 2 مقاله‌ها (مانند پست‌های وبلاگ) و صفحه‌ها (مانند \(dqدرباره ما\(dq، \(dqپروژه‌ها\(dq، \(dqتماس با ما\(dq) .IP \(bu 2 یکپارچه‌سازی با سرویس‌های خارجی .IP \(bu 2 پوسته‌های سایت (ساخته‌شده با استفاده از قالب‌های Jinja2 \%) .IP \(bu 2 انتشار مقاله‌ها به چند زبان .IP \(bu 2 تولید فیدهای Atom و RSS .IP \(bu 2 برجسته‌سازی نحوی کدها (Syntax Highlighting) .IP \(bu 2 درون‌ریزی محتوای موجود از WordPress، Dotclear یا فیدهای RSS .IP \(bu 2 سرعت بالا در بازتولید به لطف حافظه پنهان محتوا و نوشتن گزینشی خروجی .IP \(bu 2 توسعه‌پذیر از طریق زیست‌بوم غنی افزونه‌ها: Pelican Plugins \% .UNINDENT .SH "چرا نام «PELICAN»؟ (WHY THE NAME \(dqPELICAN\(dq?)" .sp واژه \(dqPelican\(dq یک واروواژه (آناگرام) از کلمه فرانسوی \fIcalepin\fP است که به معنای \(dqدفترچه یادداشت\(dq می‌باشد. ;) .SH "کد منبع (SOURCE CODE)" .sp می‌توانید به کد منبع در این آدرس دسترسی داشته باشید: \% .SH "راهنمایی، مشارکت یا ارسال بازخورد (HOW TO GET HELP, CONTRIBUTE, OR PROVIDE FEEDBACK)" .sp دستورالعمل‌های ارسال بازخورد و مشارکت ما را بررسی کنید \%<>\&. .SH "مستندات (DOCUMENTATION)" .SS "شروع سریع (Quickstart)" .sp خواندن تمامی مستندات اکیداً توصیه می‌شود، اما برای کسانی که شکیبایی کمتری دارند، در ادامه مراحلی سریع برای شروع آورده شده است. .SS "نصب (Installation)" .sp ابزار Pelican (و اختیاری Markdown در صورت تمایل به استفاده) را روی Python >=3.9 با اجرای دستور زیر در ترمینال دلخواه خود نصب کنید؛ در صورت نیاز به مجوزهای مدیریتی، دستور را با \fBsudo\fP آغاز کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install \(dqpelican[markdown]\(dq .EE .UNINDENT .UNINDENT .SS "ایجاد یک پروژه (Create a project)" .sp نخست، نامی برای پروژه خود انتخاب کنید، دایرکتوری مناسبی برای سایت خود بسازید و وارد آن شوید: .INDENT 0.0 .INDENT 3.5 .sp .EX mkdir \-p ~/projects/yoursite cd ~/projects/yoursite .EE .UNINDENT .UNINDENT .sp یک پروژه اولیه و خام را از طریق دستور \fBpelican\-quickstart\fP بسازید؛ این دستور با پرسیدن چند پرسش پیرامون وب‌سایت شما آغاز می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican\-quickstart .EE .UNINDENT .UNINDENT .sp برای پرسش‌هایی که مقادیر پیش‌فرض آن‌ها داخل قلاب نشان داده شده است، می‌توانید با فشردن کلید Return آن مقادیر پیش‌فرض را بپذیرید [1]\&. هنگامی که از شما پیشوند نشانی وب (URL prefix) خواسته شد، نام دامنه خود را مطابق راهنما (برای نمونه، \fBhttps://example.com\fP) وارد نمایید..SS ایجاد یک مقاله .sp تا زمانی که محتوایی ایجاد نکرده باشید، نمی‌توانید Pelican را اجرا کنید. با استفاده از ویرایشگر متنی مورد علاقه خود، نخستین مقاله را با محتوای زیر بسازید: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: My First Review Date: 2010\-12\-03 10:20 Category: Review Following is a review of my favorite mechanical keyboard. .EE .UNINDENT .UNINDENT .sp با توجه به اینکه این مقاله نمونه در قالب Markdown است، آن را با عنوان \fB~/projects/yoursite/content/keyboard\-review.md\fP\& ذخیره کنید. .SS تولید وب‌سایت .sp از دایرکتوری ریشه پروژه خود، دستور \fBpelican\fP را برای تولید وب‌سایت اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content .EE .UNINDENT .UNINDENT .sp اکنون وب‌سایت شما درون دایرکتوری \fBoutput/\fP تولید شده است. (ممکن است هشداری در رابطه با خوراک‌ها مشاهده کنید، اما این مورد هنگام توسعه محلی طبیعی است و فعلاً می‌توان آن را نادیده گرفت.) .SS پیش‌نمایش وب‌سایت .sp یک نشست ترمینال جدید باز کنید، به دایرکتوری ریشه پروژه بروید، و دستور زیر را برای راه‌اندازی سرور وب Pelican اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican \-\-listen .EE .UNINDENT .UNINDENT .sp با رفتن به \% در مرورگر خود، پیش‌نمایش وب‌سایت را مشاهده کنید. .sp برای جزئیات بیشتر به خواندن سایر بخش‌های مستندات ادامه دهید، و صفحه راهنماهای ویکی Pelican \% را برای پیوندهای مربوط به آموزش‌های ارائه‌شده توسط جامعه کاربری بررسی کنید. .SS پاورقی‌ها .IP [1] 5 می‌توانید با نصب ماژول اختیاری tzlocal \% به بومی‌سازی فیلدهای پیش‌فرض کمک کنید. .SS نصب Pelican .sp در حال حاضر Pelican روی >=3.9 به بهترین شکل اجرا می‌شود؛ نسخه‌های قدیمی‌تر Python پشتیبانی نمی‌شوند. .sp می‌توانید Pelican را با چندین روش مختلف نصب کنید. ساده‌ترین روش از طریق Pip \% است: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install pelican .EE .UNINDENT .UNINDENT .sp یا، اگر قصد استفاده از Markdown را دارید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install \(dqpelican[markdown]\(dq .EE .UNINDENT .UNINDENT .sp (به یاد داشته باشید که در برخی سیستم‌عامل‌ها برای نصب Pelican به صورت سراسری در سیستم، لازم است در ابتدای دستور بالا \fBsudo\fP اضافه کنید.) .sp اگرچه روش بالا ساده‌ترین شیوه است، اما روش توصیه‌شده ساخت یک محیط مجازی برای Pelican از طریق virtualenv \% پیش از نصب Pelican است. با فرض اینکه virtualenv \% را نصب کرده‌اید، می‌توانید یک نشست ترمینال جدید باز کرده و یک محیط مجازی جدید برای Pelican ایجاد کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX virtualenv ~/virtualenvs/pelican cd ~/virtualenvs/pelican source bin/activate .EE .UNINDENT .UNINDENT .sp پس از ایجاد و فعال‌سازی محیط مجازی، Pelican می‌تواند همان‌طور که در بالا اشاره شد از طریق \fBpython \-m pip install pelican\fP نصب شود. همچنین، اگر کد منبع پروژه را در اختیار دارید، می‌توانید Pelican را با استفاده از روش distutils نصب کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX cd path\-to\-Pelican\-source python setup.py install .EE .UNINDENT .UNINDENT .sp اگر Git نصب دارید و ترجیح می‌دهید آخرین نسخه لبه توسعه (bleeding\-edge) Pelican را به جای یک انتشار پایدار نصب کنید، از دستور زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install \-e \(dqgit+https://github.com/getpelican/pelican.git#egg=pelican\(dq .EE .UNINDENT .UNINDENT .sp پس از نصب Pelican، می‌توانید برای دیدن گزینه‌های پایه‌ای کاربرد، \fBpelican \-\-help\fP را اجرا کنید. برای جزئیات بیشتر، به بخش Publish \%<> مراجعه کنید..SS بسته‌های اختیاری .sp اگر قصد دارید از Markdown \% به عنوان یک قالب نشانه‌گذاری استفاده کنید، می‌توانید Pelican را با پشتیبانی از Markdown نصب کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install \(dqpelican[markdown]\(dq .EE .UNINDENT .UNINDENT .sp بهبودهای تایپوگرافی را می‌توان در فایل تنظیمات فعال کرد، اما ابتدا باید کتابخانهٔ الزامی Typogrify \% نصب شود: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install typogrify .EE .UNINDENT .UNINDENT .SS وابستگی‌ها .sp هنگام نصب Pelican، بسته‌های پایتونی وابستهٔ زیر باید به طور خودکار و بدون نیاز به هیچ اقدامی از سوی شما نصب شوند: .INDENT 0.0 .IP \(bu 2 feedgenerator \%، برای تولید فیدهای Atom .IP \(bu 2 jinja2 \%، برای پشتیبانی از قالب‌ها .IP \(bu 2 pygments \%، برای برجسته‌سازی نحو .IP \(bu 2 docutils \%، برای پشتیبانی از reStructuredText به عنوان یک قالب ورودی .IP \(bu 2 blinker \%، یک سامانهٔ سیگنال‌دهی شیء‌به‌شیء و پخشی (broadcast) .IP \(bu 2 unidecode \%، برای نویسه‌گردانی متن‌های یونیکد به ASCII .IP \(bu 2 MarkupSafe \%، برای پیاده‌سازی رشته‌های ایمن در برابر نشانه‌گذاری .IP \(bu 2 python\-dateutil \%، برای خواندن فراداده‌های تاریخ .UNINDENT .SS ارتقا .sp اگر نسخهٔ پایدار Pelican را از طریق Pip \% نصب کرده‌اید و مایلید آن را به آخرین نسخهٔ پایدار ارتقا دهید، می‌توانید این کار را با افزودن \fB\-\-upgrade\fP انجام دهید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install \-\-upgrade pelican .EE .UNINDENT .UNINDENT .sp اگر Pelican را از طریق distutils یا روش توسعهٔ پیشرو (bleeding\-edge) نصب کرده‌اید، کافی است همان مرحله را برای نصب جدیدترین نسخه تکرار کنید. .SS راه‌اندازی سریع وبگاه .sp پس از نصب Pelican، می‌توانید با استفاده از دستور \fBpelican\-quickstart\fP که کار خود را با پرسیدن چند پرسش دربارهٔ وبگاه شما آغاز می‌کند، ساختار اولیهٔ یک پروژه را ایجاد کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican\-quickstart .EE .UNINDENT .UNINDENT .sp اگر در یک محیط مجازی فعال اجرا شود، \fBpelican\-quickstart\fP به دنبال مسیر پروژهٔ مرتبط درون \fB$VIRTUAL_ENV/.project\fP\& خواهد گشت. اگر آن فایل وجود داشته باشد و حاوی مسیر دایرکتوری معتبری باشد، پروژهٔ جدید Pelican در آن مکان ذخیره خواهد شد. در غیر این صورت، پیش‌فرض دایرکتوری کاری جاری است. برای تنظیم مسیر پروژهٔ جدید در فراخوانی اولیه، از این دستور استفاده کنید: \fBpelican\-quickstart \-\-path /your/desired/directory\fP .sp پس از پایان پاسخ‌گویی به تمام پرسش‌ها، پروژهٔ شما شامل ساختار سلسله‌مراتبی زیر خواهد بود (به جز \fIpages\fP — که در زیر درون پرانتز نشان داده شده است — و در صورتی که قصد ایجاد محتوای غیرگاه‌شمارانه دارید می‌توانید خودتان به صورت اختیاری آن را اضافه کنید): .INDENT 0.0 .INDENT 3.5 .sp .EX yourproject/ ├── content │ └── (pages) ├── output ├── tasks.py ├── Makefile ├── pelicanconf.py # Main settings file └── publishconf.py # Settings to use when ready to publish .EE .UNINDENT .UNINDENT .sp گام بعدی، شروع افزودن محتوا به پوشهٔ \fIcontent\fP است که برای شما ایجاد شده است. .SS نوشتن محتوا .SS مقاله‌ها و صفحه‌ها .sp ‏Pelican موارد گاه‌شمارانه مانند پست‌های وبلاگ را \(dqarticles\(dq (مقاله‌ها) در نظر می‌گیرد و از این رو آن‌ها را به یک تاریخ مرتبط می‌سازد. .sp ایدهٔ نهفته در \(dqpages\(dq (صفحه‌ها) این است که معمولاً ماهیت زمانی ندارند و برای محتوایی استفاده می‌شوند که چندان تغییر نمی‌کند (برای نمونه، صفحه‌های \(dqAbout\(dq یا \(dqContact\(dq). .sp می‌توانید محتوای نمونه را در مخزن در مسیر \fBsamples/content/\fP\& پیدا کنید..SS "فراداده فایل (File metadata)" .sp Pelican تلاش می‌کند به اندازه کافی هوشمند باشد تا اطلاعات مورد نیاز خود را از سامانه فایل دریافت کند (برای مثال، درباره دسته‌بندی مقاله‌های شما)، اما برخی از اطلاعات را باید در قالب فراداده درون فایل‌های خود ارائه دهید. .sp اگر محتوای خود را در قالب reStructuredText می‌نویسید، می‌توانید این فراداده را در فایل‌های متنی از طریق نحو زیر ارائه دهید (پسوند \fB\&.rst\fP را به فایل خود بدهید): .INDENT 0.0 .INDENT 3.5 .sp .EX My super title ############## :date: 2010\-10\-03 10:20 :modified: 2010\-10\-04 18:40 :tags: thats, awesome :category: yeah :slug: my\-super\-post :authors: Alexis Metaireau, Conan Doyle :summary: Short version for index and feeds .EE .UNINDENT .UNINDENT .sp فهرست‌های نویسندگان و برچسب‌ها می‌توانند در عوض با نقطه\-ویرگول از هم جدا شوند، که به شما امکان می‌دهد نویسندگان و برچسب‌های حاوی کاما بنویسید: .INDENT 0.0 .INDENT 3.5 .sp .EX :tags: pelican, publishing tool; pelican, bird :authors: Metaireau, Alexis; Doyle, Conan .EE .UNINDENT .UNINDENT .sp Pelican افزونه‌ای را برای reStructuredText پیاده‌سازی می‌کند تا پشتیبانی از برچسب HTML به نام \fBabbr\fP فعال شود. برای استفاده از آن، چیزی شبیه به این در پست خود بنویسید: .INDENT 0.0 .INDENT 3.5 .sp .EX This will be turned into :abbr:\(gaHTML (HyperText Markup Language)\(ga. .EE .UNINDENT .UNINDENT .sp همچنین می‌توانید از نحو Markdown استفاده کنید (با فایلی با پسوند \fB\&.md\fP، \fB\&.markdown\fP، \fB\&.mkd\fP، یا \fB\&.mdown\fP). تولید Markdown نیازمند این است که ابتدا بسته Python\-Markdown \% را به صورت صریح نصب کنید، که می‌تواند از طریق \fBpip install Markdown\fP انجام شود\&. .sp همچنین Pelican از Markdown Extensions \% پشتیبانی می‌کند، که در صورت عدم وجود در بسته پیش‌فرض \fBMarkdown\fP ممکن است نیاز باشد جداگانه نصب شوند و می‌توان آن‌ها را از طریق تنظیمات \fBMARKDOWN\fP پیکربندی و بارگذاری کرد. .sp نحو فراداده برای پست‌های Markdown باید از این الگو پیروی کند: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: My super title Date: 2010\-12\-03 10:20 Modified: 2010\-12\-05 19:30 Category: Python Tags: pelican, publishing Slug: my\-super\-post Authors: Alexis Metaireau, Conan Doyle Summary: Short version for index and feeds This is the content of my super blog post. .EE .UNINDENT .UNINDENT .sp همچنین می‌توانید کلیدهای فراداده اختصاصی خود را داشته باشید (تا زمانی که با کلمات کلیدی رزرو شده فراداده تداخل نداشته باشند) تا در قالب‌های خود استفاده کنید. جدول زیر حاوی فهرستی از کلمات کلیدی رزرو شده فراداده است: .TS box center; l|l. T{ فراداده T} T{ توضیحات T} _ T{ \fBtitle\fP T} T{ عنوان مقاله یا صفحه T} _ T{ \fBdate\fP T} T{ تاریخ انتشار (برای مثال، \fBYYYY\-MM\-DD HH:SS\fP) T} _ T{ \fBmodified\fP T} T{ تاریخ ویرایش (برای مثال، \fBYYYY\-MM\-DD HH:SS\fP) T} _ T{ \fBtags\fP T} T{ برچسب‌های محتوا، جدا شده با کاما T} _ T{ \fBkeywords\fP T} T{ کلمات کلیدی محتوا، جدا شده با کاما (فقط محتوای HTML) T} _ T{ \fBcategory\fP T} T{ دسته‌بندی محتوا (فقط یکی — نه چندگانه) T} _ T{ \fBslug\fP T} T{ شناسه مورد استفاده در URLها و ترجمه‌ها T} _ T{ \fBauthor\fP T} T{ نویسنده محتوا، زمانی که فقط یکی باشد T} _ T{ \fBauthors\fP T} T{ نویسندگان محتوا، زمانی که چندگانه باشند T} _ T{ \fBsummary\fP T} T{ توضیح کوتاه محتوا برای صفحات نمایه T} _ T{ \fBlang\fP T} T{ شناسه زبان محتوا (\fBen\fP، \fBfr\fP و غیره) T} _ T{ \fBtranslation\fP T} T{ آیا محتوا ترجمه‌ای از محتوای دیگر است (\fBtrue\fP یا \fBfalse\fP) T} _ T{ \fBstatus\fP T} T{ وضعیت محتوا: \fBdraft\fP، \fBhidden\fP، \fBskip\fP، یا \fBpublished\fP T} _ T{ \fBtemplate\fP T} T{ نام قالب مورد استفاده برای تولید محتوا (بدون پسوند) T} _ T{ \fBsave_as\fP T} T{ ذخیره محتوا در این مسیر نسبی فایل T} _ T{ \fBurl\fP T} T{ آدرس URL برای استفاده در این مقاله/صفحه T} .TE .sp خواننده‌ها (Readers) برای قالب‌های بیشتر (مانند AsciiDoc \%) از طریق افزونه‌ها در دسترس هستند، که می‌توانید آن‌ها را از طریق مجموعه Pelican Plugins \% و همچنین مخزن قدیمی pelican\-plugins \% بیابید. .sp همچنین Pelican می‌تواند فایل‌های HTML منتهی به \fB\&.html\fP و \fB\&.htm\fP را پردازش کند. Pelican سند HTML را به روشی بسیار ساده تفسیر می‌کند، به این صورت که فراداده را از برچسب‌های \fBmeta\fP، عنوان را از برچسب \fBtitle\fP، و بدنه را از برچسب \fBbody\fP می‌خواند: .INDENT 0.0 .INDENT 3.5 .sp .EX My super title This is the content of my super blog post. .EE .UNINDENT .UNINDENT .sp در مورد HTML، یک استثنای ساده برای فراداده استاندارد وجود دارد: برچسب‌ها را می‌توان هم از طریق فراداده \fBtags\fP (همان‌طور که در Pelican استاندارد است) و هم از طریق فراداده \fBkeywords\fP (همان‌طور که در HTML استاندارد است) مشخص کرد. این دو را می‌توان به جای یکدیگر استفاده کرد. .sp توجه داشته باشید که به جز عنوان، هیچ‌یک از این فراداده‌های محتوا اجباری نیستند: اگر تاریخ مشخص نشده باشد و \fBDEFAULT_DATE\fP روی \fB\(aqfs\(aq\fP تنظیم شده باشد، Pelican به برچسب زمانی \(dqmtime\(dq فایل تکیه خواهد کرد، و دسته‌بندی می‌تواند از روی دایرکتوری‌ای که فایل در آن قرار دارد تعیین شود. برای مثال، فایلی که در \fBpython/foobar/myfoobar.rst\fP قرار دارد، دسته‌بندی \fBfoobar\fP را خواهد داشت\&. اگر می‌خواهید فایل‌های خود را به روش‌های دیگری سازمان‌دهی کنید که در آن نام زیرپوشه نام مناسبی برای دسته‌بندی نیست، می‌توانید مقدار \fBUSE_FOLDER_AS_CATEGORY\fP را روی \fBFalse\fP قرار دهید\&. هنگام تجزیه تاریخ‌های ارائه‌شده در فراداده صفحه، Pelican از زیرمجموعه پیشنهادی W3C برای ISO 8601 \% پشتیبانی می‌کند\&. .sp بنابراین عنوان تنها فراداده الزامی است. اگر این موضوع شما را نگران می‌کند، نگران نباشید. به جای مشخص کردن دستی عنوان در فراداده در هر بار، می‌توانید از نام فایل منبع محتوا به عنوان عنوان استفاده کنید. برای مثال، به یک فایل منبع Markdown با نام \fBPublishing via Pelican.md\fP به طور خودکار عنوان \fIPublishing via Pelican\fP اختصاص داده می‌شود\&. اگر این رفتار را ترجیح می‌دهید، خط زیر را به فایل تنظیمات خود اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX FILENAME_METADATA = \(aq(?P.*)\(aq .EE .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 هنگام آزمایش تنظیمات مختلف (به‌ویژه تنظیمات فراداده)، ممکن است حافظه موقت تداخل ایجاد کند و تغییرات قابل مشاهده نباشند. در چنین مواردی حافظه موقت را با \fBLOAD_CONTENT_CACHE = False\fP غیرفعال کنید یا از گزینه خط فرمان \fB\-\-ignore\-cache\fP استفاده کنید. .UNINDENT .UNINDENT .sp مقدار \fBmodified\fP باید آخرین زمانی باشد که مقاله را به‌روزرسانی کرده‌اید، و اگر مشخص نشود پیش‌فرض آن \fBdate\fP خواهد بود. علاوه بر اینکه می‌توانید \fBmodified\fP را در قالب‌ها نمایش دهید، ورودی‌های فید در فیدخوان‌ها زمانی که پس از ویرایش مقاله، \fBmodified\fP را به تاریخ فعلی تنظیم کنید، به طور خودکار به‌روزرسانی خواهند شد. .sp مقدار \fBauthors\fP فهرستی از نویسندگان مقاله است که با کاما از هم جدا شده‌اند. اگر تنها یک نویسنده وجود دارد می‌توانید از فیلد \fBauthor\fP استفاده کنید. .sp اگر فراداده summary را برای یک پست خاص به طور صریح مشخص نکنید، می‌توان از تنظیم \fBSUMMARY_MAX_LENGTH\fP برای تعیین تعداد کلماتی از ابتدای مقاله که به عنوان خلاصه استفاده می‌شوند، استفاده کرد. همچنین می‌توانید با استفاده از تنظیم \fBSUMMARY_MAX_PARAGRAPHS\fP از N پاراگراف اول مقاله به عنوان خلاصه آن استفاده کنید. اگر از هر دو تنظیم استفاده شود، تعداد پاراگراف‌های مشخص‌شده استفاده خواهد شد اما ممکن است برای رعایت حداکثر طول مشخص‌شده کوتاه شوند. .sp همچنین می‌توانید از طریق یک عبارت باقاعده که در تنظیم \fBFILENAME_METADATA\fP تعیین می‌شود، هر فراداده‌ای را از نام فایل استخراج کنید. همه گروه‌های نام‌گذاری‌شده‌ای که تطبیق داده شوند در شیء فراداده قرار خواهند گرفت. مقدار پیش‌فرض برای تنظیم \fBFILENAME_METADATA\fP تنها تاریخ را از نام فایل استخراج می‌کند. برای مثال، اگر می‌خواهید هم تاریخ و هم slug را استخراج کنید، می‌توانید مقداری شبیه به این تنظیم کنید: \fB\(aq(?P<date>\ed{4}\-\ed{2}\-\ed{2})_(?P<slug>.*)\(aq\fP .sp لطفاً توجه داشته باشید که فراداده موجود درون فایل‌های شما بر فراداده استخراج‌شده از نام فایل اولویت دارد..SS برگه‌ها (Pages) .sp اگر پوشه‌ای به نام \fBpages\fP در پوشهٔ content ایجاد کنید، تمام فایل‌های درون آن برای تولید برگه‌های ایستا، مانند برگه‌های \fBAbout\fP یا \fBContact\fP استفاده خواهند شد. (نمونه ساختار سیستم‌فایل را در زیر ببینید.) .sp می‌توانید از تنظیم \fBDISPLAY_PAGES_ON_MENU\fP برای کنترل اینکه آیا همهٔ این برگه‌ها در منوی ناوبری اصلی نمایش داده شوند یا خیر استفاده کنید. (پیش‌فرض \fBTrue\fP\& است.) .sp اگر می‌خواهید برگه‌ای را از پیوند داده شدن یا فهرست شدن در منو مستثنی کنید، ویژگی \fBstatus: hidden\fP را به فراداده‌های (metadata) آن بیفزایید. این ویژگی برای مواردی مانند ساخت برگه‌های خطا که با پوستهٔ تولیدشدهٔ وب‌گاه شما هم‌خوانی دارند، مفید است. .SS محتوای ایستا (Static content) .sp فایل‌های ایستا، فایل‌هایی غیر از مقاله‌ها و برگه‌ها هستند که بدون پردازش و به همان شکل به‌صورت مستقیم در پوشهٔ خروجی کپی می‌شوند. می‌توانید فایل‌های ایستای کپی‌شده را با تنظیم \fBSTATIC_PATHS\fP در فایل \fBpelicanconf.py\fP پروژه کنترل کنید. پیکربندی پیش‌فرض Pelican شامل دایرکتوری \fBimages\fP برای این منظور است، اما سایر موارد باید به‌صورت دستی افزوده شوند. علاوه بر این، فایل‌های ایستایی که صراحتاً پیوند داده شده‌اند نیز گنجانده می‌شوند (زیر را ببینید). .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 در پیکربندی پیش‌فرض، تمام فایل‌هایی که دارای پسوند فایل محتوای معتبر هستند (\fB\&.html\fP، \fB\&.rst\fP، \fB\&.md\fP، ...) \fIپیش از\fP تولیدکنندهٔ محتوای ایستا، توسط تولیدکننده‌های مقاله و برگه پردازش می‌شوند. با تغییر مناسب تنظیمات \fB*_EXCLUDE\fP می‌توان از این رفتار جلوگیری کرد. .UNINDENT .UNINDENT .SS محتوای مختلط در یک دایرکتوری (Mixed content in the same directory) .sp از نسخهٔ Pelican 3.5 به بعد، فایل‌های ایستا می‌توانند بدون افشای سورس برگه‌ها در وب‌گاه تولیدشده، با فایل‌های سورس برگه‌ها در یک دایرکتوری مبدأ به اشتراک گذاشته شوند. هر دایرکتوری از این دست باید به هر دوی \fBSTATIC_PATHS\fP و \fBPAGE_PATHS\fP (یا \fBSTATIC_PATHS\fP و \fBARTICLE_PATHS\fP) افزوده شود. Pelican فایل‌های سورس برگه را به‌طور عادی شناسایی و پردازش می‌کند و باقی فایل‌ها را به‌گونه‌ای کپی می‌کند که گویی در دایرکتوری مجزایی مخصوص فایل‌های ایستا قرار دارند. .sp نکته: قرار دادن فایل‌های ایستا و فایل‌های سورس محتوا در کنار هم در یک دایرکتوری مبدأ، تضمین نمی‌کند که آن‌ها در وب‌گاه تولیدشده نیز در همان مکان قرار گیرند. ساده‌ترین راه برای انجام این کار، استفاده از ساختار پیوند \fB{attach}\fP است (در زیر توضیح داده شده است). همچنین، می‌توان تنظیمات \fBSTATIC_SAVE_AS\fP، \fBPAGE_SAVE_AS\fP و \fBARTICLE_SAVE_AS\fP (و تنظیمات متناظر \fB*_URL\fP) را برای قرار دادن فایل‌هایی از انواع مختلف در کنار هم پیکربندی کرد، درست همانند نسخه‌های پیشین Pelican. .SS پیوند به محتوای داخلی (Linking to internal content) .sp از نسخهٔ Pelican 3.1 به بعد، اکنون امکان تعیین پیوندهای درون‌وب‌گاهی به فایل‌ها در سلسله‌مراتب \fIمحتوای مبدأ\fP به‌جای فایل‌ها در سلسله‌مراتب \fIتولیدشده\fP وجود دارد. این کار پیوند دادن از پست فعلی به محتواهای دیگری را که ممکن است در کنار آن پست قرار داشته باشند آسان‌تر می‌کند (به‌جای اینکه نیاز باشد مکان قرارگیری محتوای دیگر پس از تولید وب‌گاه مشخص شود). .sp برای پیوند به محتوای داخلی (فایل‌های موجود در دایرکتوری \fBcontent\fP)، از ساختار زیر برای مقصد پیوند استفاده کنید: \fB{filename}path/to/file\fP\&. نکته: اسلش رو به جلو، \fB/\fP، در دستورالعمل \fB{filename}\fP در تمام سیستم‌عامل‌ها، از جمله Windows، جداکنندهٔ مسیر اجباری است. .sp برای نمونه، یک پروژهٔ Pelican ممکن است ساختاری شبیه به این داشته باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX website/ ├── content │\ \ ├── category/ │\ \ │\ \ └── article1.rst │\ \ ├── article2.md │ └── pages │\ \ \ \ └── about.md └── pelican.conf.py .EE .UNINDENT .UNINDENT .sp در این مثال، \fBarticle1.rst\fP می‌تواند به این شکل باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX The first article ################# :date: 2012\-12\-01 10:02 See below intra\-site link examples in reStructuredText format. \(gaa link relative to the current file <{filename}../article2.md>\(ga_ \(gaa link relative to the content root <{filename}/article2.md>\(ga_ .EE .UNINDENT .UNINDENT .sp و \fBarticle2.md\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: The second article Date: 2012\-12\-01 10:02 See below intra\-site link examples in Markdown format. [a link relative to the current file]({filename}category/article1.rst) [a link relative to the content root]({filename}/category/article1.rst) .EE .UNINDENT .UNINDENT .SS پیوند به فایل‌های ایستا (Linking to static files) .sp می‌توانید با استفاده از \fB{static}path/to/file\fP به محتوای ایستا پیوند دهید. فایل‌هایی که با این ساختار پیوند داده می‌شوند، به‌طور خودکار در دایرکتوری خروجی کپی خواهند شد، حتی اگر دایرکتوری‌های مبدأ حاوی آن‌ها در تنظیم \fBSTATIC_PATHS\fP فایل \fBpelicanconf.py\fP پروژه گنجانده نشده باشند. .sp برای نمونه، دایرکتوری محتوای یک پروژه ممکن است چنین ساختاری داشته باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX content ├── images │\ \ └── han.jpg ├── pdfs │\ \ └── menu.pdf └── pages \ \ └── test.md .EE .UNINDENT .UNINDENT .sp فایل \fBtest.md\fP شامل این موارد خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX ![Alt Text]({static}/images/han.jpg) [Our Menu]({static}/pdfs/menu.pdf) .EE .UNINDENT .UNINDENT .sp سپس فرایند تولید وب‌گاه، فایل \fBhan.jpg\fP را در \fBoutput/images/han.jpg\fP و فایل \fBmenu.pdf\fP را در \fBoutput/pdfs/menu.pdf\fP کپی کرده و پیوندهای مناسب را در \fBtest.md\fP درج می‌کند. .sp اگر از \fB{static}\fP برای پیوند به یک مقاله یا برگه استفاده کنید، این پیوند به پیوندی به کد سورس آن تبدیل خواهد شد..SS پیوست کردن فایل‌های ایستا .sp از Pelican 3.5 به بعد، فایل‌های ایستا را می‌توان با استفاده از این نحو برای مقصد پیوند به یک صفحه یا مقاله \(dqپیوست\(dq کرد: \fB{attach}path/to/file\fP\&. این نحو مانند نحو \fB{static}\fP عمل می‌کند، اما علاوه بر آن، فایل ایستا را به دایرکتوری خروجیِ سند پیونددهنده نیز منتقل می‌کند. اگر فایل ایستا در یک زیردایرکتوری زیر منبع سند پیونددهنده قرار داشته باشد، آن رابطه در خروجی حفظ خواهد شد. در غیر این صورت، در کنار سند پیونددهنده (در همان سطح) قرار خواهد گرفت. .sp این قابلیت تنها برای پیوند دادن به فایل‌های ایستا کار می‌کند. .sp برای نمونه، دایرکتوری محتوای (content) یک پروژه ممکن است چنین ساختاری داشته باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX content ├── blog │\ \ ├── icons │\ \ │\ \ └── icon.png │\ \ ├── photo.jpg │\ \ └── testpost.md └── downloads └── archive.zip .EE .UNINDENT .UNINDENT .sp فایل \fBpelicanconf.py\fP شامل این موارد خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX PATH = \(aqcontent\(aq ARTICLE_PATHS = [\(aqblog\(aq] ARTICLE_SAVE_AS = \(aq{date:%Y}/{slug}.html\(aq ARTICLE_URL = \(aq{date:%Y}/{slug}.html\(aq .EE .UNINDENT .UNINDENT .sp فایل \fBtestpost.md\fP شامل این موارد خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: Test Post Category: test Date: 2014\-10\-31 ![Icon]({attach}icons/icon.png) ![Photo]({attach}photo.jpg) [Downloadable File]({attach}/downloads/archive.zip) .EE .UNINDENT .UNINDENT .sp تولید سایت در این حالت دایرکتوری خروجی‌ای با ساختار زیر ایجاد خواهد کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX output └── 2014 ├── archive.zip ├── icons │\ \ └── icon.png ├── photo.jpg └── test\-post.html .EE .UNINDENT .UNINDENT .sp توجه کنید که تمام فایل‌های پیوند داده شده با استفاده از \fB{attach}\fP در دایرکتوری خروجی مقاله یا زیردایرکتوری‌های آن قرار گرفته‌اند. .sp اگر به یک فایل ایستا چندین بار پیوند داده شود، ویژگی جابه‌جاییِ \fB{attach}\fP تنها برای اولین پیوندی که پردازش می‌شود عمل خواهد کرد. پس از اولین پیوند، Pelican با \fB{attach}\fP همانند \fB{static}\fP رفتار خواهد کرد\&. این کار از شکسته شدن پیوندهایی که قبلاً پردازش شده‌اند جلوگیری می‌کند. .sp \fBهنگام پیوند دادن به یک فایل از چندین سند، احتیاط کنید:\fP از آن‌جا که نخستین پیوند به یک فایل مکان آن را نهایی می‌کند و Pelican ترتیبی برای پردازش اسناد مشخص نمی‌کند، استفاده از \fB{attach}\fP برای فایلی که در چندین سند پیوند داده شده است می‌تواند موجب تغییر مکان آن از یک ساخت سایت به ساخت بعدی شود. (اینکه آیا این اتفاق در عمل رخ می‌دهد یا خیر، به سیستم‌عامل، سیستم فایل، نسخه Pelican و اسنادی که به پروژه اضافه، ویرایش یا حذف می‌شوند بستگی دارد.) در نتیجه، ممکن است پیوندهای هر سایت بیرونی که به مکان پیشین فایل پیوند دارد شکسته شود. \fBبنابراین توصیه می‌شود تنها در صورتی از {attach} استفاده کنید که آن را در تمامی پیوندها به آن فایل به کار ببرید، و تنها در صورتی که اسناد پیونددهنده در یک دایرکتوری مشترک قرار داشته باشند.\fP تحت این شرایط، مکان خروجی فایل در ساخت‌های بعدی تغییر نخواهد کرد. در مواردی که رعایت این احتیاط‌ها ممکن نیست، استفاده از پیوندهای \fB{static}\fP را به جای \fB{attach}\fP مد نظر قرار دهید و اجازه دهید مکان فایل بر اساس تنظیمات \fBSTATIC_SAVE_AS\fP و \fBSTATIC_URL\fP پروژه تعیین شود. (بازنویسی‌های جداگانه برای هر فایل با \fBsave_as\fP و \fBurl\fP را همچنان می‌توان در \fBEXTRA_PATH_METADATA\fP تعیین کرد\&.) .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 هنگام استفاده از \fB{attach}\fP، هر دایرکتوری والد در تنظیمات \fB*_URL\fP / \fB*_SAVE_AS\fP باید با یکدیگر مطابقت داشته باشند. همچنین ببینید: تنظیمات URL \%<#\:url-settings> .UNINDENT .UNINDENT .SS پیوند دادن به نویسندگان، دسته‌ها، نمایه و برچسب‌ها .sp می‌توانید با استفاده از نحو \fB{author}name\fP، \fB{category}foobar\fP، \fB{index}\fP و \fB{tag}tagname\fP به نویسندگان، دسته‌ها، نمایه و برچسب‌ها پیوند دهید. .SS نحو منسوخ پیوند درونی .sp جهت حفظ سازگاری با نسخه‌های پیشین، Pelican همچنان علاوه بر آکولاد (\fB{}\fP) از خطوط عمودی (\fB||\fP) برای پیوندهای درونی پشتیبانی می‌کند. برای نمونه: \fB|filename|an_article.rst\fP، \fB|tag|tagname\fP، \fB|category|foobar\fP\&. این نحو از \fB||\fP به \fB{}\fP تغییر یافت تا از تداخل با افزونه‌های Markdown یا رهنمودهای reST جلوگیری شود. به طور مشابه، Pelican هنوز هم از پیوند دادن به محتوای ایستا با \fB{filename}\fP پشتیبانی می‌کند\&. این نحو به \fB{static}\fP تغییر پیدا کرد تا پیوند دادن هم به مقاله‌ها و صفحه‌های تولیدشده و هم به منابع ایستای آن‌ها امکان‌پذیر باشد. .sp پشتیبانی از نحو قدیمی ممکن است در آینده برداشته شود..SS گنجاندن فایل‌های دیگر .sp هر دو نحو Markdown و reStructuredText سازوکارهایی را برای این کار ارائه می‌دهند. .sp در ادامه چند مثال برای \fBreStructuredText\fP با استفاده از راهنمای include \%<http://\:docutils\:.sourceforge\:.net/\:docs/\:ref/\:rst/\:directives\:.html#\:include> آمده است: .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .INDENT 3.5 .sp .EX \&.. include:: file.rst .EE .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp گنجاندن بخشی از یک فایل که با دو شناسه مشخص شده است، به همراه رنگ‌آمیزی نحو برای C++ (برش زدن بر اساس شماره خطوط نیز ممکن است): .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .INDENT 3.5 .sp .EX \&.. include:: main.cpp :code: c++ :start\-after: // begin :end\-before: // end .EE .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp گنجاندن یک فایل خام HTML (یا یک SVG درون‌خطی) و قرار دادن مستقیم آن در خروجی بدون هیچ‌گونه پردازشی: .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .INDENT 3.5 .sp .EX \&.. raw:: html :file: table.html .EE .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp برای \fBMarkdown\fP باید به یک افزونه متکی بود. برای مثال با استفاده از پلاگین mdx_include \%<https://\:github\:.com/\:neurobin/\:mdx_include>: .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .INDENT 3.5 .sp .EX \(ga\(ga\(gahtml {! template.html !} \(ga\(ga\(ga .EE .UNINDENT .UNINDENT .UNINDENT .UNINDENT .SS وارد کردن یک سایت موجود .sp امکان وارد کردن سایت شما از چندین سرویس وبلاگ‌نویسی دیگر (مانند WordPress، Tumblr و...) با استفاده از یک اسکریپت ساده وجود دارد. بخش وارد کردن یک سایت موجود را ببینید \%<#\:import>\&. .SS ترجمه‌ها .sp ترجمه مقاله‌ها امکان‌پذیر است. برای این کار باید مشخصه فراداده \fBlang\fP را به مقاله‌ها/صفحات خود اضافه کرده و تنظیم \fBDEFAULT_LANG\fP (که به‌طور پیش‌فرض انگلیسی [en] است) را مشخص کنید. با اعمال این تنظیمات، تنها مقاله‌های دارای زبان پیش‌فرض فهرست خواهند شد و هر مقاله با فهرستی از ترجمه‌های دردسترس برای آن مقاله همراه خواهد بود. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 این قابلیت اصلی Pelican زیرسایت‌هایی (مانند \fBexample.com/de\fP) با قالب‌های ترجمه‌شده برای هر زبان ایجاد نمی‌کند. برای چنین عملکردهای پیشرفته‌ای، می‌توان از پلاگین i18n_subsites \%<https://\:github\:.com/\:getpelican/\:pelican-plugins/\:tree/\:master/\:i18n_subsites> استفاده کرد. .UNINDENT .UNINDENT .sp به‌طور پیش‌فرض، Pelican از \(dqslug\(dq در نشانی مقاله استفاده می‌کند تا تشخیص دهد آیا دو یا چند مقاله ترجمه یکدیگر هستند یا خیر. (این رفتار با تنظیم \fBARTICLE_TRANSLATION_ID\fP قابل تغییر است.) مقدار slug می‌تواند به‌صورت دستی در فراداده فایل تنظیم شود؛ در صورتی که به‌طور صریح تنظیم نشود، Pelican به‌طور خودکار slug را از عنوان مقاله تولید خواهد کرد. .sp در اینجا مثالی از دو مقاله آورده شده است، یکی به زبان انگلیسی و دیگری به فرانسوی. .sp مقاله انگلیسی: .INDENT 0.0 .INDENT 3.5 .sp .EX Foobar is not dead ################## :slug: foobar\-is\-not\-dead :lang: en That\(aqs true, foobar is still alive! .EE .UNINDENT .UNINDENT .sp و نسخه فرانسوی: .INDENT 0.0 .INDENT 3.5 .sp .EX Foobar n\(aqest pas mort ! ####################### :slug: foobar\-is\-not\-dead :lang: fr Oui oui, foobar est toujours vivant ! .EE .UNINDENT .UNINDENT .sp صرف‌نظر از کیفیت محتوای پست، مشاهده می‌کنید که تنها مورد مشترک بین دو مقاله، slug است که در اینجا به عنوان یک شناسه عمل می‌کند. اگر ترجیح می‌دهید slug را به این شیوه به‌طور صریح تعریف نکنید، باید در عوض مطمئن شوید که عناوین مقاله‌های ترجمه‌شده یکسان باشند، چرا که slug به‌طور خودکار از عنوان مقاله تولید خواهد شد. .sp اگر نمی‌خواهید نسخه اصلی یک مقاله خاص با تنظیم \fBDEFAULT_LANG\fP شناسایی شود، از فراداده \fBtranslation\fP برای مشخص کردن اینکه کدام پست‌ها ترجمه هستند استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX Foobar is not dead ################## :slug: foobar\-is\-not\-dead :lang: en :translation: true That\(aqs true, foobar is still alive! .EE .UNINDENT .UNINDENT.SS برجسته‌سازی نحو (Syntax highlighting) .sp Pelican می‌تواند برجسته‌سازی رنگی نحو را برای بلوک‌های کد شما ارائه دهد. برای انجام این کار، باید از قراردادهای زیر در فایل‌های محتوای خود استفاده کنید. .sp برای reStructuredText، از دستورالعمل \fBcode\-block\fP برای مشخص کردن نوع کدی که باید برجسته شود استفاده کنید (در این مثال‌ها، از \fBpython\fP استفاده می‌کنیم): .INDENT 0.0 .INDENT 3.5 .sp .EX \&.. code\-block:: python print(\(dqPelican is a static site generator.\(dq) .EE .UNINDENT .UNINDENT .sp برای Markdown، که از افزونه CodeHilite \%<https://\:python-markdown\:.github\:.io/\:extensions/\:code_hilite/#\:syntax> برای ارائه برجسته‌سازی نحو بهره می‌برد، شناسه زبان را دقیقاً بالای بلوک کد قرار دهید و هم شناسه و هم کد را دندانه‌گذاری کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX There are two ways to specify the identifier: :::python print(\(dqThe triple\-colon syntax will *not* show line numbers.\(dq) To display line numbers, use a path\-less shebang instead of colons: #!python print(\(dqThe path\-less shebang syntax *will* show line numbers.\(dq) .EE .UNINDENT .UNINDENT .sp شناسه مشخص‌شده (مانند \fBpython\fP، \fBruby\fP) باید شناسه‌ای باشد که در فهرست تحلیل‌گران لغوی (lexers) موجود \%<https://\:pygments\:.org/\:docs/\:lexers>\& آمده است. .sp هنگام استفاده از reStructuredText، گزینه‌های زیر در دستورالعمل \fIcode\-block\fP در دسترس هستند: .TS box center; l|l|l. T{ گزینه T} T{ مقادیر معتبر T} T{ توضیحات T} _ T{ anchorlinenos T} T{ N/A T} T{ در صورت وجود، شماره خطوط را در برچسب‌های \fB<a>\fP قرار می‌دهد. T} _ T{ classprefix T} T{ string T} T{ رشته‌ای که به ابتدای نام کلاس‌های توکن افزوده می‌شود T} _ T{ hl_lines T} T{ numbers T} T{ فهرست خطوطی که باید برجسته شوند؛ شماره خطوط برای برجسته‌سازی با یک فاصله از هم جدا می‌شوند. این گزینه مشابه \fBemphasize\-lines\fP در Sphinx است، اما از بازه‌ای از شماره خطوط که با خط تیره یا کاما جدا شده باشند، پشتیبانی نمی‌کند. T} _ T{ lineanchors T} T{ string T} T{ هر خط را با استفاده از این رشته و \-linenumber در یک لنگر (anchor) قرار می‌دهد. T} _ T{ linenos T} T{ string T} T{ در صورت وجود یا تنظیم روی \(dqtable\(dq، شماره خطوط را در یک جدول خروجی می‌دهد؛ اگر روی \(dqinline\(dq تنظیم شود، آن‌ها را به‌صورت درون‌خطی خروجی می‌دهد. مقدار \(dqnone\(dq یعنی شماره خطوط برای این جدول خروجی داده نشود. T} _ T{ linenospecial T} T{ number T} T{ در صورت تنظیم، به هر nامین خط، کلاس CSS با نام \(aqspecial\(aq اختصاص می‌یابد. T} _ T{ linenostart T} T{ number T} T{ شماره خط برای خط نخست. T} _ T{ linenostep T} T{ number T} T{ چاپ شماره خط برای هر nامین خط. T} _ T{ lineseparator T} T{ string T} T{ رشته‌ای که بین خطوط کد چاپ می‌شود؛ به‌طور پیش‌فرض \(aqn\(aq. T} _ T{ linespans T} T{ string T} T{ هر خط را با استفاده از این و \-linenumber در یک span قرار می‌دهد. T} _ T{ nobackground T} T{ N/A T} T{ در صورت تنظیم، رنگ پس‌زمینه برای عنصر دربرگیرنده خروجی داده نمی‌شود. T} _ T{ nowrap T} T{ N/A T} T{ در صورت تنظیم، توکن‌ها به‌هیچ‌وجه دربرگرفته (wrap) نمی‌شوند. T} _ T{ tagsfile T} T{ string T} T{ فایل ctags مورد استفاده برای تعاریف نام‌ها. T} _ T{ tagurlformat T} T{ string T} T{ قالب برای پیوندهای ctag. T} .TE .sp توجه داشته باشید که بسته به نسخه، ممکن است ماژول Pygments شما همه این گزینه‌ها را در دسترس نداشته باشد. برای جزئیات بیشتر درباره هر یک از گزینه‌ها به بخش \fIHtmlFormatter\fP در مستندات Pygments \%<https://\:pygments\:.org/\:docs/\:formatters> مراجعه کنید. .sp برای مثال، بلوک کد زیر شماره خطوط را با شروع از 153 فعال می‌کند و پیشوند کلاس‌های CSS مربوط به Pygments را برابر با \fIpgcss\fP قرار می‌دهد تا نام‌ها یکتاتر شده و از تداخل‌های احتمالی CSS جلوگیری شود: .INDENT 0.0 .INDENT 3.5 .sp .EX \&.. code\-block:: identifier :classprefix: pgcss :linenos: table :linenostart: 153 <indented code block goes here> .EE .UNINDENT .UNINDENT .sp همچنین می‌توان متغیر \fBPYGMENTS_RST_OPTIONS\fP را در فایل تنظیمات Pelican مشخص کرد تا شامل گزینه‌هایی باشد که به‌طور خودکار روی هر بلوک کد اعمال شوند. .sp برای مثال، اگر می‌خواهید شماره خطوط و یک پیشوند CSS برای هر بلوک کد نمایش داده شود، این متغیر را بدین‌صورت تنظیم می‌کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX PYGMENTS_RST_OPTIONS = {\(aqclassprefix\(aq: \(aqpgcss\(aq, \(aqlinenos\(aq: \(aqtable\(aq} .EE .UNINDENT .UNINDENT .sp در صورت تعیین، تنظیمات مربوط به هر بلوک کد مجزا، مقادیر پیش‌فرض موجود در فایل تنظیمات شما را بازنویسی خواهند کرد..SS "انتشار پیش‌نویس‌ها (Publishing drafts)" .sp اگر می‌خواهید یک مقاله یا برگه را به عنوان پیش‌نویس منتشر کنید (برای مثال، جهت بازبینی توسط دوستان پیش از انتشار نهایی)، می‌توانید ویژگی \fBStatus: draft\fP را به فراداده‌های (metadata) آن اضافه کنید. آن مقاله سپس در پوشهٔ \fBdrafts\fP خروجی داده خواهد شد و نه در صفحهٔ اصلی (index) و نه در هیچ‌یک از صفحات دسته‌بندی یا برچسب فهرست نخواهد شد. .sp اگر مایلید مقالات شما به طور خودکار به عنوان پیش‌نویس منتشر شوند (تا از انتشار تصادفی مقاله قبل از پایان نگارش آن جلوگیری شود)، وضعیت را در \fBDEFAULT_METADATA\fP قرار دهید: .INDENT 0.0 .INDENT 3.5 .sp .EX DEFAULT_METADATA = { \(aqstatus\(aq: \(aqdraft\(aq, } .EE .UNINDENT .UNINDENT .sp برای انتشار پستی که وضعیت پیش‌فرض آن \fBdraft\fP است، فرادادهٔ پست را به‌روزرسانی کرده و مقدار \fBStatus: published\fP را در آن قرار دهید\&. .SS "پست‌های پنهان (Hidden Posts)" .sp همانند برگه‌ها، پست‌ها را نیز می‌توان با مشخصهٔ \fBStatus: hidden\fP به صورت \fBhidden\fP نشانه‌گذاری کرد. پست‌های پنهان طبق انتظار در مسیر \fBARTICLE_SAVE_AS\fP خروجی داده می‌شوند، اما به صورت پیش‌فرض در فهرست‌های برچسب، دسته‌بندی و نویسنده، و همچنین در فید اصلی مقالات قرار نخواهند گرفت. این عمل اثری معادل ایجاد یک پست «فهرست‌نشده» (\(dqunlisted\(dq) دارد. .SS "صرف‌نظر از پست‌ها (Skip Posts)" .sp پست‌هایی که با وضعیت \fBskip\fP نشانه‌گذاری شده باشند کاملاً نادیده گرفته می‌شوند. آن‌ها نه پردازش می‌شوند و نه در مسیر \fBARTICLE_SAVE_AS\fP ذخیره می‌گردند. این دسته از پست‌ها نیز در فهرست‌ها یا فیدها گنجانده نخواهند شد. .SS "انتشار سایت (Publish your site)" .SS "تولید سایت (Site generation)" .sp پس از نصب Pelican و در دست داشتن محتوا (مثلاً در قالب Markdown یا reST)، می‌توانید با استفاده از دستور \fBpelican\fP و مشخص کردن مسیر محتوا و (به طور اختیاری) مسیر فایل تنظیمات \%<>، محتوای خود را به HTML تبدیل کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican /path/to/your/content/ [\-s path/to/your/settings.py] .EE .UNINDENT .UNINDENT .sp دستور فوق سایت شما را تولید کرده و آن را در پوشهٔ \fBoutput/\fP ذخیره می‌کند و با استفاده از پوستهٔ پیش‌فرض، سایتی ساده می‌سازد. پوستهٔ پیش‌فرض شامل HTML بسیار ساده و فاقد استایل ظاهری است تا افراد بتوانند از آن به عنوان پایه‌ای برای ساخت پوسته‌های اختصاصی خود استفاده کنند. .sp شما همچنین می‌توانید به Pelican دستور دهید تا تغییرات فایل‌ها را پایش کند، به جای اینکه هر بار برای مشاهدهٔ تغییرات دستور را دستی اجرا کنید. برای فعال‌سازی این مورد، دستور \fBpelican\fP را با گزینهٔ \fB\-r\fP یا \fB\-\-autoreload\fP اجرا کنید. در محیط‌های غیر از ویندوز، این گزینه را می‌توان با گزینهٔ \fB\-l\fP یا \fB\-\-listen\fP ترکیب کرد تا هم‌زمان خروجی به صورت خودکار بازتولید شده \fIو\fP در آدرس \%<http://\:localhost:8000> ارائه شود: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican \-\-autoreload \-\-listen .EE .UNINDENT .UNINDENT .sp گزینه‌های خط فرمان دیگری نیز برای Pelican موجود است. برای مشاهدهٔ تمام گزینه‌های قابل استفاده، راهنما را بررسی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican \-\-help .EE .UNINDENT .UNINDENT .SS "مشاهده فایل‌های تولیدشده (Viewing the generated files)" .sp فایل‌های تولیدشده توسط Pelican از نوع ایستا (static) هستند، بنابراین برای مشاهدهٔ آن‌ها نیاز به ابزار خاصی ندارید. می‌توانید از مرورگر خود برای باز کردن مستقیم فایل‌های HTML تولیدشده استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX firefox output/index.html .EE .UNINDENT .UNINDENT .sp از آنجا که روش فوق ممکن است در یافتن مسیر فایل‌های CSS و سایر دارایی‌های پیوندیافته با مشکل مواجه شود، اجرای وب‌سرور داخلی سادهٔ Pelican معمولاً تجربهٔ پیش‌نمایش مطمئن‌تری ارائه می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican \-\-listen .EE .UNINDENT .UNINDENT .sp پس از راه‌اندازی وب‌سرور، می‌توانید سایت خود را در نشانی زیر پیش‌نمایش کنید: \%<http://\:localhost:8000> .SS "استقرار (Deployment)" .sp پس از تولید سایت، پیش‌نمایش آن در محیط توسعهٔ محلی و آماده شدن برای استقرار در محیط عملیاتی (production)، ممکن است ابتدا بخواهید سایت خود را با تنظیمات خاص محیط عملیاتی (مانند سرویس‌های تحلیل آماری، فیدها و غیره) که تعریف کرده‌اید، مجدداً بازتولید کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-s publishconf.py .EE .UNINDENT .UNINDENT .sp برای پایه‌گذاری پیکربندی انتشار خود بر روی \fBpelicanconf.py\fP، می‌توانید تنظیمات \fBpelicanconf\fP را با افزودن خط زیر به فایل \fBpublishconf.py\fP وارد (import) کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX from pelicanconf import * .EE .UNINDENT .UNINDENT .sp اگر فایل \fBpublishconf.py\fP را با استفاده از دستور \fBpelican\-quickstart\fP ایجاد کرده باشید، این خط به صورت پیش‌فرض در آن گنجانده شده است. .sp مراحل استقرار سایت شما به بستر میزبانی آن بستگی دارد. اگر دسترسی SSH به سروری دارید که Nginx یا Apache را اجرا می‌کند، می‌توانید از ابزار \fBrsync\fP برای انتقال فایل‌های سایت خود استفاده نمایید: .INDENT 0.0 .INDENT 3.5 .sp .EX rsync \-avc \-\-delete output/ host.example.com:/var/www/your\-site/ .EE .UNINDENT .UNINDENT .sp گزینه‌های استقرار متعدد دیگری نیز در دسترس هستند که برخی از آن‌ها را می‌توان هنگام راه‌اندازی اولیهٔ سایت از طریق دستور \fBpelican\-quickstart\fP پیکربندی کرد. برای جزئیات مربوط به انتشار از طریق GitHub Pages، صفحهٔ Tips \%<> را ببینید..SS "خودکارسازی (Automation)" .sp در حالی که دستور \fBpelican\fP روش استاندارد و مرجع برای تولید وب‌سایت شما است، ابزارهای خودکارسازی می‌توانند برای ساده‌سازی و بهبود فرآیند تولید و انتشار به کار روند. یکی از پرسش‌هایی که در طول فرآیند \fBpelican\-quickstart\fP پرسیده می‌شود، مربوط به این است که آیا مایلید تولید و انتشار وب‌سایت را خودکارسازی کنید یا خیر. اگر به آن پرسش پاسخ \(dqyes\(dq داده باشید، یک فایل \fBtasks.py\fP و یک \fBMakefile\fP در ریشهٔ پروژهٔ شما تولید خواهد شد. این فایل‌ها که با اطلاعات مشخصی برگرفته از سایر پاسخ‌های ارائه شده در طول فرآیند \fBpelican\-quickstart\fP از پیش پر شده‌اند، به عنوان یک نقطهٔ شروع در نظر گرفته شده‌اند و باید متناسب با نیازها و الگوهای مصرف خاص شما سفارشی‌سازی شوند. اگر احساس می‌کنید یک یا هر دوی این ابزارهای خودکارسازی کاربرد محدودی برای شما دارند، این فایل‌ها در هر زمان قابل حذف هستند و تأثیری بر استفاده از دستور اصلی و استاندارد \fBpelican\fP نخواهند گذاشت. .sp در ادامه ابزارهای خودکارسازی آورده شده‌اند که دستور \fBpelican\fP را پوشش می‌دهند (\(dqwrap\(dq می‌کنند) و می‌توانند فرآیند تولید، پیش‌نمایش، و بارگذاری سایت شما را ساده‌تر نمایند. .SS Invoke .sp مزیت Invoke \%<https://\:www\:.pyinvoke\:.org> این است که به زبان Python نوشته شده و بنابراین می‌تواند در طیف گسترده‌ای از محیط‌ها استفاده شود. نکتهٔ منفی آن این است که باید به صورت جداگانه نصب شود. برای نصب Invoke از دستور زیر استفاده کنید؛ در صورتی که محیط شما نیاز دارد، \fBsudo\fP را به ابتدای آن بیفزایید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install invoke .EE .UNINDENT .UNINDENT .sp کمی وقت بگذارید تا فایل \fBtasks.py\fP را که در ریشهٔ پروژهٔ شما ایجاد شده است باز کنید. تعدادی دستور مشاهده خواهید کرد که هر یک از آن‌ها را می‌توان به دلخواه تغییر نام داد، حذف کرد و/یا سفارشی‌سازی نمود. با استفاده از پیکربندی پیش‌فرض، می‌توانید وب‌سایت خود را از طریق دستور زیر تولید کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke build .EE .UNINDENT .UNINDENT .sp اگر ترجیح می‌دهید Pelican هر بار با تشخیص یک تغییر، سایت شما را به‌طور خودکار بازتولید کند (که هنگام آزمایش و بررسی محلی بسیار سودمند است)، در عوض از دستور زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke regenerate .EE .UNINDENT .UNINDENT .sp برای ارائهٔ (serve) سایت تولیدشده به طوری که بتوان آن را در مرورگر در نشانی \%<http://\:localhost:8000> پیش‌نمایش کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke serve .EE .UNINDENT .UNINDENT .sp برای ارائهٔ سایت تولیدشده به همراه بارگذاری مجدد خودکار در مرورگر با هر بار تشخیص تغییر، ابتدا دستور \fBpython \-m pip install livereload\fP را اجرا کرده، سپس دستور زیر را به کار ببرید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke livereload .EE .UNINDENT .UNINDENT .sp اگر در حین فرآیند \fBpelican\-quickstart\fP هنگام پرسش دربارهٔ تمایل به بارگذاری سایت از طریق SSH پاسخ \(dqyes\(dq داده‌اید، می‌توانید از دستور زیر برای انتشار سایت خود از طریق rsync بر بستر SSH استفاده نمایید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke publish .EE .UNINDENT .UNINDENT .sp این‌ها تنها چند مورد از دستورهای موجود به طور پیش‌فرض هستند؛ بنابراین در بررسی \fBtasks.py\fP و مشاهدهٔ سایر دستورهای موجود تردید نکنید. مهم‌تر از آن، بدون درنگ \fBtasks.py\fP را بر اساس نیازها و ترجیحات خاص خود سفارشی‌سازی کنید. .SS Make .sp یک \fBMakefile\fP نیز زمانی که در حین فرآیند \fBpelican\-quickstart\fP به پرسش مربوطه پاسخ \(dqyes\(dq بدهید، به طور خودکار برای شما ایجاد می‌شود. مزیت این روش در این است که دستور \fBmake\fP به طور توکار در اغلب سیستم‌های POSIX وجود دارد و از این رو برای استفاده از آن نیازی به نصب مورد دیگری نیست. نکتهٔ منفی این است که سیستم‌های غیر POSIX (مانند Windows) شامل \fBmake\fP نیستند، و نصب آن بر روی این سیستم‌ها می‌تواند کار دشوار و غیربدیهی باشد. .sp اگر می‌خواهید از \fBmake\fP برای تولید سایت با استفاده از تنظیمات موجود در \fBpelicanconf.py\fP استفاده کنید، دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make html .EE .UNINDENT .UNINDENT .sp جهت تولید سایت برای محیط عملیاتی (production)، با بهره‌گیری از تنظیمات \fBpublishconf.py\fP، دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make publish .EE .UNINDENT .UNINDENT .sp اگر ترجیح می‌دهید Pelican با هر بار شناسایی تغییرات سایت شما را به‌طور خودکار مجدداً تولید کند (که هنگام آزمایش محلی بسیار مفید است)، به جای آن از دستور زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make regenerate .EE .UNINDENT .UNINDENT .sp برای ارائهٔ سایت تولیدشده به گونه‌ای که بتوان آن را در مرورگر در آدرس \%<http://\:localhost:8000> پیش‌نمایش کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX make serve .EE .UNINDENT .UNINDENT .sp در حالت عادی لازم است دستورهای \fBmake regenerate\fP و \fBmake serve\fP را در دو نشست پایانهٔ جداگانه اجرا کنید، اما می‌توانید هر دو را به صورت هم‌زمان با دستور زیر اجرا نمایید: .INDENT 0.0 .INDENT 3.5 .sp .EX make devserver .EE .UNINDENT .UNINDENT .sp دستور فوق به‌طور هم‌زمان Pelican را در حالت بازتولید اجرا کرده و خروجی را نیز در نشانی \%<http://\:localhost:8000>\& ارائه می‌دهد. .sp هنگامی که آمادهٔ انتشار سایت خود شدید، می‌توانید آن را از طریق روش(هایی) که در طول پرسشنامهٔ \fBpelican\-quickstart\fP برگزیده‌اید بارگذاری نمایید. برای این مثال، از rsync بر بستر ssh استفاده می‌کنیم: .INDENT 0.0 .INDENT 3.5 .sp .EX make rsync_upload .EE .UNINDENT .UNINDENT .sp کار تمام است! اکنون وب‌سایت شما باید زنده و برخط باشد. .sp (اسکریپت‌های پیش‌فرض \fBMakefile\fP و \fBdevserver.sh\fP از فایل‌های اجرایی \fBpython\fP و \fBpelican\fP برای انجام وظایف خود استفاده می‌کنند. در صورت تمایل به استفاده از فایل‌های اجرایی دیگر، مانند \fBpython3\fP، می‌توانید به ترتیب متغیرهای محیطی \fBPY\fP و \fBPELICAN\fP را تنظیم کنید تا نام فایل‌های اجرایی پیش‌فرض را بازنویسی کنند.).SS تنظیمات (Settings) .sp Pelican به لطف یک فایل تنظیمات که می‌توانید به خط فرمان بدهید، قابل پیکربندی است: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-s path/to/your/pelicanconf.py .EE .UNINDENT .UNINDENT .sp اگر از دستور \fBpelican\-quickstart\fP استفاده کرده باشید، فایل تنظیمات اصلی شما به‌طور پیش‌فرض \fBpelicanconf.py\fP نام خواهد داشت. .sp همچنین می‌توانید تنظیمات را از طریق پرچم‌های گزینهٔ \fB\-e\fP / \fB\-\-extra\-settings\fP مشخص کنید. این گزینه هم تنظیمات پیش‌فرض و هم هر تنظیم تعریف‌شده درون فایل تنظیمات را بازنویسی خواهد کرد. توجه داشته باشید که مقادیر باید از نشانه‌گذاری JSON پیروی کنند: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-e SITENAME=\(aq\(dqA site\(dq\(aq READERS=\(aq{\(dqhtml\(dq: null}\(aq CACHE_CONTENT=true .EE .UNINDENT .UNINDENT .sp متغیرهای محیطی نیز می‌توانند در اینجا استفاده شوند، اما باید به‌درستی گریزدهی (escape) شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-e API_KEY=\(aq\(aq\e\(dq$API_KEY\e\(dq\(aq\(aq .EE .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 هنگام آزمایش تنظیمات مختلف (به‌ویژه تنظیمات فراداده)، ممکن است حافظهٔ پنهان (caching) تداخل ایجاد کرده و تغییرات قابل مشاهده نباشند. در چنین مواردی با \fBLOAD_CONTENT_CACHE = False\fP کش را غیرفعال کنید یا از سوئیچ خط فرمان \fB\-\-ignore\-cache\fP استفاده نمایید. .UNINDENT .UNINDENT .sp تنظیمات در قالب یک ماژول پایتون (یک فایل) پیکربندی می‌شوند. یک فایل تنظیمات نمونه در \%<https://\:raw\:.githubusercontent\:.com/\:getpelican/\:pelican/\:main/\:samples/\:pelican\:.conf\:.py> برای ارجاع در دسترس است. .sp برای مشاهدهٔ فهرستی از تنظیمات فعلی در محیط خود، شامل مقادیر پیش‌فرض و هر مقدار سفارشی‌شده، دستور زیر را اجرا کنید (برای دیدن مقادیر فقط مربوط به تنظیماتی خاص، یک یا چند نام تنظیم را به عنوان آرگومان اضافه کنید): .INDENT 0.0 .INDENT 3.5 .sp .EX pelican \-\-print\-settings .EE .UNINDENT .UNINDENT .sp تمام شناسه‌های تنظیمات باید با حروف بزرگ نوشته شوند، در غیر این صورت پردازش نخواهند شد. مقادیر تنظیمی که عدد (5، 20 و غیره)، مقادیر بولی (True، False، None و غیره)، دیکشنری یا تاپل هستند \fIنباید\fP در علامت نقل‌قول قرار گیرند. تمام مقادیر دیگر (یعنی رشته‌ها) \fIباید\fP درون علامت نقل‌قول قرار داده شوند. .sp مگر در مواردی که صراحتاً خلاف آن قید شده باشد، تنظیماتی که به مسیرها ارجاع می‌دهند می‌توانند مطلق یا نسبی نسبت به فایل پیکربندی باشند. تنظیماتی که در فایل پیکربندی تعریف می‌کنید به قالب‌ها ارسال خواهند شد، که به شما امکان می‌دهد از تنظیمات خود برای افزودن محتوا در سراسر وبگاه استفاده کنید. .sp در ادامه فهرستی از تنظیمات Pelican آمده است: .SS تنظیمات پایه (Basic settings) .INDENT 0.0 .TP .B USE_FOLDER_AS_CATEGORY = True هنگامی که دسته‌ای را در فرادادهٔ پست خود مشخص نکنید، در صورت تنظیم این گزینه روی \fBTrue\fP و سازماندهی مقاله‌ها در زیرپوشه‌ها، نام زیرپوشه به دستهٔ پست شما تبدیل خواهد شد. اگر روی \fBFalse\fP تنظیم شود، \fBDEFAULT_CATEGORY\fP به عنوان جایگزین استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B DEFAULT_CATEGORY = \(aqmisc\(aq دستهٔ پیش‌فرض برای استفاده در صورت مشخص نشدن دسته. .UNINDENT .INDENT 0.0 .TP .B DISPLAY_PAGES_ON_MENU = True اینکه آیا برگه‌ها در منوی قالب نمایش داده شوند یا خیر. قالب‌ها ممکن است این تنظیم را رعایت کنند یا نکنند. .UNINDENT .INDENT 0.0 .TP .B DISPLAY_CATEGORIES_ON_MENU = True اینکه آیا دسته‌ها در منوی قالب نمایش داده شوند یا خیر. قالب‌ها ممکن است این تنظیم را رعایت کنند یا نکنند. .UNINDENT .INDENT 0.0 .TP .B DOCUTILS_SETTINGS = {} تنظیمات پیکربندی اضافی برای ناشر docutils (تنها برای reStructuredText قابل اعمال است). برای جزئیات بیشتر به تنظیمات پیکربندی Docutils در \%<http://\:docutils\:.sourceforge\:.net/\:docs/\:user/\:config\:.html> مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B DELETE_OUTPUT_DIRECTORY = False حذف دایرکتوری خروجی و \fBتمام\fP محتویات آن، پیش از تولید فایل‌های جدید. این تنظیم می‌تواند در جلوگیری از باقی ماندن فایل‌های قدیمی و غیرضروری در خروجی مفید باشد. با این حال، \fBاین یک تنظیم مخرب است و باید با احتیاط بسیار زیاد به کار رود.\fP .UNINDENT .INDENT 0.0 .TP .B OUTPUT_RETENTION = [] فهرستی از نام فایل‌ها که باید در دایرکتوری خروجی حفظ شوند و حذف نشوند. یکی از موارد استفاده می‌تواند حفظ داده‌های سیستم کنترل نسخه باشد. .sp مثال: .INDENT 7.0 .INDENT 3.5 .sp .EX OUTPUT_RETENTION = [\(dq.hg\(dq, \(dq.git\(dq, \(dq.bzr\(dq] .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B JINJA_ENVIRONMENT = {\(aqtrim_blocks\(aq: True, \(aqlstrip_blocks\(aq: True} یک دیکشنری از متغیرهای محیطی سفارشی Jinja2 که می‌خواهید استفاده کنید. این همچنین شامل فهرستی از افزونه‌هایی است که ممکن است بخواهید اضافه کنید. مستندات Jinja Environment در \%<https://\:jinja\:.palletsprojects\:.com/\:en/\:latest/\:api/#\:jinja2\:.Environment>\& را ببینید. .UNINDENT .INDENT 0.0 .TP .B JINJA_FILTERS = {} یک دیکشنری از فیلترهای سفارشی Jinja2 که می‌خواهید استفاده کنید. این دیکشنری باید نام فیلتر را به تابع فیلتر نگاشت کند. .sp مثال: .INDENT 7.0 .INDENT 3.5 .sp .EX import sys sys.path.append(\(aqto/your/path\(aq) from custom_filter import urlencode_filter JINJA_FILTERS = {\(aqurlencode\(aq: urlencode_filter} .EE .UNINDENT .UNINDENT .sp ببینید: مستندات فیلترهای سفارشی Jinja در \%<https://\:jinja\:.palletsprojects\:.com/\:en/\:latest/\:api/#\:custom-filters>\&. .UNINDENT .INDENT 0.0 .TP .B JINJA_GLOBALS = {} یک دیکشنری از اشیاء سفارشی برای نگاشت در فضای نام محیط سراسری Jinja2. این دیکشنری باید نام سراسری را به متغیر/تابع سراسری نگاشت کند. ببینید: مستندات فضای نام سراسری Jinja در \%<https://\:jinja\:.palletsprojects\:.com/\:en/\:latest/\:api/#\:the-global-namespace>\&. .UNINDENT .INDENT 0.0 .TP .B JINJA_TESTS = {} یک دیکشنری از تست‌های سفارشی Jinja2 که می‌خواهید استفاده کنید. این دیکشنری باید نام‌های تست را به توابع تست نگاشت کند. ببینید: مستندات تست‌های سفارشی Jinja در \%<https://\:jinja\:.palletsprojects\:.com/\:en/\:latest/\:api/#\:custom-tests>\&. .UNINDENT .INDENT 0.0 .TP .B LOG_FILTER = [] فهرستی از تاپل‌های حاوی سطح لاگ (تا \fBwarning\fP) و پیامی که باید نادیده گرفته شود. .sp مثال: .INDENT 7.0 .INDENT 3.5 .sp .EX LOG_FILTER = [(logging.WARN, \(aqTAG_SAVE_AS is set to False\(aq)] .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B READERS = {} یک دیکشنری از پسوندهای فایل / کلاس‌های Reader تا Pelican آن‌ها را پردازش کند یا نادیده بگیرد. .sp برای نمونه، جهت جلوگیری از پردازش فایل‌های .html، قرار دهید: .INDENT 7.0 .INDENT 3.5 .sp .EX READERS = {\(aqhtml\(aq: None} .EE .UNINDENT .UNINDENT .sp برای افزودن یک خواننده (reader) سفارشی برای پسوند \fBfoo\fP، قرار دهید: .INDENT 7.0 .INDENT 3.5 .sp .EX READERS = {\(aqfoo\(aq: FooReader} .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0.TP .B IGNORE_FILES = [\(aq**/.*\(aq] فهرستی از الگوهای تطبیق مسیر (glob) یونیکس. فایل‌ها و دایرکتوری‌هایی که با هر یک از این الگوها، یا هر کدام از فایل‌ها و دایرکتوری‌های معمولاً پنهان تنظیم‌شده توسط \fBwatchfiles.DefaultFilter\fP مطابقت داشته باشند، توسط پردازشگر نادیده گرفته خواهند شد. برای مثال، مقدار پیش‌فرض \fB[\(aq**/.*\(aq]\fP فایل‌ها و دایرکتوری‌های «پنهان» را نادیده می‌گیرد، و \fB[\(aq__pycache__\(aq]\fP حافظه‌های نهان بایت‌کدِ Python 3 را نادیده خواهد گرفت. .sp برای دیدن فهرست کاملی از فایل‌های معمولاً پنهان تنظیم‌شده توسط \fBwatchfiles.DefaultFilter\fP، لطفاً به مستندات watchfiles به نشانی \%<https://\:watchfiles\:.helpmanual\:.io/\:api/\:filters/#\:watchfiles\:.DefaultFilter\:.ignore_dirs>\& مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B MARKDOWN = {...} تنظیمات پیکربندی اضافی برای پردازشگر Markdown. برای مشاهدهٔ فهرست کاملی از گزینه‌های پشتیبانی‌شده، به بخش Options در مستندات Python Markdown به نشانی \%<https://\:python-markdown\:.github\:.io/\:reference/#\:markdown> مراجعه کنید. گزینهٔ \fBextensions\fP به‌طور خودکار بر اساس گزینهٔ \fBextension_configs\fP محاسبه خواهد شد. .sp مقدار پیش‌فرض: .INDENT 7.0 .INDENT 3.5 .sp .EX MARKDOWN = { \(aqextension_configs\(aq: { \(aqmarkdown.extensions.codehilite\(aq: {\(aqcss_class\(aq: \(aqhighlight\(aq}, \(aqmarkdown.extensions.extra\(aq: {}, \(aqmarkdown.extensions.meta\(aq: {}, }, \(aqoutput_format\(aq: \(aqhtml5\(aq, } .EE .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 7.0 .INDENT 3.5 دیکشنریِ تعریف‌شده در فایل تنظیمات شما جایگزین این مقدار پیش‌فرض خواهد شد. .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B OUTPUT_PATH = \(aqoutput/\(aq محل ذخیرهٔ فایل‌های تولیدشده. این مسیر باید با دایرکتوری ریشهٔ میزبان مجازی (virtual host) وب‌سرور شما مطابقت داشته باشد. .UNINDENT .INDENT 0.0 .TP .B PATH مسیر دایرکتوری محتوا برای پردازش توسط Pelican. اگر تعریف نشده باشد، و مسیر محتوا نیز از طریق آرگومانی به دستور \fBpelican\fP مشخص نشده باشد، Pelican از دایرکتوری کاری فعلی استفاده خواهد کرد. .UNINDENT .INDENT 0.0 .TP .B PAGE_PATHS = [\(aqpages\(aq] فهرستی از دایرکتوری‌ها و فایل‌ها برای جستجوی برگه‌ها، به‌صورت نسبی نسبت به \fBPATH\fP\&. .UNINDENT .INDENT 0.0 .TP .B PAGE_EXCLUDES = [] فهرستی از دایرکتوری‌ها برای مستثنی کردن هنگام جستجوی برگه‌ها، علاوه بر \fBARTICLE_PATHS\fP\&. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_PATHS = [\(aq\(aq] فهرستی از دایرکتوری‌ها و فایل‌ها برای جستجوی مقاله‌ها، به‌صورت نسبی نسبت به \fBPATH\fP\&. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_EXCLUDES = [] فهرستی از دایرکتوری‌ها برای مستثنی کردن هنگام جستجوی مقاله‌ها، علاوه بر \fBPAGE_PATHS\fP\&. .UNINDENT .INDENT 0.0 .TP .B OUTPUT_SOURCES = False اگر می‌خواهید مقاله‌ها و برگه‌ها با قالب اصلی خود (مانند Markdown یا reStructuredText) در \fBOUTPUT_PATH\fP مشخص‌شده کپی شوند، این گزینه را روی True تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B OUTPUT_SOURCES_EXTENSION = \(aq.text\(aq پسوندی را که توسط SourcesGenerator استفاده می‌شود کنترل می‌کند. پیش‌فرض \fB\&.text\fP است. اگر یک رشتهٔ معتبر نباشد، از مقدار پیش‌فرض استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B PLUGINS = None فهرست افزونه‌ها برای بارگیری. بخش افزونه‌ها \%<#\:plugins>\& را ببینید. .UNINDENT .INDENT 0.0 .TP .B PLUGIN_PATHS = [] فهرستی از دایرکتوری‌ها برای جستجوی افزونه‌ها. بخش افزونه‌ها \%<#\:plugins>\& را ببینید. .UNINDENT .INDENT 0.0 .TP .B SITENAME = \(aqA Pelican Blog\(aq نام وب‌سایت شما .UNINDENT .INDENT 0.0 .TP .B SITEURL نشانی اینترنتی پایه (Base URL) وب‌سایت شما. به‌طور پیش‌فرض تعریف نشده است، بنابراین بهتر است مقدار SITEURL خود را تعیین کنید؛ در غیر این صورت فیدها با نشانی‌های اینترنتی با ساختار صحیح تولید نخواهند شد. اگر سایت شما از طریق HTTPS در دسترس است، این تنظیم باید با \fBhttps://\fP آغاز شود — در غیر این صورت از \fBhttp://\fP استفاده کنید. سپس دامنهٔ خود را بدون ممیز انتهایی به آن اضافه کنید. مثال: \fBSITEURL = \(aqhttps://example.com\(aq\fP .UNINDENT .INDENT 0.0 .TP .B STATIC_PATHS = [\(aqimages\(aq] فهرستی از دایرکتوری‌ها (نسبت به \fBPATH\fP) برای جستجوی فایل‌های ایستا (static). چنین فایل‌هایی بدون اعمال هیچ تغییری در دایرکتوری خروجی کپی خواهند شد. مقاله‌ها، برگه‌ها و سایر فایل‌های مبدأ محتوا معمولاً نادیده گرفته می‌شوند، بنابراین قرار گرفتن یک دایرکتوری هم در اینجا و هم در \fBPAGE_PATHS\fP یا \fBARTICLE_PATHS\fP بلامانع است. تنظیمات پیش‌فرض Pelican دایرکتوری \(dqimages\(dq را در اینجا قرار می‌دهد. .UNINDENT .INDENT 0.0 .TP .B STATIC_EXCLUDES = [] فهرستی از دایرکتوری‌ها برای مستثنی کردن هنگام جستجوی فایل‌های ایستا. .UNINDENT .INDENT 0.0 .TP .B STATIC_EXCLUDE_SOURCES = True اگر روی False تنظیم شود، فایل‌های مبدأ محتوا هنگام کپی فایل‌های پیدا شده در \fBSTATIC_PATHS\fP نادیده گرفته نخواهند شد. این تنظیم برای حفظ سازگاری عقروعرو با نسخه‌های قبل از 3.5 نرم‌افزار Pelican است. این گزینه هیچ اثری نخواهد داشت مگر اینکه \fBSTATIC_PATHS\fP شامل دایرکتوری‌ای باشد که در \fBARTICLE_PATHS\fP یا \fBPAGE_PATHS\fP نیز وجود دارد. اگر در تلاش برای انتشار فایل‌های مبدأ وب‌سایت خود هستید، استفاده از تنظیم \fBOUTPUT_SOURCES\fP را مد نظر قرار دهید. .UNINDENT .INDENT 0.0 .TP .B STATIC_CREATE_LINKS = False ایجاد پیوند به جای کپی کردن فایل‌ها. اگر دایرکتوری‌های محتوا و خروجی روی یک دستگاه فیزیکی مشترک قرار داشته باشند، پیوندهای سخت (hard links) ایجاد می‌شوند. در صورتی که دایرکتوری خروجی روی یک سیستم‌فایل دیگر باشد، پیوندهای نمادین (symbolic links) جایگزین خواهند شد. در صورت ایجاد پیوندهای نمادین، فراموش نکنید که هنگام بارگذاری سایت خود، گزینهٔ \fB\-L\fP یا \fB\-\-copy\-links\fP را به دستور rsync اضافه کنید. .UNINDENT .INDENT 0.0 .TP .B STATIC_CHECK_IF_MODIFIED = False اگر روی \fBTrue\fP تنظیم شود و مقدار \fBSTATIC_CREATE_LINKS\fP برابر با \fBFalse\fP باشد، زمان تغییر (mtime) فایل‌های محتوا و خروجی مقایسه شده و فقط فایل‌های محتوایی که جدیدتر از فایل‌های خروجی موجود باشند کپی خواهند شد. .UNINDENT .INDENT 0.0 .TP .B TYPOGRIFY = False در صورت تنظیم روی True، چندین بهبود تایپوگرافی از طریق کتابخانهٔ Typogrify \%<https://\:pypi\:.org/\:project/\:typogrify> در HTML تولیدشده اعمال خواهد شد؛ این کتابخانه از این طریق قابل نصب است: \fBpython \-m pip install typogrify\fP .UNINDENT .INDENT 0.0 .TP .B TYPOGRIFY_IGNORE_TAGS = [] فهرستی از برچسب‌ها که Typogrify باید آن‌ها را نادیده بگیرد. به‌طور پیش‌فرض، Typogrify برچسب‌های \fBpre\fP و \fBcode\fP را نادیده می‌گیرد. این ویژگی نیازمند نصب بودن Typogrify نسخهٔ 2.0.4 یا بالاتر است. .UNINDENT .INDENT 0.0 .TP .B TYPOGRIFY_OMIT_FILTERS = [] فهرستی از فیلترهای Typogrify برای نادیده گرفتن. مقادیر مجاز عبارتند از: \fB\(aqamp\(aq\fP، \fB\(aqsmartypants\(aq\fP، \fB\(aqcaps\(aq\fP، \fB\(aqinitial_quotes\(aq\fP، \fB\(aqwidont\(aq\fP\&. به‌طور پیش‌فرض هیچ فیلتری نادیده گرفته نمی‌شود (به عبارت دیگر، تمام فیلترها اعمال می‌شوند). این تنظیم نیازمند نصب بودن Typogrify نسخهٔ 2.1.0 یا بالاتر است. .UNINDENT .INDENT 0.0 .TP .B TYPOGRIFY_DASHES = \(aqdefault\(aq این تنظیم نحوهٔ پیکربندی فیلتر Smartypants توسط Typogrify را برای تفسیر چندین نویسهٔ خط تیره/خط پیوند/منفی (dash/hyphen/minus) کنترل می‌کند. یک نویسهٔ خط تیره اسکی منفرد (\fB\-\fP) همیشه به‌صورت یک خط پیوند (hyphen) نمایش داده می‌شود. تنظیم \fBdefault\fP خط تیره‌های کوتاه (en-dash) را مدیریت نمی‌کند و خط پیوندهای دوگانه را به خط تیره‌های بلند (em-dash) تبدیل می‌کند. تنظیم \fBoldschool\fP با مشاهدهٔ دو (\fB\-\-\fP) و سه (\fB\-\-\-\fP) نویسهٔ خط پیوند، به‌ترتیب خط تیرهٔ کوتاه (en-dash) و خط تیرهٔ بلند (em-dash) تولید می‌کند. تنظیم \fBoldschool_inverted\fP دو خط پیوند را به یک خط تیرهٔ بلند و سه خط پیوند را به یک خط تیرهٔ کوتاه تبدیل می‌کند. .UNINDENT .INDENT 0.0 .TP .B SUMMARY_MAX_LENGTH = 50 هنگام ایجاد یک خلاصهٔ کوتاه برای یک مقاله، این مقدار طول پیش‌فرض (بر حسب کلمه) متن ایجادشده خواهد بود. این ویژگی تنها زمانی اعمال می‌شود که در محتوای شما خلاصه‌ای به‌طور جداگانه مشخص نشده باشد. تنظیم این گزینه روی \fBNone\fP باعث می‌شود که خلاصه رونوشت دقیقی از محتوای اصلی باشد. .UNINDENT .INDENT 0.0.TP .B SUMMARY_MAX_PARAGRAPHS = None هنگام ایجاد یک خلاصه کوتاه از مقاله، این گزینه تعداد پاراگراف‌هایی را که باید به‌عنوان خلاصه استفاده شوند مشخص می‌کند. این مورد تنها در صورتی اعمال می‌شود که محتوای شما خلاصه‌ای را به شکل دیگری مشخص نکرده باشد. تنظیم این مقدار روی \fBNone\fP باعث می‌شود خلاصه به‌جای N پاراگراف نخست، از کل متن (حداکثر تا \fBSUMMARY_MAX_LENGTH\fP) استفاده کند. .UNINDENT .INDENT 0.0 .TP .B SUMMARY_END_SUFFIX = \(aq…\(aq هنگام ایجاد یک خلاصه کوتاه از مقاله، اگر متن حاصل برای مطابقت با طول واژگان مورد نیاز کوتاه شود، این مقدار به‌عنوان پسوند کوتاه‌سازی استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B WITH_FUTURE_DATES = True در صورت غیرفعال بودن، محتوای دارای تاریخ‌های مربوط به آینده وضعیت پیش‌فرض \fBdraft\fP را دریافت می‌کند. برای نکات بیشتر به بخش Reading only modified content مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B INTRASITE_LINK_REGEX = \(aq[{|](?P<what>.*?)[|}]\(aq عبارت باقاعده‌ای که برای تجزیه پیوندهای داخلی استفاده می‌شود. نحو (syntax) پیش‌فرض هنگام پیوند به فایل‌های داخلی، برچسب‌ها و غیره این است که شناسه، مثلاً \fBfilename\fP، درون \fB{}\fP یا \fB||\fP محصور شود. شناسه بین \fB{\fP و \fB}\fP در گروه ضبط‌کننده (capturing group) \fBwhat\fP قرار می‌گیرد. برای جزئیات به بخش Linking to internal content \%<#\:ref-linking-to-internal-content>\& مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B PYGMENTS_RST_OPTIONS = [] فهرستی از تنظیمات پیش‌فرض Pygments برای بلوک‌های کد reStructuredText شما. برای دیدن فهرستی از گزینه‌های پشتیبانی‌شده به بخش Syntax highlighting \%<#\:internal-pygments-options> مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B CACHE_CONTENT = False در صورت تنظیم روی \fBTrue\fP، محتوا در حافظه‌های نهان ذخیره می‌شود. برای جزئیات درباره نهان‌سازی به بخش Reading only modified content مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B CONTENT_CACHING_LAYER = \(aqreader\(aq اگر روی \fB\(aqreader\(aq\fP تنظیم شود، فقط محتوای خام و فراداده بازگردانده‌شده توسط readerها ذخیره می‌شود. اگر روی \fB\(aqgenerator\(aq\fP تنظیم شود، اشیاء محتوای پردازش‌شده ذخیره خواهند شد. .UNINDENT .INDENT 0.0 .TP .B CACHE_PATH = \(aqcache\(aq دایرکتوری‌ای که فایل‌های حافظه نهان در آن ذخیره می‌شوند. .UNINDENT .INDENT 0.0 .TP .B GZIP_CACHE = True اگر \fBTrue\fP باشد، از gzip برای فشرده‌سازی یا استخراج فایل‌های حافظه نهان استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B CHECK_MODIFIED_METHOD = \(aqmtime\(aq چگونگی بررسی فایل‌ها از نظر تغییرات را کنترل می‌کند. .INDENT 7.0 .IP \(bu 2 اگر روی \fB\(aqmtime\(aq\fP تنظیم شود، زمان آخرین تغییر فایل بررسی می‌شود. .IP \(bu 2 اگر روی نام تابعی ارائه‌شده توسط ماژول \fBhashlib\fP تنظیم شود، مانند \fB\(aqmd5\(aq\fP، هش فایل بررسی می‌شود. .UNINDENT .UNINDENT .INDENT 0.0 .TP .B LOAD_CONTENT_CACHE = False اگر \fBTrue\fP باشد، محتوای تغییرنیافته را از حافظه‌های نهان بارگیری می‌کند. .UNINDENT .INDENT 0.0 .TP .B FORMATTED_FIELDS = [\(aqsummary\(aq] فهرستی از فیلدهای فراداده حاوی محتوای reST/Markdown که باید تجزیه و به HTML ترجمه شوند. .UNINDENT .INDENT 0.0 .TP .B PORT = 8000 پورت TCP برای ارائه محتوا از پوشه خروجی از طریق HTTP، زمانی که pelican با \-\-listen اجرا می‌شود. .UNINDENT .INDENT 0.0 .TP .B BIND = \(aq\(aq آدرس IP که سرور HTTP به آن متصل (bind) می‌شود. .UNINDENT .SS "تنظیمات URL (URL settings)" .sp نخستین نکته این است که در حال حاضر دو روش پشتیبانی‌شده برای ساخت URL وجود دارد: \fIrelative\fP (نسبی) و \fIabsolute\fP (مطلق)\&. نشانی‌های نسبی هنگام آزمایش محلی مفید هستند و نشانی‌های مطلق قابل‌اطمینان‌تر بوده و هنگام انتشار بیشترین کاربرد را دارند. یکی از روش‌ها برای پشتیبانی از هر دو، داشتن یک فایل پیکربندی Pelican برای توسعه محلی و فایلی دیگر برای انتشار است. برای مشاهده نمونه‌ای از این راه‌اندازی، از اسکریپت \fBpelican\-quickstart\fP مطابق با توضیحات بخش Installation \%<> استفاده کنید که دو فایل پیکربندی جداگانه به‌ترتیب برای توسعه محلی و انتشار تولید خواهد کرد. .sp می‌توانید نشانی‌های URL و مکان‌هایی که فایل‌ها ذخیره می‌شوند را سفارشی کنید. متغیرهای \fB*_URL\fP و \fB*_SAVE_AS\fP از رشته‌های قالب‌بندی (format strings) پایتون استفاده می‌کنند. این متغیرها به شما امکان می‌دهند تا مقاله‌های خود را در مکانی مانند \fB{slug}/index.html\fP قرار دهید و برای داشتن نشانی‌های تمیز، پیوند آن‌ها را به‌صورت \fB{slug}\fP بنویسید (مثال زیر را ببینید). این تنظیمات انعطاف‌پذیری لازم را برای قرار دادن مقاله‌ها و صفحه‌ها در هر جایی که می‌خواهید فراهم می‌کنند. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 اگر یکی از تنظیمات \fB*_SAVE_AS\fP شامل دایرکتوری والدی باشد که با دایرکتوری والد در تنظیم متناظر در \fB*_URL\fP مطابقت ندارد، ممکن است در مواردی نادر نظیر استفاده از نحو \fB{attach}\fP باعث تولید URLهای غیرمنتظره توسط Pelican شود. .UNINDENT .UNINDENT .sp اگر به این سطح از انعطاف نیازی ندارید و ترجیح می‌دهید مسیرهای خروجی تولیدشده دقیقاً ساختار درختی مسیرهای فایل‌سیستم محتوای مبدأ شما را بازتاب دهند، تنظیمات زیر را امتحان کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX PATH_METADATA = \(aq(?P<path_no_ext>.*)\e..*\(aq ARTICLE_URL = ARTICLE_SAVE_AS = PAGE_URL = PAGE_SAVE_AS = \(aq{path_no_ext}.html\(aq .EE .UNINDENT .UNINDENT .sp در غیر این صورت، می‌توانید از ویژگی‌های فراداده‌ای گوناگون فایل درون تنظیمات مربوط به URL استفاده کنید: .INDENT 0.0 .IP \(bu 2 slug .IP \(bu 2 date .IP \(bu 2 lang .IP \(bu 2 author .IP \(bu 2 category .UNINDENT .sp نمونه کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX ARTICLE_URL = \(aqposts/{date:%Y}/{date:%b}/{date:%d}/{slug}/\(aq ARTICLE_SAVE_AS = \(aqposts/{date:%Y}/{date:%b}/{date:%d}/{slug}/index.html\(aq PAGE_URL = \(aqpages/{slug}/\(aq PAGE_SAVE_AS = \(aqpages/{slug}/index.html\(aq .EE .UNINDENT .UNINDENT .sp این کار مقاله‌های شما را در مکانی شبیه به \fB/posts/2011/Aug/07/sample\-post/index.html\fP و صفحه‌های شما را در \fB/pages/about/index.html\fP ذخیره می‌کند، و آن‌ها را به‌ترتیب در نشانی‌های \fB/posts/2011/Aug/07/sample\-post/\fP و \fB/pages/about/\fP در دسترس قرار می‌دهد. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 اگر یک دستورالعمل \fBdatetime\fP تعیین کنید، با استفاده از ویژگی فراداده date فایل‌های ورودی جایگزین خواهد شد. اگر تاریخ برای فایل خاصی تعیین نشده باشد، Pelican به برچسب زمانی \fBmtime\fP فایل اتکا خواهد کرد. برای اطلاعات بیشتر مستندات datetime پایتون در \%<https://\:docs\:.python\:.org/\:3/\:library/\:datetime\:.html#\:strftime-and-strptime-behavior> را بررسی کنید. .UNINDENT .UNINDENT .INDENT 0.0 .TP .B RELATIVE_URLS = False مشخص می‌کند که آیا Pelican باید از URLهای نسبی به سند استفاده کند یا خیر. این مورد را تنها هنگام توسعه/آزمایش و تنها در صورتی که تأثیر آن بر پیوندها/خوراک‌ها را به‌طور کامل درک کرده‌اید روی \fBTrue\fP تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_URL = \(aq{slug}.html\(aq نشانی اینترنتی (URL) برای ارجاع به یک مقاله. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_SAVE_AS = \(aq{slug}.html\(aq مکانی که در آن یک مقاله ذخیره خواهد شد. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_LANG_URL = \(aq{slug}\-{lang}.html\(aq نشانی اینترنتی (URL) برای ارجاع به مقاله‌ای که از زبان پیش‌فرض استفاده نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_LANG_SAVE_AS = \(aq{slug}\-{lang}.html\(aq مکانی که در آن مقاله‌ای که از زبان پیش‌فرض استفاده نمی‌کند ذخیره خواهد شد. .UNINDENT .INDENT 0.0.TP .B DRAFT_URL = \(aqdrafts/{slug}.html\(aq نشانی URL برای ارجاع به پیش‌نویس یک مقاله. .UNINDENT .INDENT 0.0 .TP .B DRAFT_SAVE_AS = \(aqdrafts/{slug}.html\(aq مکانی که پیش‌نویس مقاله در آن ذخیره خواهد شد. .UNINDENT .INDENT 0.0 .TP .B DRAFT_LANG_URL = \(aqdrafts/{slug}\-{lang}.html\(aq نشانی URL برای ارجاع به پیش‌نویس مقاله‌ای که از زبان پیش‌فرض استفاده نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B DRAFT_LANG_SAVE_AS = \(aqdrafts/{slug}\-{lang}.html\(aq مکانی که پیش‌نویس مقاله‌ای که از زبان پیش‌فرض استفاده نمی‌کند در آن ذخیره خواهد شد. .UNINDENT .INDENT 0.0 .TP .B PAGE_URL = \(aqpages/{slug}.html\(aq نشانی URL مورد استفاده برای پیوند به یک برگه. .UNINDENT .INDENT 0.0 .TP .B PAGE_SAVE_AS = \(aqpages/{slug}.html\(aq مکانی که برگه در آن ذخیره خواهد شد. این مقدار باید با PAGE_URL یکسان باشد یا اینکه لازم است از rewrite در پیکربندی سرور خود استفاده کنید. .UNINDENT .INDENT 0.0 .TP .B PAGE_LANG_URL = \(aqpages/{slug}\-{lang}.html\(aq نشانی URL مورد استفاده برای پیوند به برگه‌ای که از زبان پیش‌فرض استفاده نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B PAGE_LANG_SAVE_AS = \(aqpages/{slug}\-{lang}.html\(aq مکانی که برگه‌ای که از زبان پیش‌فرض استفاده نمی‌کند در آن ذخیره خواهد شد. .UNINDENT .INDENT 0.0 .TP .B DRAFT_PAGE_URL = \(aqdrafts/pages/{slug}.html\(aq نشانی URL مورد استفاده برای پیوند به پیش‌نویس یک برگه. .UNINDENT .INDENT 0.0 .TP .B DRAFT_PAGE_SAVE_AS = \(aqdrafts/pages/{slug}.html\(aq مکان واقعی ذخیره‌سازی پیش‌نویس یک برگه. .UNINDENT .INDENT 0.0 .TP .B DRAFT_PAGE_LANG_URL = \(aqdrafts/pages/{slug}\-{lang}.html\(aq نشانی URL مورد استفاده برای پیوند به پیش‌نویس برگه‌ای که از زبان پیش‌فرض استفاده نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B DRAFT_PAGE_LANG_SAVE_AS = \(aqdrafts/pages/{slug}\-{lang}.html\(aq مکان واقعی ذخیره‌سازی پیش‌نویس برگه‌ای که از زبان پیش‌فرض استفاده نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B AUTHOR_URL = \(aqauthor/{slug}.html\(aq نشانی URL مورد استفاده برای یک نویسنده. .UNINDENT .INDENT 0.0 .TP .B AUTHOR_SAVE_AS = \(aqauthor/{slug}.html\(aq مکانی برای ذخیره‌سازی صفحه نویسنده. .UNINDENT .INDENT 0.0 .TP .B CATEGORY_URL = \(aqcategory/{slug}.html\(aq نشانی URL مورد استفاده برای یک دسته‌بندی. .UNINDENT .INDENT 0.0 .TP .B CATEGORY_SAVE_AS = \(aqcategory/{slug}.html\(aq مکانی برای ذخیره‌سازی یک دسته‌بندی. .UNINDENT .INDENT 0.0 .TP .B TAG_URL = \(aqtag/{slug}.html\(aq نشانی URL مورد استفاده برای یک برچسب. .UNINDENT .INDENT 0.0 .TP .B TAG_SAVE_AS = \(aqtag/{slug}.html\(aq مکانی برای ذخیره‌سازی برگه برچسب. .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 اگر نمی‌خواهید یک یا چند برگه پیش‌فرض ایجاد شوند (برای مثال، شما تنها نویسنده وب‌گاه خود هستید و نیازی به برگه نویسندگان ندارید)، مقدار تنظیم \fB*_SAVE_AS\fP مربوطه را برابر با \fB\(aq\(aq\fP قرار دهید تا از تولید برگه مربوطه جلوگیری شود. .UNINDENT .UNINDENT .sp Pelican می‌تواند به صورت اختیاری بایگانی‌های سالانه، ماهانه و روزانه از پست‌های شما ایجاد کند. این بایگانی‌های ثانویه به طور پیش‌فرض غیرفعال هستند، اما در صورتی که رشته‌های قالب‌بندی (format strings) را برای تنظیمات \fB_SAVE_AS\fP مربوطه‌شان مشخص کنید، به طور خودکار فعال می‌شوند. بایگانی‌های دوره‌ای به صورت شهودی با مدل سلسله‌مراتبی نشانی‌های اینترنتی سازگار هستند و می‌توانند پیمایش در میان پست‌هایی را که در طول زمان نوشته‌اید برای خوانندگان آسان‌تر کنند. .sp نمونه کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX YEAR_ARCHIVE_SAVE_AS = \(aqposts/{date:%Y}/index.html\(aq YEAR_ARCHIVE_URL = \(aqposts/{date:%Y}/\(aq MONTH_ARCHIVE_SAVE_AS = \(aqposts/{date:%Y}/{date:%b}/index.html\(aq MONTH_ARCHIVE_URL = \(aqposts/{date:%Y}/{date:%b}/\(aq .EE .UNINDENT .UNINDENT .sp با این تنظیمات، Pelican یک بایگانی از تمامی پست‌های سال شما در (برای نمونه) \fBposts/2011/index.html\fP و یک بایگانی از تمامی پست‌های ماه در \fBposts/2011/Aug/index.html\fP\& ایجاد خواهد کرد. این بایگانی‌ها به ترتیب از طریق نشانی‌های \fBposts/2011/\fP و \fBposts/2011/Aug/\fP قابل دسترسی خواهند بود. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 بایگانی‌های دوره‌ای بهترین کارایی را زمانی دارند که بخش انتهایی مسیر \fBindex.html\fP\& باشد. بدین ترتیب خواننده می‌تواند بخشی از نشانی اینترنتی را حذف کرده و بدون نیاز به مشخص کردن نام یک برگه، مستقیماً به بایگانی مناسب از پست‌ها برسد. .UNINDENT .UNINDENT .INDENT 0.0 .TP .B YEAR_ARCHIVE_SAVE_AS = \(aq\(aq مکانی برای ذخیره بایگانی‌های سالانه پست‌های شما. .UNINDENT .INDENT 0.0 .TP .B YEAR_ARCHIVE_URL = \(aq\(aq نشانی URL مورد استفاده برای بایگانی‌های سالانه پست‌های شما. در صورت فعال‌سازی بایگانی‌های سالانه، باید این گزینه را تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B MONTH_ARCHIVE_SAVE_AS = \(aq\(aq مکانی برای ذخیره بایگانی‌های ماهانه پست‌های شما. .UNINDENT .INDENT 0.0 .TP .B MONTH_ARCHIVE_URL = \(aq\(aq نشانی URL مورد استفاده برای بایگانی‌های ماهانه پست‌های شما. در صورت فعال‌سازی بایگانی‌های ماهانه، باید این گزینه را تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B DAY_ARCHIVE_SAVE_AS = \(aq\(aq مکانی برای ذخیره بایگانی‌های روزانه پست‌های شما. .UNINDENT .INDENT 0.0 .TP .B DAY_ARCHIVE_URL = \(aq\(aq نشانی URL مورد استفاده برای بایگانی‌های روزانه پست‌های شما. در صورت فعال‌سازی بایگانی‌های روزانه، باید این گزینه را تنظیم کنید. .UNINDENT .sp \fBDIRECT_TEMPLATES\fP کمی متفاوت از موارد ذکر شده در بالا عمل می‌کنند. فقط تنظیمات \fB_SAVE_AS\fP موجود هستند، اما این قابلیت برای هر قالب مستقیمی در دسترس است. .INDENT 0.0 .TP .B ARCHIVES_SAVE_AS = \(aqarchives.html\(aq مکانی برای ذخیره برگه بایگانی مقالات. .UNINDENT .INDENT 0.0 .TP .B AUTHORS_SAVE_AS = \(aqauthors.html\(aq مکانی برای ذخیره فهرست نویسندگان. .UNINDENT .INDENT 0.0 .TP .B CATEGORIES_SAVE_AS = \(aqcategories.html\(aq مکانی برای ذخیره فهرست دسته‌بندی‌ها. .UNINDENT .INDENT 0.0 .TP .B TAGS_SAVE_AS = \(aqtags.html\(aq مکانی برای ذخیره فهرست برچسب‌ها. .UNINDENT .INDENT 0.0 .TP .B INDEX_SAVE_AS = \(aqindex.html\(aq مکانی برای ذخیره فهرست تمامی مقالات. .UNINDENT .sp نشانی‌های URL برای برگه‌های قالب مستقیم به پوسته وابسته هستند. برخی پوسته‌ها از تنظیم \fB*_URL\fP مربوطه به عنوان رشته استفاده می‌کنند، در حالی که برخی دیگر آن‌ها را به‌صورت سخت‌کدشده قرار می‌دهند: \fB\(aqarchives.html\(aq\fP، \fB\(aqauthors.html\(aq\fP، \fB\(aqcategories.html\(aq\fP، \fB\(aqtags.html\(aq\fP\&. .INDENT 0.0.TP .B SLUGIFY_SOURCE = \(aqtitle\(aq مشخص می‌کند که اسلاگ (slug) به صورت خودکار از کجا تولید شود. می‌تواند روی \fBtitle\fP تنظیم شود تا از برچسب فرادادهٔ \(dqTitle:\(dq استفاده کند، یا روی \fBbasename\fP تا هنگام ایجاد اسلاگ از نام فایل مقاله استفاده نماید. .UNINDENT .INDENT 0.0 .TP .B SLUGIFY_USE_UNICODE = False اجازه دادن به نویسه‌های یونیکد در اسلاگ‌ها. مقدار را روی \fBTrue\fP قرار دهید تا نویسه‌های یونیکد در اسلاگ‌های خودکار حفظ شوند. در غیر این صورت، نویسه‌های یونیکد با معادل‌های ASCII جایگزین خواهند شد. .UNINDENT .INDENT 0.0 .TP .B SLUGIFY_PRESERVE_CASE = False حفظ حروف بزرگ در اسلاگ‌ها. مقدار را روی \fBTrue\fP قرار دهید تا حروف بزرگ برگرفته از \fBSLUGIFY_SOURCE\fP همان‌گونه که هستند حفظ شوند. .UNINDENT .INDENT 0.0 .TP .B SLUG_REGEX_SUBSTITUTIONS = [ .TP .B (r\(aq[^\e\ew\e\es\-]\(aq, \(aq\(aq), # remove non\-alphabetical/whitespace/\(aq\-\(aq chars .TP .B (r\(aq(?u)\e\eA\e\es*\(aq, \(aq\(aq), # strip leading whitespace .TP .B (r\(aq(?u)\e\es*\e\eZ\(aq, \(aq\(aq), # strip trailing whitespace .TP .B (r\(aq[\-\e\es]+\(aq, \(aq\-\(aq), # reduce multiple whitespace or \(aq\-\(aq to single \(aq\-\(aq .TP .B ] جایگزینی‌های عبارت باقاعده (Regex) هنگام تولید اسلاگ مقاله‌ها و صفحه‌ها. به صورت فهرستی از جفت‌های \fB(from, to)\fP مشخص می‌شود که به ترتیب و بدون در نظر گرفتن بزرگی و کوچکی حروف اعمال می‌شوند. جایگزینی‌های پیش‌فرض، نویسه‌های غیرحرفی\-عددی را حذف کرده و فاصله‌های خالی میانی را به خط تیره تبدیل می‌کنند. گذشته از این جایگزینی‌ها، اسلاگ‌ها همیشه به حروف کوچک ASCII تبدیل شده و فاصله‌های خالی ابتدا و انتهای آن‌ها حذف می‌شوند. برای سازگاری رو به عقب با URLهای موجود مفید است. .UNINDENT .INDENT 0.0 .TP .B AUTHOR_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS جایگزینی‌های عبارت باقاعده برای اسلاگ‌های نویسنده. پیش‌فرض آن \fBSLUG_REGEX_SUBSTITUTIONS\fP\& است. .UNINDENT .INDENT 0.0 .TP .B CATEGORY_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS جایگزینی‌های عبارت باقاعده برای اسلاگ‌های دسته‌بندی. پیش‌فرض آن \fBSLUG_REGEX_SUBSTITUTIONS\fP\& است. .UNINDENT .INDENT 0.0 .TP .B TAG_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS جایگزینی‌های عبارت باقاعده برای اسلاگ‌های برچسب. پیش‌فرض آن \fBSLUG_REGEX_SUBSTITUTIONS\fP\& است. .UNINDENT .SS "زمان و تاریخ (Time and Date)" .INDENT 0.0 .TP .B TIMEZONE منطقهٔ زمانی مورد استفاده در اطلاعات تاریخ، برای تولید خوراک‌های Atom و RSS. .sp اگر هیچ منطقهٔ زمانی مشخص نشده باشد، UTC در نظر گرفته می‌شود. این بدان معناست که در صورت یکی نبودن تنظیمات محلی (locale) شما با UTC، خوراک‌های تولیدشدهٔ Atom و RSS حاوی اطلاعات تاریخ نادرستی خواهند بود. .sp در صورتی که این تنظیم مشخص نشده باشد Pelican هشداری صادر می‌کند، زیرا در نسخه‌های پیشین اجباری نبوده است. .sp برای دسترسی به فهرست مقادیر معتبر منطقهٔ زمانی، به صفحهٔ ویکی‌پدیا در \%<https://\:en\:.wikipedia\:.org/\:wiki/\:List_of_tz_database_time_zones> نگاهی بیندازید. .UNINDENT .INDENT 0.0 .TP .B DEFAULT_DATE = None تاریخ پیش‌فرضی که می‌خواهید استفاده کنید. اگر روی \fB\(aqfs\(aq\fP تنظیم شود، در صورتی که Pelican نتواند اطلاعات تاریخ را از فراداده دریافت کند، از اطلاعات مهر زمانی فایل‌سیستم (mtime) استفاده خواهد کرد. در صورت تعیین هر رشتهٔ متنی دیگر، با همان روش فرادادهٔ مقاله تجزیه خواهد شد. در صورت تنظیم روی یک شیء تاپل (tuple)، شیء datetime پیش‌فرض با ارسال تاپل به سازندهٔ \fBdatetime.datetime\fP ایجاد خواهد شد. .UNINDENT .INDENT 0.0 .TP .B DEFAULT_DATE_FORMAT = \(aq%a %d %B %Y\(aq قالب تاریخ پیش‌فرضی که می‌خواهید استفاده کنید. .UNINDENT .INDENT 0.0 .TP .B DATE_FORMATS = {} اگر چند زبان را مدیریت می‌کنید، می‌توانید قالب‌بندی تاریخ را در اینجا تنظیم کنید. .sp اگر \fBDATE_FORMATS\fP تنظیم نشده باشد، Pelican به \fBDEFAULT_DATE_FORMAT\fP\& رجوع خواهد کرد. اگر نیاز به پشتیبانی از چند زبان با قالب‌های تاریخ متفاوت دارید، می‌توانید دیکشنری \fBDATE_FORMATS\fP را با استفاده از نام زبان (فرادادهٔ \fBlang\fP در محتوای مطلب شما) به عنوان کلید تنظیم نمایید. .sp علاوه بر کدهای قالب استاندارد C89 strftime که در مستندات datetime پایتون در \%<https://\:docs\:.python\:.org/\:3/\:library/\:datetime\:.html#\:strftime-and-strptime-behavior> فهرست شده‌اند، می‌توانید از نویسهٔ \fB\-\fP بین \fB%\fP و نویسهٔ قالب برای حذف صفرهای آغازین استفاده کنید. برای نمونه، \fB%d/%m/%Y\fP خروجی \fB01/01/2014\fP را تولید می‌کند، در حالی که \fB%\-d/%\-m/%Y\fP به \fB1/1/2014\fP\& منجر می‌شود. .INDENT 7.0 .INDENT 3.5 .sp .EX DATE_FORMATS = { \(aqen\(aq: \(aq%a, %d %b %Y\(aq, \(aqjp\(aq: \(aq%Y\-%m\-%d(%a)\(aq, } .EE .UNINDENT .UNINDENT .sp همچنین می‌توان با استفاده از یک تاپل \fB(locale, format)\fP به عنوان مقدار دیکشنری، تنظیمات محلی متفاوتی را برای هر زبان تعیین کرد که تنظیم \fBLOCALE\fP را بازنویسی می‌کند: .INDENT 7.0 .INDENT 3.5 .sp .EX # On Unix/Linux DATE_FORMATS = { \(aqen\(aq: (\(aqen_US\(aq,\(aq%a, %d %b %Y\(aq), \(aqjp\(aq: (\(aqja_JP\(aq,\(aq%Y\-%m\-%d(%a)\(aq), } # On Windows DATE_FORMATS = { \(aqen\(aq: (\(aqusa\(aq,\(aq%a, %d %b %Y\(aq), \(aqjp\(aq: (\(aqjpn\(aq,\(aq%Y\-%m\-%d(%a)\(aq), } .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B LOCALE تغییر تنظیمات محلی (locale) [1]\&. می‌توان فهرستی از localeها یا یک رشتهٔ منفرد نمایانگر یک locale را در اینجا وارد کرد. هنگام ارائهٔ فهرست، همهٔ localeها تا زمانی که یکی کار کند، امتحان خواهند شد. .sp می‌توانید locale را برای کنترل بیشتر روی قالب تاریخ تنظیم کنید: .INDENT 7.0 .INDENT 3.5 .sp .EX LOCALE = (\(aqusa\(aq, \(aqjpn\(aq, # On Windows \(aqen_US\(aq, \(aqja_JP\(aq # On Unix/Linux ) .EE .UNINDENT .UNINDENT .sp برای دسترسی به فهرست localeهای در دسترس به locales on Windows در \%<https://\:www\:.microsoft\:.com/\:en-us/\:download/\:details\:.aspx?\:id=55979> مراجعه کنید، یا در Unix/Linux از دستور \fBlocale \-a\fP استفاده نمایید؛ برای اطلاعات بیشتر به صفحهٔ راهنمای locale(1) در \%<https://\:linux\:.die\:.net/\:man/\:1/\:locale> نگاهی بیندازید. .UNINDENT .IP [1] 5 پیش‌فرض، تنظیمات محلی (locale) سیستم است..SS صفحه‌های قالب (Template pages) .INDENT 0.0 .TP .B TEMPLATE_PAGES = None نگاشتی شامل صفحه‌های قالبی که همراه با نوشته‌های وبلاگ رندر خواهند شد. .sp اگر می‌خواهید علاوه بر نوشته‌های وبلاگ خود صفحه‌های سفارشی ایجاد کنید، می‌توانید هر فایل قالب Jinja2 را با مسیری که به فایل اشاره می‌کند و مسیر مقصد برای فایل تولیدشده مشخص نمایید. .sp برای نمونه، اگر وبلاگی با سه صفحه ایستا دارید — فهرستی از کتاب‌ها، رزومه شما و یک صفحه تماس — می‌توانید چنین تنظیمی داشته باشید: .INDENT 7.0 .INDENT 3.5 .sp .EX TEMPLATE_PAGES = {\(aqsrc/books.html\(aq: \(aqdest/books.html\(aq, \(aqsrc/resume.html\(aq: \(aqdest/resume.html\(aq, \(aqsrc/contact.html\(aq: \(aqdest/contact.html\(aq} .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B TEMPLATE_EXTENSIONS = [\(aq.html\(aq] پسوندهایی که هنگام جستجوی فایل‌های قالب بر اساس نام قالب‌ها استفاده می‌شوند. .UNINDENT .INDENT 0.0 .TP .B DIRECT_TEMPLATES = [\(aqindex\(aq, \(aqauthors\(aq, \(aqcategories\(aq, \(aqtags\(aq, \(aqarchives\(aq] فهرستی از قالب‌هایی که مستقیماً برای رندر محتوا استفاده می‌شوند. معمولاً قالب‌های مستقیم برای ایجاد صفحات نمایه (شاخص) برای مجموعه‌های محتوا (مانند صفحات نمایه دسته‌بندی و برچسب) به کار می‌روند. اگر مجموعه‌های نویسنده، دسته‌بندی و برچسب نیاز نیستند، مقدار \fBDIRECT_TEMPLATES = [\(aqindex\(aq, \(aqarchives\(aq]\fP را تنظیم کنید. .sp قالب‌های \fBDIRECT_TEMPLATES\fP در مسیرهای نگه‌داری‌شده در \fBTHEME_TEMPLATES_OVERRIDES\fP جستجو می‌شوند\&. .UNINDENT .SS متاداده (Metadata) .INDENT 0.0 .TP .B AUTHOR نویسنده پیش‌فرض (معمولاً نام شما). .UNINDENT .INDENT 0.0 .TP .B DEFAULT_METADATA = {} متاداده پیش‌فرضی که می‌خواهید برای همه مقاله‌ها و صفحه‌ها استفاده کنید. .UNINDENT .INDENT 0.0 .TP .B FILENAME_METADATA = r\(aq(?P<date>\e\ed{4}\-\e\ed{2}\-\e\ed{2}).*\(aq عبارت باقاعده‌ای (regexp) که برای استخراج متاداده از نام فایل استفاده خواهد شد. تمام گروه‌های نام‌گذاری‌شده‌ای که مطابقت داده شوند در شیء متاداده مقداردهی می‌شوند. مقدار پیش‌فرض تنها تاریخ را از نام فایل استخراج می‌کند. .sp برای نمونه، جهت استخراج هم‌زمان تاریخ و نامک (slug): .INDENT 7.0 .INDENT 3.5 .sp .EX FILENAME_METADATA = r\(aq(?P<date>\ed{4}\-\ed{2}\-\ed{2})_(?P<slug>.*)\(aq .EE .UNINDENT .UNINDENT .sp همچنین \fBSLUGIFY_SOURCE\fP را ببینید\&. .UNINDENT .INDENT 0.0 .TP .B PATH_METADATA = \(aq\(aq مشابه \fBFILENAME_METADATA\fP، اما از مسیر کامل یک صفحه نسبت به دایرکتوری منبع محتوا پردازش می‌شود. .UNINDENT .INDENT 0.0 .TP .B EXTRA_PATH_METADATA = {} دیکشنری‌های متاداده اضافی با کلید مسیر نسبی. برخلاف برخی دیگر از تنظیمات فایل در Pelican، مسیرهای نسبی نیازمند جداکننده‌های پوشه مخصوص سیستم‌عامل (یعنی / در UNIX و \e در Windows) هستند. مسیرهای مشخص‌شده به یک دایرکتوری برای همه فایل‌های زیر آن اعمال می‌شوند. در صورت بروز تعارض، خاص‌ترین مسیر اولویت خواهد داشت. .UNINDENT .sp نیازی نیست همه متاداده‌ها در خود فایل منبع جاسازی شوند \%<#\:internal-metadata>\&. برای نمونه، پست‌های وبلاگ اغلب طبق الگوی \fBYYYY\-MM\-DD\-SLUG.rst\fP نام‌گذاری می‌شوند یا در دایرکتوری‌های تودرتوی \fBYYYY/MM/DD\-SLUG\fP قرار می‌گیرند. برای استخراج متاداده از نام فایل یا مسیر، \fBFILENAME_METADATA\fP یا \fBPATH_METADATA\fP را روی عبارت‌های باقاعده‌ای تنظیم کنید که از شیوه‌نام‌گذاری گروه‌ها در پایتون \%<https://\:docs\:.python\:.org/\:3/\:library/\:re\:.html#\:regular-expression-syntax> \fB(?P<name>…)\fP استفاده می‌کنند\&. اگر می‌خواهید متاداده‌های بیشتری پیوست کنید اما مایل نیستید آن‌ها را در مسیر درج نمایید، می‌توانید \fBEXTRA_PATH_METADATA\fP را تنظیم کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX EXTRA_PATH_METADATA = { \(aqrelative/path/to/file\-1\(aq: { \(aqkey\-1a\(aq: \(aqvalue\-1a\(aq, \(aqkey\-1b\(aq: \(aqvalue\-1b\(aq, }, \(aqrelative/path/to/file\-2\(aq: { \(aqkey\-2\(aq: \(aqvalue\-2\(aq, }, } .EE .UNINDENT .UNINDENT .sp این کار می‌تواند روشی مناسب برای تغییر مکان نصب یک فایل خاص باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX # Take advantage of the following defaults # STATIC_SAVE_AS = \(aq{path}\(aq # STATIC_URL = \(aq{path}\(aq STATIC_PATHS = [ \(aqstatic/robots.txt\(aq, ] EXTRA_PATH_METADATA = { \(aqstatic/robots.txt\(aq: {\(aqpath\(aq: \(aqrobots.txt\(aq}, } .EE .UNINDENT .UNINDENT.SS تنظیمات خوراک (Feed settings) .sp به‌طور پیش‌فرض، Pelican از خوراک‌های Atom استفاده می‌کند. با این حال، در صورت تمایل امکان استفاده از خوراک‌های RSS نیز وجود دارد. .sp Pelican خوراک‌های دسته‌بندی و همچنین خوراک‌هایی برای تمامی مقالات شما تولید می‌کند. این ابزار به‌طور پیش‌فرض خوراکی برای برچسب‌ها تولید نمی‌کند، اما انجام این کار با استفاده از تنظیمات \fBTAG_FEED_ATOM\fP و \fBTAG_FEED_RSS\fP امکان‌پذیر است: .INDENT 0.0 .TP .B FEED_DOMAIN = None، یعنی URL پایه \(dq/\(dq است دامنه‌ای که به ابتدای URLهای خوراک افزوده می‌شود. از آنجا که URLهای خوراک همیشه باید مطلق (absolute) باشند، اکیداً توصیه می‌شود این مقدار تعریف شود (به عنوان مثال، \(dq\%<https://\:feeds\:.example\:.com>\(dq). اگر پیش‌تر \fBSITEURL\fP را به صراحت تعریف کرده‌اید (به بالا مراجعه کنید) و می‌خواهید از همان دامنه برای خوراک‌های خود استفاده کنید، کافی است مقدار زیر را قرار دهید: \fBFEED_DOMAIN = SITEURL\fP\&. .UNINDENT .INDENT 0.0 .TP .B FEED_ATOM = None، یعنی بدون خوراک Atom محل ذخیره خوراک Atom. .UNINDENT .INDENT 0.0 .TP .B FEED_ATOM_URL = None URL نسبی خوراک Atom. در صورت تنظیم نشدن، از \fBFEED_ATOM\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B FEED_RSS = None، یعنی بدون RSS محل ذخیره خوراک RSS. .UNINDENT .INDENT 0.0 .TP .B FEED_RSS_URL = None URL نسبی خوراک RSS. در صورت تنظیم نشدن، از \fBFEED_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B FEED_ALL_ATOM = \(aqfeeds/all.atom.xml\(aq محل ذخیره خوراک Atom تمامی پست‌ها: این خوراک دربرگیرنده تمامی پست‌ها بدون در نظر گرفتن زبان آن‌ها خواهد بود. .UNINDENT .INDENT 0.0 .TP .B FEED_ALL_ATOM_URL = None URL نسبی خوراک Atom تمامی پست‌ها. در صورت تنظیم نشدن، از \fBFEED_ALL_ATOM\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B FEED_ALL_RSS = None، یعنی بدون RSS تمام پست‌ها محل ذخیره خوراک RSS تمامی پست‌ها: این خوراک دربرگیرنده تمامی پست‌ها بدون در نظر گرفتن زبان آن‌ها خواهد بود. .UNINDENT .INDENT 0.0 .TP .B FEED_ALL_RSS_URL = None URL نسبی خوراک RSS تمامی پست‌ها. در صورت تنظیم نشدن، از \fBFEED_ALL_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B CATEGORY_FEED_ATOM = \(aqfeeds/{slug}.atom.xml\(aq محل ذخیره خوراک‌های Atom دسته‌بندی. [2] .UNINDENT .INDENT 0.0 .TP .B CATEGORY_FEED_ATOM_URL = None URL نسبی خوراک‌های Atom دسته‌بندی، شامل جای‌نگهدار \fB{slug}\fP. [2] در صورت تنظیم نشدن، از \fBCATEGORY_FEED_ATOM\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B CATEGORY_FEED_RSS = None، یعنی بدون RSS محل ذخیره خوراک‌های RSS دسته‌بندی، شامل جای‌نگهدار \fB{slug}\fP. [2] .UNINDENT .INDENT 0.0 .TP .B CATEGORY_FEED_RSS_URL = None URL نسبی خوراک‌های RSS دسته‌بندی، شامل جای‌نگهدار \fB{slug}\fP. [2] در صورت تنظیم نشدن، از \fBCATEGORY_FEED_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B AUTHOR_FEED_ATOM = \(aqfeeds/{slug}.atom.xml\(aq محل ذخیره خوراک‌های Atom نویسنده. [2] .UNINDENT .INDENT 0.0 .TP .B AUTHOR_FEED_ATOM_URL = None URL نسبی خوراک‌های Atom نویسنده، شامل جای‌نگهدار \fB{slug}\fP. [2] در صورت تنظیم نشدن، از \fBAUTHOR_FEED_ATOM\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B AUTHOR_FEED_RSS = \(aqfeeds/{slug}.rss.xml\(aq محل ذخیره خوراک‌های RSS نویسنده. [2] .UNINDENT .INDENT 0.0 .TP .B AUTHOR_FEED_RSS_URL = None URL نسبی خوراک‌های RSS نویسنده، شامل جای‌نگهدار \fB{slug}\fP. [2] در صورت تنظیم نشدن، از \fBAUTHOR_FEED_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B TAG_FEED_ATOM = None، یعنی بدون خوراک برچسب محل ذخیره خوراک Atom برچسب، شامل جای‌نگهدار \fB{slug}\fP. [2] .UNINDENT .INDENT 0.0 .TP .B TAG_FEED_ATOM_URL = None URL نسبی خوراک Atom برچسب، شامل جای‌نگهدار \fB{slug}\fP. [2] .UNINDENT .INDENT 0.0 .TP .B TAG_FEED_RSS = None، یعنی بدون خوراک برچسب RSS URL نسبی برای خروجی خوراک RSS برچسب، شامل جای‌نگهدار \fB{slug}\fP. در صورت تنظیم نشدن، از \fBTAG_FEED_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B FEED_MAX_ITEMS = 100 حداکثر تعداد مجاز آیتم‌ها در یک خوراک. تنظیم روی \fBNone\fP باعث می‌شود که خوراک شامل تمامی مقالات باشد. در صورت مشخص نشدن، مقدار پیش‌فرض 100 است. .UNINDENT .INDENT 0.0 .TP .B RSS_FEED_SUMMARY_ONLY = True تنها خلاصه‌های آیتم در تگ \fBdescription\fP خوراک‌های RSS گنجانده شوند. در صورت تنظیم روی \fBFalse\fP، کل محتوا به جای آن قرار خواهد گرفت. این تنظیم بر خوراک‌های Atom تأثیری ندارد و تنها روی خوراک‌های RSS اعمال می‌شود. .UNINDENT .INDENT 0.0 .TP .B FEED_APPEND_REF = False در صورت تنظیم روی \fBTrue\fP، مقدار \fB?ref=feed\fP به منظور ردیابی ارجاع‌دهنده به پیوندهای موجود در خوراک‌های تولیدشده افزوده خواهد شد. .UNINDENT .sp اگر نمی‌خواهید برخی یا هیچ‌یک از این خوراک‌ها تولید شوند، متغیرهای بالا را روی \fBNone\fP تنظیم کنید\&. .IP [2] 5 عبارت \fB{slug}\fP با نام دسته‌بندی / نویسنده / برچسب جایگزین می‌شود..SS صفحه‌بندی (Pagination) .sp رفتار پیش‌فرض Pelican این است که تمام عنوان‌های مقاله‌ها را همراه با توضیح کوتاهی در صفحه اصلی (index) فهرست کند. اگرچه این روش برای وب‌گاه‌های کوچک تا متوسط به‌خوبی کار می‌کند، اما وب‌گاه‌هایی با تعداد زیادی مقاله احتمالاً از صفحه‌بندی این فهرست بهره‌مند خواهند شد. .sp می‌توانید از تنظیمات زیر برای پیکربندی صفحه‌بندی استفاده کنید. .INDENT 0.0 .TP .B DEFAULT_ORPHANS = 0 حداقل تعداد مقاله‌های مجاز در آخرین صفحه. زمانی از این گزینه استفاده کنید که نمی‌خواهید صفحه آخر تنها شامل تعداد اندکی مقاله باشد. .UNINDENT .INDENT 0.0 .TP .B DEFAULT_PAGINATION = False حداکثر تعداد مقاله‌ها برای قرارگیری در یک صفحه، بدون احتساب مقاله‌های تنها مانده (orphans). مقدار False برای غیرفعال کردن صفحه‌بندی است. .UNINDENT .INDENT 0.0 .TP .B PAGINATED_TEMPLATES = {\(aqindex\(aq: None, \(aqtag\(aq: None, \(aqcategory\(aq: None, \(aqauthor\(aq: None} قالب‌هایی که صفحه‌بندی باید روی آن‌ها اعمال شود، و تعداد مقاله‌ها برای قرارگیری در یک صفحه. اگر این مقدار \fBNone\fP باشد، به \fBDEFAULT_PAGINATION\fP تغییر می‌یابد\&. .UNINDENT .INDENT 0.0 .TP .B PAGINATION_PATTERNS = ( .TP .B (1, \(aq{name}{extension}\(aq, \(aq{name}{extension}\(aq), .TP .B (2, \(aq{name}{number}{extension}\(aq, \(aq{name}{number}{extension}\(aq), .TP .B ) .INDENT 7.0 .INDENT 3.5 مجموعه‌ای از الگوها که برای تعیین خروجی صفحه‌بندی پیشرفته به کار می‌روند. .UNINDENT .UNINDENT .UNINDENT .SS استفاده از الگوهای صفحه‌بندی (Using Pagination Patterns) .sp به‌طور پیش‌فرض، صفحه‌های بعد از \fB\&.../foo.html\fP به‌صورت \fB\&.../foo2.html\fP و غیره ایجاد می‌شوند. از تنظیم \fBPAGINATION_PATTERNS\fP می‌توان برای تغییر این رفتار استفاده کرد. این تنظیم دنباله‌ای از سه‌تایی‌ها را می‌پذیرد که هر سه‌تایی شامل موارد زیر است: .INDENT 0.0 .INDENT 3.5 .sp .EX (minimum_page, page_url, page_save_as,) .EE .UNINDENT .UNINDENT .sp برای \fBpage_url\fP و \fBpage_save_as\fP می‌توانید از چندین متغیر استفاده کنید. \fB{url}\fP و \fB{save_as}\fP به‌ترتیب متناظر با مقادیر \fB*_URL\fP و \fB*_SAVE_AS\fP نوع صفحه مربوطه هستند (مانند \fBARTICLE_SAVE_AS\fP). اگر \fB{save_as} == foo/bar.html\fP باشد، آنگاه \fB{name} == foo/bar\fP و \fB{extension} == .html\fP خواهد بود\&. مقدار \fB{base_name}\fP برابر با \fB{name}\fP است، با این تفاوت که پسوند پایانی \fB/index\fP را در صورت وجود حذف می‌کند. \fB{number}\fP برابر با شماره صفحه است. .sp به‌عنوان مثال، اگر می‌خواهید صفحه اول بدون تغییر بماند، اما صفحه‌های بعدی در \fB\&.../page/2/\fP و غیره قرار گیرند، می‌توانید \fBPAGINATION_PATTERNS\fP را به‌صورت زیر تنظیم کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX PAGINATION_PATTERNS = ( (1, \(aq{url}\(aq, \(aq{save_as}\(aq), (2, \(aq{base_name}/page/{number}/\(aq, \(aq{base_name}/page/{number}/index.html\(aq), ) .EE .UNINDENT .UNINDENT .sp اگر می‌خواهید الگویی بر آخرین صفحه در فهرست اعمال شود، از \fB\-1\fP به‌عنوان مقدار \fBminimum_page\fP استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX (\-1, \(aq{base_name}/last/\(aq, \(aq{base_name}/last/index.html\(aq), .EE .UNINDENT .UNINDENT .SS ترجمه‌ها (Translations) .sp پروژه Pelican روشی برای ترجمه مقاله‌ها ارائه می‌دهد. برای اطلاعات بیشتر بخش محتوا \%<> را ببینید. .INDENT 0.0 .TP .B DEFAULT_LANG = \(aqen\(aq زبان پیش‌فرضی که باید استفاده شود. .UNINDENT .INDENT 0.0 .TP .B ARTICLE_TRANSLATION_ID = \(aqslug\(aq ویژگی(های) فراداده مورد استفاده برای تشخیص این‌که کدام مقاله‌ها ترجمه یکدیگرند. می‌تواند یک رشته یا مجموعه‌ای از رشته‌ها باشد. برای غیرفعال کردن شناسایی ترجمه‌ها، آن را روی \fBNone\fP یا \fBFalse\fP تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B PAGE_TRANSLATION_ID = \(aqslug\(aq ویژگی(های) فراداده مورد استفاده برای تشخیص این‌که کدام صفحه‌ها ترجمه یکدیگرند. می‌تواند یک رشته یا مجموعه‌ای از رشته‌ها باشد. برای غیرفعال کردن شناسایی ترجمه‌ها، آن را روی \fBNone\fP یا \fBFalse\fP تنظیم کنید. .UNINDENT .INDENT 0.0 .TP .B TRANSLATION_FEED_ATOM = \(aqfeeds/all\-{lang}.atom.xml\(aq محل ذخیره خوراک Atom برای ترجمه‌ها. [3] .UNINDENT .INDENT 0.0 .TP .B TRANSLATION_FEED_ATOM_URL = None نشانی نسبی (URL) خوراک Atom برای ترجمه‌ها، شامل جای‌نگهدار \fB{lang}\fP\&. [3] در صورت تنظیم نشدن، از \fBTRANSLATION_FEED_ATOM\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B TRANSLATION_FEED_RSS = None, i.e. no RSS محل قرار دادن خوراک RSS برای ترجمه‌ها. .UNINDENT .INDENT 0.0 .TP .B TRANSLATION_FEED_RSS_URL = None نشانی نسبی (URL) خوراک RSS برای ترجمه‌ها، شامل جای‌نگهدار \fB{lang}\fP\&. [3] در صورت تنظیم نشدن، از \fBTRANSLATION_FEED_RSS\fP هم برای محل ذخیره و هم برای URL استفاده می‌شود. .UNINDENT .IP [3] 5 {lang} کد زبان است.SS مرتب‌سازی محتوا .INDENT 0.0 .TP .B NEWEST_FIRST_ARCHIVES = True مرتب‌سازی آرشیوها بر اساس تاریخ از جدیدترین به قدیمی‌ترین. (مقدار False: مقاله‌ها بر اساس تاریخ به‌گونه‌ای مرتب می‌شوند که مقاله‌های قدیمی‌تر اول بیایند.) .UNINDENT .INDENT 0.0 .TP .B REVERSE_CATEGORY_ORDER = False معکوس کردن ترتیب دسته‌بندی‌ها. (مقدار True: بر اساس ترتیب الفبایی معکوس فهرست می‌کند؛ مقدار پیش‌فرض به‌صورت الفبایی است.) .UNINDENT .INDENT 0.0 .TP .B ARTICLE_ORDER_BY = \(aqreversed\-date\(aq نحوه مرتب‌سازی مقاله‌ها (\fBarticles_page.object_list\fP در قالب) را مشخص می‌کند. گزینه‌های معتبر عبارتند از: متاداده به‌صورت یک رشته (استفاده از پیشوند \fBreversed\-\fP برای معکوس کردن ترتیب مرتب‌سازی)، گزینه ویژه \fB\(aqbasename\(aq\fP که از نام پایه فایل (بدون مسیر) استفاده می‌کند، یا یک تابع سفارشی برای استخراج کلید مرتب‌سازی از مقاله‌ها. استفاده از مقدار \fB\(aqdate\(aq\fP مقاله‌ها را به ترتیب زمانی مرتب می‌کند، در حالی که مقدار پیش‌فرض، \fB\(aqreversed\-date\(aq\fP، مقاله‌ها را بر اساس تاریخ به ترتیب معکوس (یعنی جدیدترین مقاله در ابتدا) مرتب خواهد کرد. .UNINDENT .INDENT 0.0 .TP .B PAGE_ORDER_BY = \(aqbasename\(aq نحوه مرتب‌سازی برگه‌ها (متغیر \fBpages\fP در قالب) را مشخص می‌کند. گزینه‌ها همانند \fBARTICLE_ORDER_BY\fP هستند. مقدار پیش‌فرض، \fB\(aqbasename\(aq\fP، برگه‌ها را بر اساس نام پایه آن‌ها مرتب می‌کند. .UNINDENT .SS تم‌ها .sp ساخت تم‌های Pelican در یک بخش اختصاصی بررسی شده است (نگاه کنید به تم‌ها \%<#\:theming-pelican>). با این حال، در اینجا تنظیمات مربوط به تم‌ها آمده است. .INDENT 0.0 .TP .B THEME تم مورد استفاده برای تولید خروجی. می‌تواند یک مسیر نسبی یا مطلق به پوشه تم، یا نام یک تم پیش‌فرض یا تمی باشد که از طریق pelican\-themes \%<> نصب شده است (پایین را ببینید). .UNINDENT .INDENT 0.0 .TP .B THEME_STATIC_DIR = \(aqtheme\(aq دایرکتوری مقصد در مسیر خروجی که در آن Pelican فایل‌های جمع‌آوری‌شده از \fITHEME_STATIC_PATHS\fP را قرار می‌دهد. پیش‌فرض \fItheme\fP است. .UNINDENT .INDENT 0.0 .TP .B THEME_STATIC_PATHS = [\(aqstatic\(aq] مسیرهای ایستای تم که می‌خواهید کپی شوند. مقدار پیش‌فرض \fIstatic\fP است، اما اگر تم شما مسیرهای ایستای دیگری دارد، می‌توانید آن‌ها را در اینجا قرار دهید. اگر فایل‌ها یا دایرکتوری‌هایی با نام یکسان در مسیرهای تعریف‌شده در این تنظیمات وجود داشته باشند، به‌طور متوالی بازنویسی خواهند شد. .UNINDENT .INDENT 0.0 .TP .B THEME_TEMPLATES_OVERRIDES = [] فهرستی از مسیرهایی که می‌خواهید Jinja2 پیش از جستجو در دایرکتوری \fBtemplates/\fP تم، برای یافتن قالب‌ها جستجو کند. این تنظیم امکان بازنویسی فایل‌های قالب اختصاصی تم را بدون نیاز به فورک کردن تم موجود فراهم می‌کند. Jinja2 به ترتیب زیر جستجو می‌کند: ابتدا فایل‌های موجود در \fBTHEME_TEMPLATES_OVERRIDES\fP، سپس دایرکتوری \fBtemplates/\fP تم. .sp همچنین می‌توانید قالب‌های تم را با استفاده از دستور \fB{% extends %}\fP و پیشوند \fB!theme\fP گسترش دهید، همان‌طور که در مثال زیر نشان داده شده است: .INDENT 7.0 .INDENT 3.5 .sp .EX {% extends \(aq!theme/article.html\(aq %} .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B CSS_FILE = \(aqmain.css\(aq مشخص کردن فایل CSS که می‌خواهید بارگذاری شود. .UNINDENT .sp به‌طور پیش‌فرض، دو تم در دسترس هستند. می‌توانید آن‌ها را با استفاده از تنظیم \fBTHEME\fP یا با ارسال گزینه \fB\-t\fP به دستور \fBpelican\fP مشخص کنید: .INDENT 0.0 .IP \(bu 2 notmyidea .IP \(bu 2 simple (مترادفی برای \(dqمتن ساده\(dq :) .UNINDENT .sp تعدادی تم دیگر در نشانی \%<https://\:github\:.com/\:getpelican/\:pelican-themes> در دسترس است. Pelican به همراه pelican\-themes \%<>، یک اسکریپت کوچک برای مدیریت تم‌ها، ارائه می‌شود. .sp شما می‌توانید تم خود را چه با شروع از ابتدا و چه با تکثیر و ویرایش یک تم از پیش‌موجود ایجاد کنید. راهنمایی برای نحوه ساخت تم شما در \%<> موجود است. .sp در ادامه روش‌های نمونه برای مشخص کردن تم دلخواه شما آمده است: .INDENT 0.0 .INDENT 3.5 .sp .EX # مشخص کردن نام یک تم پیش‌ساخته THEME = \(dqnotmyidea\(dq # مشخص کردن نام تم نصب‌شده از طریق ابزار pelican\-themes THEME = \(dqchunk\(dq # مشخص کردن تم سفارشی از طریق مسیر نسبی نسبت به فایل تنظیمات THEME = \(dqthemes/mycustomtheme\(dq # مشخص کردن تم سفارشی از طریق مسیر مطلق THEME = \(dq/home/myuser/projects/mysite/themes/mycustomtheme\(dq .EE .UNINDENT .UNINDENT .sp تم توکار \fBsimple\fP را می‌توان با استفاده از تنظیمات زیر سفارشی‌سازی کرد. .INDENT 0.0 .TP .B STYLESHEET_URL نشانی URL شیوه‌نامه‌ای (stylesheet) که باید استفاده شود. .UNINDENT .sp تم توکار \fBnotmyidea\fP می‌تواند از تنظیمات زیر به‌خوبی بهره ببرد. شما نیز آزاد هستید که از آن‌ها در تم‌های خود استفاده کنید. .INDENT 0.0 .TP .B SITESUBTITLE زیرعنوانی که در سربرگ نمایش داده می‌شود. .UNINDENT .INDENT 0.0 .TP .B DISQUS_SITENAME ابزار Pelican می‌تواند دیدگاه‌های Disqus را مدیریت کند. شناسه نام سایت Disqus را در اینجا مشخص کنید. .UNINDENT .INDENT 0.0 .TP .B GITHUB_URL نشانی GitHub شما (در صورت وجود). سپس از این اطلاعات برای ساخت روبان GitHub استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B ANALYTICS هرگونه اسکریپت آمارگیر دلخواه را در این تنظیم در \fBpublishconf.py\fP قرار دهید. مثال: .INDENT 7.0 .INDENT 3.5 .sp .EX ANALYTICS = \(dq\(dq\(dq <script src=\(dq/theme/js/primary\-analytics.js\(dq></script> <script> [ … in\-line Javascript code for secondary analytics … ] </script> \(dq\(dq\(dq .EE .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B MENUITEMS فهرستی از تاپل‌های (Title, URL) برای آیتم‌های منوی اضافی جهت نمایش در ابتدای منوی اصلی. .UNINDENT .INDENT 0.0 .TP .B LINKS فهرستی از تاپل‌های (Title, URL) برای پیوندهایی که در سربرگ نمایش داده می‌شوند. .UNINDENT .INDENT 0.0 .TP .B SOCIAL فهرستی از تاپل‌های (Title, URL) برای نمایش در بخش \(dqsocial\(dq. .UNINDENT .INDENT 0.0 .TP .B TWITTER_USERNAME امکان افزودن دکمه‌ای به مقاله‌ها جهت تشویق دیگران به ارسال توییت درباره آن‌ها را فراهم می‌کند. در صورتی که می‌خواهید این دکمه نمایش داده شود، نام کاربری Twitter خود را اضافه کنید. .UNINDENT .INDENT 0.0 .TP .B LINKS_WIDGET_NAME امکان بازنویسی نام ابزارک پیوندها را فراهم می‌کند. در صورت عدم تعیین، به‌طور پیش‌فرض \(dqlinks\(dq خواهد بود. .UNINDENT .INDENT 0.0 .TP .B SOCIAL_WIDGET_NAME امکان بازنویسی نام ابزارک \(dqsocial\(dq را فراهم می‌کند. در صورت عدم تعیین، به‌طور پیش‌فرض \(dqsocial\(dq خواهد بود. .UNINDENT .sp علاوه بر این، می‌توانید با افزودن خط زیر به پیکربندی خود، از نسخه \(dqwide\(dq (عریض) تم \fBnotmyidea\fP استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX CSS_FILE = \(dqwide.css\(dq .EE .UNINDENT .UNINDENT.SS "گزارش‌گیری (Logging)" .sp گاهی اوقات، ممکن است هنگام تولید سایت فهرست بلندی از هشدارها ظاهر شود. پیدا کردن پیام خطای \fBمعنادار\fP در میان انبوهی از خروجی‌های گزارش آزاردهنده می‌تواند بسیار دشوار باشد. برای پالایش پیام‌های گزارش زاید، Pelican به همراه تنظیم \fBLOG_FILTER\fP عرضه می‌شود. .sp \fBLOG_FILTER\fP باید فهرستی از تاپل‌های \fB(level, msg)\fP باشد که هر یک از سطح ثبت گزارش (تا حداکثر \fBwarning\fP) و پیامی که باید نادیده گرفته شود تشکیل شده است. کافی است این فهرست را با پیام‌های گزارشی که می‌خواهید پنهان شوند پر کنید تا پالایش شوند. .sp برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX import logging LOG_FILTER = [(logging.WARN, \(aqTAG_SAVE_AS is set to False\(aq)] .EE .UNINDENT .UNINDENT .sp امکان پالایش پیام‌ها با استفاده از یک الگو (template) نیز وجود دارد. برای به دست آوردن الگو، سورس کد را بررسی کنید. .sp برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX import logging LOG_FILTER = [(logging.WARN, \(aqEmpty alt attribute for image %s in %s\(aq)] .EE .UNINDENT .UNINDENT .sp \fBهشدار:\fP .INDENT 0.0 .INDENT 3.5 ساکت کردن پیام‌ها با الگوها قابلیتی خطرناک است. این احتمال وجود دارد که به طور ناخواسته چندین نوع پیام با الگوی یکسان پالایش شوند (از جمله پیام‌های نسخه‌های بعدی Pelican). با احتیاط عمل کنید. .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 در صورت ارسال \fB\-\-debug\fP، این گزینه هیچ کاری انجام نمی‌دهد. .UNINDENT .UNINDENT .SS "خواندن تنها محتوای تغییریافته (Reading only modified content)" .sp برای افزایش سرعت فرایند ساخت، Pelican می‌تواند به صورت اختیاری فقط مقاله‌ها و برگه‌های دارای محتوای تغییریافته را بخواند. .sp هنگامی که Pelican در شرف خواندن یک فایل منبع محتوا است: .INDENT 0.0 .IP 1. 3 اگر \fBLOAD_CONTENT_CACHE\fP برابر \fBTrue\fP باشد، اطلاعات هش یا زمان ویرایش فایل از ساخت قبلی از یک فایل حافظه موقت (cache) بارگذاری می‌شود\&. این فایل‌ها در دایرکتوری \fBCACHE_PATH\fP ذخیره می‌شوند. اگر فایل رکوردی در فایل حافظه موقت نداشته باشد، طبق روال معمول خوانده می‌شود. .IP 2. 3 فایل بر اساس \fBCHECK_MODIFIED_METHOD\fP بررسی می‌شود: .INDENT 3.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 اگر روی \fB\(aqmtime\(aq\fP تنظیم شده باشد، زمان ویرایش فایل بررسی می‌شود. .IP \(bu 2 اگر روی نام تابعی ارائه‌شده توسط ماژول \fBhashlib\fP تنظیم شده باشد، مانند \fB\(aqmd5\(aq\fP، هش فایل بررسی می‌شود. .IP \(bu 2 اگر روی هر چیز دیگری تنظیم شده باشد یا اطلاعات لازم درباره فایل در فایل حافظه موقت یافت نشود، محتوا طبق روال معمول خوانده می‌شود. .UNINDENT .UNINDENT .UNINDENT .IP 3. 3 اگر فایل بدون تغییر تشخیص داده شود، داده‌های محتوای ذخیره‌شده در ساخت قبلیِ مربوط به آن فایل از حافظه موقت بارگذاری می‌شود و فایل خوانده نمی‌شود. .IP 4. 3 اگر فایل تغییریافته در نظر گرفته شود، فایل خوانده شده و در صورتی که \fBCACHE_CONTENT\fP برابر \fBTrue\fP باشد، اطلاعات ویرایش جدید و داده‌های محتوا در حافظه موقت ذخیره می‌شوند\&. .UNINDENT .sp اگر \fBCONTENT_CACHING_LAYER\fP روی \fB\(aqreader\(aq\fP (پیش‌فرض) تنظیم شده باشد، محتوای خام و متادیتا (metadata) بازگردانده‌شده توسط یک reader در حافظه موقت ذخیره می‌شوند. اگر این تنظیم به جای آن روی \fB\(aqgenerator\(aq\fP تنظیم شود، شیء محتوای پردازش‌شده در حافظه موقت ذخیره می‌شود. ذخیره شیء محتوای پردازش‌شده در حافظه موقت ممکن است با افزونه‌ها (به دلیل رد شدن برخی سیگنال‌های مربوط به خواندن) و قابلیت \fBWITH_FUTURE_DATES\fP (زیرا وضعیت \fBdraft\fP اشیاء محتوای ذخیره‌شده در حافظه موقت به طور خودکار در گذر زمان تغییر نخواهد کرد) تداخل داشته باشد. .sp بررسی زمان‌های ویرایش سریع‌تر از مقایسه هش‌های فایل است، اما به اندازه آن قابل اعتماد نیست زیرا اطلاعات \fBmtime\fP ممکن است از بین برود، برای مثال هنگام کپی کردن فایل‌های منبع محتوا با استفاده از دستورهای \fBcp\fP یا \fBrsync\fP بدون حالت حفظ \fBmtime\fP (که برای \fBrsync\fP با ارسال پرچم \fB\-\-archive\fP فعال می‌شود). .sp فایل‌های حافظه موقت از نوع pickle پایتون هستند، بنابراین ممکن است توسط نسخه‌های مختلف Python خوانا نباشند زیرا قالب pickle اغلب تغییر می‌کند. در صورت مواجهه با چنین خطایی، این خطا دریافت شده و فایل حافظه موقت به طور خودکار در قالب جدید بازسازی می‌شود. همچنین فایل‌های حافظه موقت پس از تغییر تنظیم \fBGZIP_CACHE\fP بازسازی خواهند شد. .sp گزینه خط فرمان \fB\-\-ignore\-cache\fP زمانی مفید است که کل حافظه موقت نیاز به بازسازی داشته باشد، مانند اعمال تغییراتی در فایل تنظیمات که بر محتوای ذخیره‌شده در حافظه موقت اثر می‌گذارد، یا صرفاً برای مقاصد اشکال‌زدایی. هنگامی که Pelican در حالت بارگذاری خودکار (autoreload) اجرا می‌شود، در صورتی که \fBAUTORELOAD_IGNORE_CACHE\fP برابر \fBTrue\fP باشد، ویرایش فایل تنظیمات باعث می‌شود حافظه موقت به طور خودکار نادیده گرفته شود\&. .sp توجه داشته باشید که حتی هنگام استفاده از محتوای حافظه موقت، تمام خروجی همیشه نوشته می‌شود، بنابراین زمان‌های ویرایش فایل‌های \fB*.html\fP تولیدشده همیشه تغییر خواهند کرد. از این رو، بارگذاری مبتنی بر \fBrsync\fP می‌تواند از گزینه \fB\-\-checksum\fP بهره‌مند شود..SS تنظیمات نمونه (Example settings) .INDENT 0.0 .INDENT 3.5 .sp .EX AUTHOR = \(dqAlexis Métaireau\(dq SITENAME = \(dqAlexis\(aq log\(dq SITESUBTITLE = \(dqA personal blog.\(dq SITEURL = \(dqhttp://blog.notmyidea.org\(dq TIMEZONE = \(dqEurope/Paris\(dq # can be useful in development, but set to False when you\(aqre ready to publish RELATIVE_URLS = True GITHUB_URL = \(dqhttp://github.com/ametaireau/\(dq DISQUS_SITENAME = \(dqblog\-notmyidea\(dq REVERSE_CATEGORY_ORDER = True LOCALE = \(dqC\(dq DEFAULT_PAGINATION = 4 DEFAULT_DATE = (2012, 3, 2, 14, 1, 1) FEED_ALL_RSS = \(dqfeeds/all.rss.xml\(dq CATEGORY_FEED_RSS = \(dqfeeds/{slug}.rss.xml\(dq LINKS = ( (\(dqBiologeek\(dq, \(dqhttp://biologeek.org\(dq), (\(dqFilyb\(dq, \(dqhttp://filyb.info/\(dq), (\(dqLibert\-fr\(dq, \(dqhttp://www.libert\-fr.com\(dq), (\(dqN1k0\(dq, \(dqhttp://prendreuncafe.com/blog/\(dq), (\(dqTarek Ziadé\(dq, \(dqhttp://ziade.org/blog\(dq), (\(dqZubin Mithra\(dq, \(dqhttp://zubin71.wordpress.com/\(dq), ) SOCIAL = ( (\(dqtwitter\(dq, \(dqhttp://twitter.com/ametaireau\(dq), (\(dqlastfm\(dq, \(dqhttp://lastfm.com/user/akounet\(dq), (\(dqgithub\(dq, \(dqhttp://github.com/ametaireau\(dq), ) # global metadata to all the contents DEFAULT_METADATA = {\(dqyeah\(dq: \(dqit is\(dq} # path\-specific metadata EXTRA_PATH_METADATA = { \(dqextra/robots.txt\(dq: {\(dqpath\(dq: \(dqrobots.txt\(dq}, } # static paths will be copied without parsing their contents STATIC_PATHS = [ \(dqimages\(dq, \(dqextra/robots.txt\(dq, ] # custom page generated with a jinja2 template TEMPLATE_PAGES = {\(dqpages/jinja2_template.html\(dq: \(dqjinja2_template.html\(dq} # there is no other HTML content READERS = {\(dqhtml\(dq: None} # code blocks with line numbers PYGMENTS_RST_OPTIONS = {\(dqlinenos\(dq: \(dqtable\(dq} # foobar will not be used, because it\(aqs not in caps. All configuration keys # have to be in caps foobar = \(dqbarbaz\(dq .EE .UNINDENT .UNINDENT .SS افزونه‌ها (Plugins) .sp از نسخهٔ 3.0، Pelican از افزونه‌ها پشتیبانی می‌کند. افزونه‌ها راهکاری برای افزودن قابلیت‌ها به Pelican بدون نیاز به تغییر مستقیم هستهٔ آن هستند. .SS نحوهٔ استفاده از افزونه‌ها (How to use plugins) .sp از نسخهٔ 4.5، Pelican به ساختار جدیدی از افزونه‌ها مبتنی بر بسته‌های فضای‌نام (namespace packages) مهاجرت کرد که به‌سادگی از طریق Pip \%<https://\:pip\:.pypa\:.io>\& قابل نصب هستند. افزونه‌هایی که از این ساختار پشتیبانی می‌کنند، ذیل بستهٔ فضای‌نام \fBpelican.plugins\fP نصب می‌شوند و می‌توانند به‌طور خودکار توسط Pelican شناسایی گردند. برای مشاهدهٔ فهرستی از افزونه‌های فضای‌نام نصب‌شده توسط Pip که در محیط شما فعال هستند، دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican\-plugins .EE .UNINDENT .UNINDENT .sp اگر تنظیم \fBPLUGINS\fP را روی مقدار پیش‌فرض (\fBNone\fP) باقی بگذارید، Pelican به‌طور خودکار افزونه‌های فضای‌نام را شناسایی و ثبت می‌کند. در مقابل، اگر تنظیم \fBPLUGINS\fP را به عنوان فهرستی از افزونه‌ها مشخص کنید، این شناسایی خودکار غیرفعال خواهد شد. در این حالت، تنها افزونه‌هایی که مشخص کرده‌اید ثبت می‌شوند و باید هر افزونهٔ فضای‌نام را نیز صراحتاً در فهرست قید نمایید. .sp در صورت استفاده از تنظیم \fBPLUGINS\fP، می‌توانید افزونه‌ها را به دو روش مشخص کنید. در روش نخست، افزونه‌ها به عنوان فهرستی از رشته‌ها تعیین می‌شوند. افزونه‌های فضای‌نام را می‌توان با نام کامل (\fBpelican.plugins.myplugin\fP) یا با نام کوتاه آن‌ها (\fBmyplugin\fP) مشخص کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX PLUGINS = [\(aqpackage.myplugin\(aq, \(aqnamespace_plugin1\(aq, \(aqpelican.plugins.namespace_plugin2\(aq] .EE .UNINDENT .UNINDENT .sp به عنوان روش جایگزین، می‌توانید آن‌ها را در فایل تنظیمات خود وارد (import) کرده و ماژول‌ها را ارسال کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX from package import myplugin from pelican.plugins import namespace_plugin1, namespace_plugin2 PLUGINS = [myplugin, namespace_plugin1, namespace_plugin2] .EE .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 هنگام آزمایش افزونه‌های مختلف (به‌ویژه آن‌هایی که با فراداده‌ها و محتوا سروکار دارند) ممکن است حافظهٔ موقت (caching) تداخل ایجاد کرده و تغییرات اعمال‌شده نمایان نشوند. در چنین مواردی، کش کردن را با \fBLOAD_CONTENT_CACHE = False\fP غیرفعال کنید یا از گزینهٔ خط فرمان \fB\-\-ignore\-cache\fP استفاده نمایید. .UNINDENT .UNINDENT .sp اگر افزونه‌های شما در مسیری قابل وارد کردن (importable) قرار ندارند، می‌توانید فهرستی از مسیرها را از طریق تنظیم \fBPLUGIN_PATHS\fP مشخص کنید. همان‌طور که در مثال زیر نشان داده شده است، مسیرها در فهرست \fBPLUGIN_PATHS\fP می‌توانند به صورت مطلق یا نسبت به فایل تنظیمات، نسبی باشند: .INDENT 0.0 .INDENT 3.5 .sp .EX PLUGIN_PATHS = [\(dqplugins\(dq, \(dq/srv/pelican/plugins\(dq] PLUGINS = [\(dqassets\(dq, \(dqliquid_tags\(dq, \(dqsitemap\(dq] .EE .UNINDENT .UNINDENT.SS "محل یافتن پلاگین‌ها (Where to find plugins)" .sp پلاگین‌های فضای‌نام (Namespace plugins) را می‌توان در سازمان pelican\-plugins \%<https://\:github\:.com/\:pelican-plugins> به عنوان مخزن‌های جداگانه یافت. پلاگین‌های موروثی (legacy) در مخزن pelican\-plugins \%<https://\:github\:.com/\:getpelican/\:pelican-plugins> قرار دارند و به تدریج به نفع نسخه‌های فضای‌نام کنار گذاشته خواهند شد. .sp لطفاً توجه داشته باشید در حالی که ما تمام تلاش خود را برای بررسی و نگهداری این پلاگین‌ها انجام می‌دهیم، اما آن‌ها توسط جامعهٔ کاربران Pelican ارسال شده‌اند و بنابراین ممکن است سطوح متفاوتی از پشتیبانی و سازگاری داشته باشند. .SS "نحوه ساخت پلاگین‌ها (How to create plugins)" .sp پلاگین‌ها بر اساس مفهوم سیگنال‌ها کار می‌کنند. Pelican سیگنال‌ها را ارسال می‌کند و پلاگین‌ها در این سیگنال‌ها مشترک می‌شوند. فهرست سیگنال‌های موجود در بخش بعدی مستند شده است. .sp تنها قانونی که باید برای پلاگین‌ها رعایت شود، تعریف یک شیء فراخوانی‌پذیر (callable) به نام \fBregister\fP است که در آن سیگنال‌ها را به منطق پلاگین خود متصل می‌کنید. بیایید یک مثال ساده را در نظر بگیریم: .INDENT 0.0 .INDENT 3.5 .sp .EX import logging from pelican import signals log = logging.getLogger(__name__) def test(sender): log.debug("\(dq%s initialized !!\(dq, sender) def register(): signals.initialized.connect(test) .EE .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 گیرنده‌های سیگنال دارای ارجاع ضعیف (weakly\-referenced) هستند و بنابراین نباید در داخل شیء فراخوانی‌پذیر \fBregister\fP شما تعریف شوند، در غیر این صورت قبل از انتشار سیگنال توسط بازیافت حافظه (garbage collection) پاک خواهند شد. .UNINDENT .UNINDENT .sp اگر چندین پلاگین به یک سیگنال متصل شوند، پلاگین‌ها به ترتیبی که ثبت شده‌اند فراخوانی خواهند شد. هنگامی که تنظیمات \fBPLUGINS\fP تعریف شده باشد، ترتیب فراخوانی پلاگین‌ها همان ترتیبی خواهد بود که در تنظیمات \fBPLUGINS\fP فهرست شده‌اند. اگر به پلاگین‌های فضای‌نامِ شناسایی‌شده به صورت خودکار تکیه می‌کنید و تنظیم \fBPLUGINS\fP را تعریف نکرده‌اید، پلاگین‌ها به همان ترتیبی که شناسایی می‌شوند فراخوانی خواهند شد (همان ترتیبی که در خروجی دستور \fBpelican\-plugins\fP فهرست شده است). اگر می‌خواهید ترتیب را به صورت صریح مشخص کنید، شناسایی خودکار را با تعریف \fBPLUGINS\fP با ترتیب دلخواه غیرفعال کنید. .SS "ساختار پلاگین‌های فضای‌نام (Namespace plugin structure)" .sp پلاگین‌های فضای‌نام برای اینکه به درستی کار کنند باید از ساختار مشخصی پیروی کنند. آن‌ها باید قابل نصب باشند (یعنی شامل \fBsetup.py\fP یا معادل آن باشند) و ساختار پوشه‌ای به صورت زیر داشته باشند: .INDENT 0.0 .INDENT 3.5 .sp .EX myplugin ├── pelican │\ \ └── plugins │\ \ └── myplugin │\ \ ├── __init__.py │\ \ └── ... ├── ... └── setup.py .EE .UNINDENT .UNINDENT .sp بسیار حیاتی است که پوشهٔ \fBpelican\fP یا \fBpelican/plugins\fP حاوی فایل \fB__init__.py\fP \fBنباشد\fP. در واقع، برای جلوگیری از هرگونه مشکل، بهتر است این پوشه‌ها به جز پوشه‌های فهرست‌شده در ساختار بالا خالی باشند و فایل‌های مربوط به پلاگین خود را صرفاً در پوشهٔ \fBpelican/plugins/myplugin\fP نگه دارید. .sp برای راه‌اندازی آسان ساختار مناسب، یک قالب cookiecutter برای پلاگین‌ها \%<https://\:github\:.com/\:getpelican/\:cookiecutter-pelican-plugin> ارائه شده است. برای دستورالعمل‌های نحوه استفاده از آن، به فایل README آن پروژه مراجعه کنید. .SS "فهرست سیگنال‌ها (List of signals)" .sp در اینجا فهرست سیگنال‌هایی که در حال حاضر پیاده‌سازی شده‌اند آمده است: .TS box center; l|l|l. T{ سیگنال T} T{ آرگومان‌ها T} T{ توضیحات T} _ T{ initialized T} T{ pelican object T} T{ T} _ T{ finalized T} T{ pelican object T} T{ پس از اجرای همهٔ generatorها و درست پیش از خروج pelican فراخوانی می‌شود برای اقدامات پس‌پردازش سفارشی مفید است، مانند: \- کوچک‌سازی (minify کردن) دارایی‌های js/css. \- اطلاع‌رسانی/پینگ کردن موتورهای جستجو با sitemap به‌روزشده. T} _ T{ generator_init T} T{ generator T} T{ در Generator.__init__ فراخوانی می‌شود T} _ T{ all_generators_finalized T} T{ generators T} T{ پس از اجرای همهٔ generatorها و پیش از نوشتن خروجی فراخوانی می‌شود T} _ T{ readers_init T} T{ readers T} T{ در Readers.__init__ فراخوانی می‌شود T} _ T{ article_generator_context T} T{ article_generator, metadata T} T{ T} _ T{ article_generator_preread T} T{ article_generator T} T{ پیش از خوانده شدن یک مقاله در ArticlesGenerator.generate_context فراخوانی می‌شود؛ اگر کد نیاز به انجام کاری پیش از تجزیهٔ هر مقاله دارد استفاده کنید T} _ T{ article_generator_init T} T{ article_generator T} T{ در ArticlesGenerator.__init__ فراخوانی می‌شود T} _ T{ article_generator_pretaxonomy T} T{ article_generator T} T{ پیش از ایجاد فهرست دسته‌بندی‌ها و برچسب‌ها فراخوانی می‌شود برای مواردی مانند تغییر فهرست مقالاتی که باید تولید شوند مفید است تا مقالات حذف‌شده در دسته‌بندی‌ها یا برچسب‌ها درز پیدا نکنند T} _ T{ article_generator_finalized T} T{ article_generator T} T{ در انتهای ArticlesGenerator.generate_context فراخوانی می‌شود T} _ T{ article_generator_write_article T} T{ article_generator, content T} T{ پیش از نوشتن هر مقاله فراخوانی می‌شود، مقاله به عنوان content ارسال می‌شود T} _ T{ article_writer_finalized T} T{ article_generator, writer T} T{ پس از اینکه تمام مقالات و صفحات مرتبط نوشته شدند فراخوانی می‌شود، اما پیش از بسته شدن article generator. T} _ T{ get_generators T} T{ pelican object T} T{ در Pelican.get_generator_classes فراخوانی می‌شود، می‌تواند یک Generator یا چندین generator را در یک چندتایی (tuple) یا در یک لیست بازگرداند. T} _ T{ get_writer T} T{ pelican object T} T{ در Pelican.get_writer فراخوانی می‌شود، می‌تواند یک Writer سفارشی بازگرداند. T} _ T{ page_generator_context T} T{ page_generator, metadata T} T{ T} _ T{ page_generator_preread T} T{ page_generator T} T{ پیش از خوانده شدن یک صفحه در PageGenerator.generate_context فراخوانی می‌شود؛ اگر کد نیاز به انجام کاری پیش از تجزیهٔ هر صفحه دارد استفاده کنید. T} _ T{ page_generator_init T} T{ page_generator T} T{ در PagesGenerator.__init__ فراخوانی می‌شود T} _ T{ page_generator_finalized T} T{ page_generator T} T{ در انتهای PagesGenerator.generate_context فراخوانی می‌شود T} _ T{ page_generator_write_page T} T{ page_generator, content T} T{ پیش از نوشتن هر صفحه فراخوانی می‌شود، صفحه به عنوان content ارسال می‌شود T} _ T{ page_writer_finalized T} T{ page_generator, writer T} T{ پس از اینکه تمام صفحات نوشته شدند فراخوانی می‌شود، اما پیش از بسته شدن page generator. T} _ T{ static_generator_context T} T{ static_generator, metadata T} T{ T} _ T{ static_generator_preread T} T{ static_generator T} T{ پیش از خوانده شدن یک فایل ایستا در StaticGenerator.generate_context فراخوانی می‌شود؛ اگر کد نیاز به انجام کاری پیش از اضافه شدن هر فایل ایستا به فهرست staticfiles دارد استفاده کنید. T} _ T{ static_generator_init T} T{ static_generator T} T{ در StaticGenerator.__init__ فراخوانی می‌شود T} _ T{ static_generator_finalized T} T{ static_generator T} T{ در انتهای StaticGenerator.generate_context فراخوانی می‌شود T} _ T{ content_object_init T} T{ content_object T} T{ در انتهای Content.__init__ فراخوانی می‌شود T} _ T{ content_written T} T{ path, context T} T{ هر بار که یک فایل محتوا نوشته می‌شود فراخوانی می‌شود. T} _ T{ feed_generated T} T{ context, feed T} T{ هر بار که یک فید تولید می‌شود فراخوانی می‌شود. می‌تواند برای تغییر شیء فید پیش از نوشته شدن آن استفاده شود. T} _ T{ feed_written T} T{ path, context, feed T} T{ هر بار که یک فایل فید نوشته می‌شود فراخوانی می‌شود. T} .TE .sp \fBهشدار:\fP .INDENT 0.0 .INDENT 3.5 اگر قصد دارید ویژگی‌های \fBsummary\fP یا \fBcontent\fP شیء محتوا را بخوانید، از سیگنال \fBcontent_object_init\fP اجتناب کنید. این ترکیب هنگام پیوند دادن به محتوای داخلی \%<#\:ref-linking-to-internal-content> می‌تواند منجر به پیوندهای حل‌نشده شود (باگ شمارهٔ ۳۱۴ در pelican\-plugins را ببینید: \%<https://\:github\:.com/\:getpelican/\:pelican-plugins/\:issues/\:314>). در عوض از ویژگی‌های \fB_summary\fP و \fB_content\fP استفاده کنید، یا در غیر این صورت، پلاگین خود را در مرحله‌ای دیرتر (مانند \fBall_generators_finalized\fP) اجرا کنید. .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 پس از Pelican 3.2، نام‌های سیگنال‌ها استانداردسازی شدند. ممکن است لازم باشد پلاگین‌های قدیمی‌تر برای استفاده از نام‌های جدید به‌روزرسانی شوند: .TS box center; l|l. T{ نام قدیمی T} T{ نام جدید T} _ T{ article_generate_context T} T{ article_generator_context T} _ T{ article_generate_finalized T} T{ article_generator_finalized T} _ T{ article_generate_preread T} T{ article_generator_preread T} _ T{ pages_generate_context T} T{ page_generator_context T} _ T{ pages_generate_preread T} T{ page_generator_preread T} _ T{ pages_generator_finalized T} T{ page_generator_finalized T} _ T{ pages_generator_init T} T{ page_generator_init T} _ T{ static_generate_context T} T{ static_generator_context T} _ T{ static_generate_preread T} T{ static_generator_preread T} .TE .UNINDENT .UNINDENT.SS دستورالعمل‌ها (Recipes) .sp در نهایت به این نتیجه رسیدیم که بهتر است برخی از دستورالعمل‌های ساخت افزونه‌ها در جایی از مستندات به اشتراک گذاشته شوند، بنابراین این شما و این دستورالعمل‌ها! .SS نحوه ایجاد یک reader جدید .sp یکی از مواردی که ممکن است بخواهید، افزودن پشتیبانی از قالب ورودی اختصاصی خودتان است. در حالی که شاید افزودن این قابلیت به هسته Pelican منطقی به نظر برسد، ما هوشمندانه تصمیم گرفتیم از این وضعیت اجتناب کرده و در عوض readerهای مختلف را از طریق افزونه‌ها تعریف کنیم. .sp دلیل اصلی این انتخاب آن است که نوشتن افزونه‌ها واقعاً آسان است و هنگامی که فعال نیستند، سرعت خود Pelican را کاهش نمی‌دهند. .sp بدون توضیح بیشتر — در اینجا یک مثال آورده شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX from pelican import signals from pelican.readers import BaseReader # Create a new reader class, inheriting from the pelican.reader.BaseReader class NewReader(BaseReader): enabled = True # Yeah, you probably want that :\-) # The list of file extensions you want this reader to match with. # If multiple readers were to use the same extension, the latest will # win (so the one you\(aqre defining here, most probably). file_extensions = [\(aqyeah\(aq] # You need to have a read method, which takes a filename and returns # some content and the associated metadata. def read(self, filename): metadata = {\(aqtitle\(aq: \(aqOh yeah\(aq, \(aqcategory\(aq: \(aqFoo\(aq, \(aqdate\(aq: \(aq2012\-12\-01\(aq} parsed = {} for key, value in metadata.items(): parsed[key] = self.process_metadata(key, value) return \(dqSome content\(dq, parsed def add_reader(readers): readers.reader_classes[\(aqyeah\(aq] = NewReader # This is how pelican works. def register(): signals.readers_init.connect(add_reader) .EE .UNINDENT .UNINDENT .SS افزودن یک generator جدید .sp افزودن یک generator جدید نیز بسیار آسان است. برای اطلاعات بیشتر درباره نحوه ایجاد generator اختصاصی خود، ممکن است بخواهید نگاهی به ساختار درونی Pelican (Pelican internals) \%<> بیندازید. .INDENT 0.0 .INDENT 3.5 .sp .EX def get_generators(pelican_object): # define a new generator here if you need to return MyGenerator def register(): signals.get_generators.connect(get_generators) .EE .UNINDENT .UNINDENT .SS افزودن یک writer جدید .sp افزودن یک writer به شما این امکان را می‌دهد که قالب‌های فایل بیشتری را در دیسک ذخیره کنید، یا نحوه نوشتن قالب‌های موجود بر روی دیسک را تغییر دهید. توجه داشته باشید که در هر زمان تنها یک writer فعال خواهد بود، بنابراین مطمئن شوید که یا از کلاس Writer توکار (built\-in) ارث‌بری می‌کنید، یا آن را کاملاً از نو پیاده‌سازی می‌نمایید. .sp در اینجا یک مثال پایه‌ای از نحوه راه‌اندازی writer اختصاصی شما آورده شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX from pelican.writers import Writer from pelican import signals class MyWriter(Writer): # define new writer functionality pass def add_writer(pelican_object): # use pelican_instance to setup stuff if needed return MyWriter def register(): signals.get_writer.connect(add_writer) .EE .UNINDENT .UNINDENT .SS استفاده از افزونه‌ها برای تزریق محتوا .sp شما می‌توانید با استفاده از افزونه‌ها مقاله‌ها یا صفحه‌ها را به صورت برنامه‌نویسی‌شده تزریق کنید. این ویژگی برای نمونه در صورتی که بخواهید مقاله‌ها را از یک API دریافت کنید، می‌تواند مفید باشد. .sp در ادامه یک مثال ساده از نحوه ساخت افزونه‌ای آورده شده است که با استفاده از سیگنال \fBarticle_generator_pretaxonomy\fP یک مقاله سفارشی را تزریق می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX import datetime from pelican import signals from pelican.contents import Article from pelican.readers import BaseReader def addArticle(articleGenerator): settings = articleGenerator.settings # Author, category, and tags are objects, not strings, so they need to # be handled using BaseReader\(aqs process_metadata() function. baseReader = BaseReader(settings) content = \(dqI am the body of an injected article!\(dq newArticle = Article(content, { \(dqtitle\(dq: \(dqInjected Article!\(dq, \(dqdate\(dq: datetime.datetime.now(), \(dqcategory\(dq: baseReader.process_metadata(\(dqcategory\(dq, \(dqfromAPI\(dq), \(dqtags\(dq: baseReader.process_metadata(\(dqtags\(dq, \(dqtagA, tagB\(dq) }) articleGenerator.articles.insert(0, newArticle) def register(): signals.article_generator_pretaxonomy.connect(addArticle) .EE .UNINDENT .UNINDENT.SS پوسته‌ها .sp مخزنی از پوسته‌های Pelican به نشانی \%<https://\:github\:.com/\:getpelican/\:pelican-themes> وجود دارد که توسط جامعهٔ کاربری برای اشتراک‌گذاری و استفادهٔ همگان مدیریت می‌شود. .sp لطفاً توجه داشته باشید اگرچه ما تمام تلاش خود را برای بررسی و ادغام مشارکت‌ها در پوسته‌ها به کار می‌گیریم، اما این پوسته‌ها توسط جامعهٔ Pelican ارسال می‌شوند و در نتیجه ممکن است از سطوح متفاوتی از پشتیبانی و سازگاری برخوردار باشند. .SS ساخت پوسته‌ها .sp برای تولید خروجی HTML،‏ Pelican به دلیل انعطاف‌پذیری و نحو سرراست موتور قالب‌ساز Jinja \%<https://\:palletsprojects\:.com/\:p/\:jinja> از آن استفاده می‌کند. اگر مایلید پوستهٔ خودتان را بسازید، می‌توانید از پوستهٔ \(dqsimple\(dq در \%<https://\:github\:.com/\:getpelican/\:pelican/\:tree/\:main/\:pelican/\:themes/\:simple/\:templates>\& الهام بگیرید. .sp برای تولید سایت خود با استفاده از پوسته‌ای که ساخته‌اید (یا به صورت دستی بارگیری کرده و سپس تغییر داده‌اید)، می‌توانید آن پوسته را از طریق پرچم \fB\-t\fP مشخص کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-s pelicanconf.py \-t /projects/your\-site/themes/your\-theme .EE .UNINDENT .UNINDENT .sp اگر ترجیح می‌دهید پوسته را در هر بار اجرای دستور مشخص نکنید، می‌توانید متغیر \fBTHEME\fP را در تنظیمات خود تعریف کنید تا به مکان پوستهٔ مورد نظر شما اشاره کند. .SS ساختار .sp برای ساخت پوستهٔ خود، باید ساختار زیر را رعایت کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX ├── static │ ├── css │ └── images └── templates ├── archives.html // to display archives ├── article.html // processed for each article ├── author.html // processed for each author ├── authors.html // must list all the authors ├── categories.html // must list all the categories ├── category.html // processed for each category ├── index.html // the index (list all the articles) ├── page.html // processed for each page ├── period_archives.html // to display time\-period archives ├── tag.html // processed for each tag └── tags.html // must list all the tags. Can be a tag cloud. .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP \(bu 2 پوشهٔ \fIstatic\fP شامل تمام دارایی‌های ایستا است که در پوشهٔ خروجی \fItheme\fP کپی خواهند شد. ساختار سامانهٔ فایل بالا شامل پوشه‌های CSS و تصاویر است، اما این‌ها فقط مثال هستند. هر آنچه نیاز دارید را اینجا قرار دهید. .IP \(bu 2 پوشهٔ \fItemplates\fP شامل تمام قالب‌هایی است که برای تولید محتوا استفاده خواهند شد. فایل‌های قالب فهرست‌شده در بالا اجباری هستند؛ اگر در هنگام ساخت پوسته، افزودن قالب‌های اختصاصی به سازمان‌دهی بهتر کمک می‌کند، می‌توانید آن‌ها را نیز اضافه کنید. .UNINDENT .SS قالب‌ها و متغیرها .sp ایدهٔ اصلی استفاده از نحو ساده‌ای است که بتوانید آن را درون صفحات HTML خود بگنجانید. این سند توضیح می‌دهد چه قالب‌هایی باید در یک پوسته وجود داشته باشند، و چه متغیرهایی در زمان تولید به هر قالب ارسال خواهند شد. .sp تمام قالب‌ها متغیرهای تعریف‌شده در فایل تنظیمات شما را دریافت خواهند کرد، مادامی که با حروف بزرگ (all\-caps) باشند. می‌توانید مستقیماً به آن‌ها دسترسی داشته باشید. .SS متغیرهای عمومی .sp تمام این تنظیمات در دسترس همهٔ قالب‌ها خواهند بود. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ output_file T} T{ نام فایلی که در حال حاضر تولید می‌شود. به عنوان مثال، هنگامی که Pelican در حال پردازش صفحهٔ اصلی است، output_file برابر با \(dqindex.html\(dq خواهد بود. T} _ T{ articles T} T{ فهرست مقاله‌ها، مرتب‌شده به صورت نزولی بر اساس تاریخ. تمام عناصر اشیاء \fIArticle\fP هستند، بنابراین می‌توانید به ویژگی‌های آن‌ها (مانند title،‏ summary،‏ author و غیره) دسترسی پیدا کنید. گاهی این متغیر پوشانده (shadowed) می‌شود (برای مثال، در صفحهٔ برچسب‌ها). در این صورت اطلاعات مربوط به آن را در متغیر \fIall_articles\fP خواهید یافت. T} _ T{ dates T} T{ همان فهرست مقاله‌ها، اما مرتب‌شده بر اساس تاریخ به صورت صعودی. T} _ T{ hidden_articles T} T{ فهرست مقاله‌های پنهان‌شده T} _ T{ drafts T} T{ فهرست مقاله‌های پیش‌نویس T} _ T{ period_archives T} T{ یک دیکشنری شامل عناصر مربوط به بایگانی‌های دوره‌های زمانی (در صورت فعال بودن). برای جزئیات بیشتر به بخش Listing and Linking to Period Archives مراجعه کنید. T} _ T{ authors T} T{ فهرستی از چندتایی‌های (author, articles)، شامل تمام نویسندگان و مقاله‌های متناظر (مقادیر) T} _ T{ categories T} T{ فهرستی از چندتایی‌های (category, articles)، شامل تمام دسته‌بندی‌ها و مقاله‌های متناظر (مقادیر) T} _ T{ tags T} T{ فهرستی از چندتایی‌های (tag, articles)، شامل تمام برچسب‌ها و مقاله‌های متناظر (مقادیر) T} _ T{ pages T} T{ فهرست برگه‌ها T} _ T{ hidden_pages T} T{ فهرست برگه‌های پنهان‌شده T} _ T{ draft_pages T} T{ فهرست برگه‌های پیش‌نویس T} .TE.SS مرتب‌سازی (Sorting) .sp پوشش‌دهنده‌های URL (در حال حاضر دسته‌ها، برچسب‌ها، و نویسندگان)، دارای متدهای مقایسه‌ای هستند که امکان مرتب‌سازی آسان آن‌ها بر اساس نام را فراهم می‌کنند: .INDENT 0.0 .INDENT 3.5 .sp .EX {% for tag, articles in tags|sort %} .EE .UNINDENT .UNINDENT .sp اگر می‌خواهید بر اساس معیارهای متفاوتی مرتب‌سازی را انجام دهید، دستور sort در Jinja به نشانی \%<https://\:jinja\:.palletsprojects\:.com/\:en/\:latest/\:templates/#\:sort> گزینه‌های متعددی دارد. .SS قالب‌بندی تاریخ (Date Formatting) .sp Pelican تاریخ را مطابق با تنظیمات و محلی‌سازی (locale) شما (\fBDATE_FORMATS\fP/\fBDEFAULT_DATE_FORMAT\fP) قالب‌بندی کرده و یک صفت \fBlocale_date\fP فراهم می‌کند. از طرف دیگر، صفت \fBdate\fP یک شیء datetime \%<https://\:docs\:.python\:.org/\:3/\:library/\:datetime\:.html#\:datetime-objects> خواهد بود. اگر برای یک تاریخ به قالب‌بندی سفارشی متفاوتی با تنظیمات خود نیاز دارید، از پالایهٔ \fBstrftime\fP در Jinja که همراه با Pelican ارائه می‌شود استفاده کنید. نحوهٔ استفاده مانند قالب strftime در Python \%<https://\:docs\:.python\:.org/\:3/\:library/\:datetime\:.html#\:strftime-strptime-behavior> است، اما این پالایه کار درست را انجام داده و تاریخ شما را مطابق با محلی‌سازی مشخص‌شده در تنظیمات قالب‌بندی خواهد کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX {{ article.date|strftime(\(aq%d %B %Y\(aq) }} .EE .UNINDENT .UNINDENT .SS بررسی افزونه‌های بارگذاری‌شده (Checking Loaded Plugins) .sp ‏Pelican یک تست Jinja به نام \fBplugin_enabled\fP برای بررسی فعال بودن یک افزونه مشخص فراهم می‌کند. این تست نام افزونه را به صورت رشته دریافت کرده و یک مقدار بولی (Boolean) بازمی‌گرداند. افزونه‌های فضای نام را می‌توان با نام کامل (\fBpelican.plugins.plugin_name\fP) یا نام کوتاه (\fBplugin_name\fP) مشخص کرد. مثال زیر در صورت فعال بودن افزونهٔ \fBwebassets\fP از آن برای فشرده‌سازی (minify) فایل CSS استفاده می‌کند و در غیر این صورت به CSS معمولی بازمی‌گردد: .INDENT 0.0 .INDENT 3.5 .sp .EX {% if \(dqwebassets\(dq is plugin_enabled %} {% assets filters=\(dqcssmin\(dq, output=\(dqcss/style.min.css\(dq, \(dqcss/style.scss\(dq %} <link rel=\(dqstylesheet\(dq href=\(dq{{SITEURL}}/{{ASSET_URL}}\(dq> {% endassets %} {% else %} <link rel=\(dqstylesheet\(dq href=\(dq{{SITEURL}}/css/style.css}\(dq> {% endif %} .EE .UNINDENT .UNINDENT .SS index.html .sp این صفحهٔ اصلی یا نمایهٔ وبلاگ شما است که در \fBindex.html\fP\& تولید می‌شود. .sp اگر صفحه‌بندی فعال باشد، صفحه‌های بعدی در \fBindex{number}.html\fP\& قرار خواهند گرفت. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ articles_paginator T} T{ یک شیء paginator برای فهرست مقاله‌ها T} _ T{ articles_page T} T{ صفحهٔ جاری مقاله‌ها T} _ T{ articles_previous_page T} T{ صفحهٔ قبلی مقاله‌ها (در صورت عدم وجود صفحه، \fBNone\fP) T} _ T{ articles_next_page T} T{ صفحهٔ بعدی مقاله‌ها (در صورت عدم وجود صفحه، \fBNone\fP) T} _ T{ dates_paginator T} T{ یک شیء paginator برای فهرست مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی. T} _ T{ dates_page T} T{ صفحهٔ جاری مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی. T} _ T{ dates_previous_page T} T{ صفحهٔ قبلی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (در صورت عدم وجود صفحه، \fBNone\fP) T} _ T{ dates_next_page T} T{ صفحهٔ بعدی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (در صورت عدم وجود صفحه، \fBNone\fP) T} _ T{ page_name T} T{ \(aqindex\(aq \-\- مفید برای پیوندهای صفحه‌بندی T} .TE.SS author.html .sp این قالب برای هر یک از نویسندگان موجود پردازش می‌شود و خروجی بر اساس تنظیم \fBAUTHOR_SAVE_AS\fP (\fIپیش‌فرض:\fP \fBauthor/{slug}.html\fP) تولید می‌گردد. اگر صفحه‌بندی فعال باشد، صفحات بعدی به‌طور پیش‌فرض در \fBauthor/{slug}{number}.html\fP قرار خواهند گرفت\&. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ author T} T{ نام نویسنده‌ای که در حال پردازش است T} _ T{ articles T} T{ مقاله‌های این نویسنده T} _ T{ dates T} T{ مقاله‌های این نویسنده، اما مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ articles_paginator T} T{ یک شیء صفحه‌بند برای فهرست مقاله‌ها T} _ T{ articles_page T} T{ صفحه کنونی مقاله‌ها T} _ T{ articles_previous_page T} T{ صفحه قبلی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ articles_next_page T} T{ صفحه بعدی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_paginator T} T{ یک شیء صفحه‌بند برای فهرست مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی. T} _ T{ dates_page T} T{ صفحه کنونی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی. T} _ T{ dates_previous_page T} T{ صفحه قبلی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_next_page T} T{ صفحه بعدی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ page_name T} T{ مقدار AUTHOR_URL که در آن هر چیزی پس از \fI{slug}\fP حذف شده است \-\- مفید برای پیوندهای صفحه‌بندی T} .TE .SS category.html .sp این قالب برای هر یک از دسته‌های موجود پردازش می‌شود و خروجی بر اساس تنظیم \fBCATEGORY_SAVE_AS\fP (\fIپیش‌فرض:\fP \fBcategory/{slug}.html\fP) تولید می‌گردد. اگر صفحه‌بندی فعال باشد، صفحات بعدی به‌طور پیش‌فرض در \fBcategory/{slug}{number}.html\fP قرار خواهند گرفت\&. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ category T} T{ نام دسته‌ای که در حال پردازش است T} _ T{ articles T} T{ مقاله‌های این دسته T} _ T{ dates T} T{ مقاله‌های این دسته، اما مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ articles_paginator T} T{ یک شیء صفحه‌بند برای فهرست مقاله‌ها T} _ T{ articles_page T} T{ صفحه کنونی مقاله‌ها T} _ T{ articles_previous_page T} T{ صفحه قبلی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ articles_next_page T} T{ صفحه بعدی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_paginator T} T{ یک شیء صفحه‌بند برای فهرست مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ dates_page T} T{ صفحه کنونی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ dates_previous_page T} T{ صفحه قبلی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_next_page T} T{ صفحه بعدی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ page_name T} T{ مقدار CATEGORY_URL که در آن هر چیزی پس از \fI{slug}\fP حذف شده است \-\- مفید برای پیوندهای صفحه‌بندی T} .TE.SS article.html .sp این قالب برای هر مقاله پردازش خواهد شد و خروجی بر اساس تنظیم \fBARTICLE_SAVE_AS\fP (\fIپیش‌فرض:\fP \fB{slug}.html\fP) تولید می‌شود. هنگام رندر، متغیرهای زیر در دسترس هستند. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ article T} T{ شیء مقاله‌ای که باید نمایش داده شود T} _ T{ category T} T{ نام دسته‌بندی برای مقالهٔ فعلی T} .TE .sp هر فراداده‌ای که در سرآیند فایل منبع مقاله قرار دهید، به عنوان فیلدهایی در شیء \fBarticle\fP در دسترس خواهد بود. نام فیلد با نام فیلد فراداده یکسان خواهد بود، با این تفاوت که تمام نویسه‌ها به حروف کوچک تبدیل می‌شوند. .sp برای مثال، می‌توانید فیلدی به نام \fIFacebookImage\fP را همانند نمونهٔ زیر به فراداده‌های مقالهٔ خود اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: I love Python more than music Date: 2013\-11\-06 10:06 Tags: personal, python Category: Tech Slug: python\-je\-l\-aime\-a\-mourir Author: Francis Cabrel FacebookImage: http://franciscabrel.com/images/pythonlove.png .EE .UNINDENT .UNINDENT .sp این فرادادهٔ جدید به صورت \fIarticle.facebookimage\fP در قالب \fIarticle.html\fP شما در دسترس خواهد بود. برای مثال، این ویژگی به شما امکان می‌دهد تصویری را برای برچسب‌های open graph فیس‌بوک مشخص کنید که برای هر مقاله تغییر کند: .INDENT 0.0 .INDENT 3.5 .sp .EX <meta property=\(dqog:image\(dq content=\(dq{{ article.facebookimage }}\(dq/> .EE .UNINDENT .UNINDENT .SS page.html .sp این قالب برای هر برگه پردازش خواهد شد و خروجی بر اساس تنظیم \fBPAGE_SAVE_AS\fP (\fIپیش‌فرض:\fP \fBpages/{slug}.html\fP) تولید می‌شود. هنگام رندر، متغیرهای زیر در دسترس هستند. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ page T} T{ شیء برگه‌ای که باید نمایش داده شود. می‌توانید به title، slug و content آن دسترسی داشته باشید. T} .TE .SS tag.html .sp این قالب برای هر برچسب پردازش خواهد شد و خروجی بر اساس تنظیم \fBTAG_SAVE_AS\fP (\fIپیش‌فرض:\fP \fBtag/{slug}.html\fP) تولید می‌شود. اگر صفحه‌بندی فعال باشد، صفحه‌های بعدی به‌طور پیش‌فرض در \fBtag/{slug}{number}.html\fP\& قرار می‌گیرند. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ tag T} T{ نام برچسبی که در حال پردازش است T} _ T{ articles T} T{ مقاله‌های مربوط به این برچسب T} _ T{ dates T} T{ مقاله‌های مربوط به این برچسب، ولی مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ articles_paginator T} T{ یک شیء صفحه‌بندی‌کننده (paginator) برای فهرست مقاله‌ها T} _ T{ articles_page T} T{ صفحهٔ فعلی مقاله‌ها T} _ T{ articles_previous_page T} T{ صفحهٔ قبلی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ articles_next_page T} T{ صفحهٔ بعدی مقاله‌ها (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_paginator T} T{ یک شیء صفحه‌بندی‌کننده برای فهرست مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ dates_page T} T{ صفحهٔ فعلی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی T} _ T{ dates_previous_page T} T{ صفحهٔ قبلی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ dates_next_page T} T{ صفحهٔ بعدی مقاله‌ها، مرتب‌شده بر اساس تاریخ، صعودی (اگر صفحه وجود نداشته باشد، \fBNone\fP) T} _ T{ page_name T} T{ مقدار TAG_URL که همه چیز بعد از \fI{slug}\fP در آن حذف شده است \-\- برای پیوندهای صفحه‌بندی مفید است T} .TE.SS period_archives.html .sp اگر مسیری برای \fBYEAR_ARCHIVE_SAVE_AS\fP تعریف شده باشد، این قالب برای هر سال از پست‌های شما پردازش خواهد شد؛ اگر \fBMONTH_ARCHIVE_SAVE_AS\fP تعریف شده باشد برای هر ماه، و اگر \fBDAY_ARCHIVE_SAVE_AS\fP تعریف شده باشد برای هر روز پردازش می‌شود. .TS box center; l|l. T{ متغیر T} T{ توضیحات T} _ T{ period T} T{ تاپلی به صورت (\fIyear\fP, \fImonth\fP, \fIday\fP) که دوره زمانی جاری را مشخص می‌کند. \fIyear\fP و \fIday\fP عدد هستند در حالی که \fImonth\fP یک رشته است. این تاپل تنها در صورتی شامل \fIyear\fP است که دوره زمانی مربوط به یک سال مشخص باشد. اگر دوره زمانی سال و ماه را در بر بگیرد شامل هر دو \fIyear\fP و \fImonth\fP خواهد بود و به همین ترتیب. T} _ T{ period_num T} T{ تاپلی به صورت (\fByear\fP, \fBmonth\fP, \fBday\fP)، مشابه \fBperiod\fP، با این تفاوت که تمام مقادیر عدد هستند. T} .TE .sp می‌توانید نمونه‌ای از نحوه استفاده از \fIperiod\fP را در قالب period_archives.html از پوسته \(dqsimple\(dq مشاهده کنید: \%<https://\:github\:.com/\:getpelican/\:pelican/\:blob/\:main/\:pelican/\:themes/\:simple/\:templates/\:period_archives\:.html>\&. .SS فهرست‌بندی و پیوند به آرشیوهای دوره‌ای (Listing and Linking to Period Archives) .sp متغیر \fBperiod_archives\fP می‌تواند برای ایجاد فهرستی از پیوندها به مجموعه‌ای از آرشیوهای دوره‌ای که Pelican تولید می‌کند، استفاده شود. به عنوان یک متغیر عمومی، در هر قالبی قابل استفاده است؛ بنابراین می‌توانید چنین نمایه‌ای را در یک قالب مستقیم سفارشی یا در یک نوار کناری که در صفحات مختلف سایت قابل مشاهده است، پیاده‌سازی کنید. .sp \fBperiod_archives\fP یک دیکشنری (dict) است که بسته به فعال بودن هر یک از تنظیمات \fB*_ARCHIVE_SAVE_AS\fP، ممکن است شامل کلیدهای \fByear\fP، \fBmonth\fP و/یا \fBday\fP باشد. مقدار متناظر، فهرستی از دیکشنری‌ها است که هر دیکشنری به نوبه خود نمایانگر یک دوره زمانی (مرتب‌شده بر اساس تنظیمات \fBNEWEST_FIRST_ARCHIVES\fP) با کلیدها و مقادیر زیر است: .TS box center; l|l. T{ کلید T} T{ مقدار T} _ T{ period T} T{ همان تاپلی که در \fBperiod_archives.html\fP شرح داده شده است، مانند \fB(2023, \(aqJune\(aq, 18)\fP\&. T} _ T{ period_num T} T{ همان تاپلی که در \fBperiod_archives.html\fP شرح داده شده است، مانند \fB(2023, 6, 18)\fP\&. T} _ T{ url T} T{ نشانی وب (URL) مربوط به صفحه آرشیو دوره‌ای، مانند \fBposts/2023/06/18/\fP\&. این مقدار توسط تنظیمات متناظر \fB*_ARCHIVE_URL\fP کنترل می‌شود. T} _ T{ save_as T} T{ مسیر محل ذخیره‌سازی فایل صفحه آرشیو دوره‌ای، مانند \fBposts/2023/06/18/index.html\fP\&. این مقدار به صورت داخلی توسط Pelican استفاده می‌شود و معمولاً ارتباطی با پوسته‌ها ندارد. T} _ T{ articles T} T{ فهرستی از اشیاء Article که در این دوره زمانی قرار می‌گیرند. T} _ T{ dates T} T{ همان فهرست \fBarticles\fP، اما مرتب‌شده بر اساس تنظیمات \fBNEWEST_FIRST_ARCHIVES\fP\&. T} .TE .sp در اینجا نمونه‌ای از نحوه استفاده از \fBperiod_archives\fP در یک قالب آورده شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX <ul> {% for archive in period_archives.month %} <li> <a href=\(dq{{ SITEURL }}/{{ archive.url }}\(dq> {{ archive.period | reverse | join(\(aq \(aq) }} ({{ archive.articles|count }}) </a> </li> {% endfor %} </ul> .EE .UNINDENT .UNINDENT .sp می‌توانید بر اساس سطح جزئیات دوره زمانی مورد نظر، \fBperiod_archives.month\fP را در عبارت \fBfor\fP به دلخواه به \fBperiod_archives.year\fP یا \fBperiod_archives.day\fP تغییر دهید..SS اشیاء (Objects) .sp جزئیات ویژگی‌های اشیایی که در قالب‌ها در دسترس و کاربردی هستند را شرح می‌دهد. همهٔ ویژگی‌ها در اینجا فهرست نشده‌اند؛ این بخش مجموعه‌ای گزینش‌شده از ویژگی‌هایی است که برای استفاده در قالب مفید ارزیابی شده‌اند. .SS مقاله (Article) .sp نمایش رشته‌ای یک Article، ویژگی \fIsource_path\fP است. .TS box center; l|l. T{ ویژگی T} T{ توضیحات T} _ T{ author T} T{ نویسندهٔ این مقاله. T} _ T{ authors T} T{ فهرستی از نویسندگان این مقاله. T} _ T{ category T} T{ دسته‌بندی این مقاله. T} _ T{ content T} T{ محتوای رندرشدهٔ مقاله. T} _ T{ date T} T{ شیء Datetime نمایانگر تاریخ مقاله. T} _ T{ date_format T} T{ قالب پیش‌فرض تاریخ یا قالب تاریخ محلی (locale). T} _ T{ default_template T} T{ نام قالب پیش‌فرض. T} _ T{ in_default_lang T} T{ مقدار بولی که نشان می‌دهد آیا مقاله به زبان پیش‌فرض نوشته شده است یا خیر. T} _ T{ lang T} T{ زبان مقاله. T} _ T{ locale_date T} T{ تاریخ قالب‌بندی‌شده توسط \fIdate_format\fP\&. T} _ T{ metadata T} T{ دیکشنری (\fIdict\fP) فراداده‌های سرآیند مقاله. T} _ T{ save_as T} T{ محل ذخیرهٔ صفحهٔ مقاله. T} _ T{ slug T} T{ اسلاگ (slug) صفحه. T} _ T{ source_path T} T{ مسیر کامل سیستمی فایل منبع مقاله. T} _ T{ relative_source_path T} T{ مسیر نسبی از PATH \%<settings\:.html#\:PATH> تا فایل منبع مقاله. T} _ T{ status T} T{ وضعیت مقاله، می‌تواند یکی از مقادیر \(aqpublished\(aq یا \(aqdraft\(aq باشد. T} _ T{ summary T} T{ محتوای چکیدهٔ رندرشده. T} _ T{ tags T} T{ فهرستی از اشیاء Tag. T} _ T{ template T} T{ نام قالب مورد استفاده برای رندر کردن. T} _ T{ title T} T{ عنوان مقاله. T} _ T{ translations T} T{ فهرستی از اشیاء Article ترجمه‌ها. T} _ T{ url T} T{ نشانی URL به صفحهٔ مقاله. T} .TE.SS "نویسنده / دسته‌بندی / برچسب (Author / Category / Tag)" .sp نمایش رشته‌ای این اشیاء، صفت \fIname\fP است. .TS box center; l|l. T{ صفت T} T{ توضیحات T} _ T{ name T} T{ نام این شیء [1]\&. T} _ T{ page_name T} T{ نام صفحهٔ نویسنده. T} _ T{ save_as T} T{ مکان ذخیره‌سازی صفحهٔ نویسنده. T} _ T{ slug T} T{ نامک (Slug) صفحه. T} _ T{ url T} T{ نشانی اینترنتی (URL) صفحهٔ نویسنده. T} .TE .IP [1] 5 برای شیء Author، برگرفته از \fI:authors:\fP یا \fIAUTHOR\fP\&. .SS "صفحه (Page)" .sp نمایش رشته‌ای یک صفحه (Page)، صفت \fIsource_path\fP است. .TS box center; l|l. T{ صفت T} T{ توضیحات T} _ T{ author T} T{ نویسندهٔ (Author) این صفحه. T} _ T{ content T} T{ محتوای رندرشدهٔ صفحه. T} _ T{ date T} T{ شیء Datetime که تاریخ صفحه را نشان می‌دهد. T} _ T{ date_format T} T{ قالب تاریخ پیش‌فرض یا قالب تاریخ محلی (locale). T} _ T{ default_template T} T{ نام قالب پیش‌فرض. T} _ T{ in_default_lang T} T{ مقدار بولی (Boolean) که مشخص می‌کند آیا مقاله به زبان پیش‌فرض نوشته شده است یا خیر. T} _ T{ lang T} T{ زبان مقاله. T} _ T{ locale_date T} T{ تاریخ قالب‌بندی‌شده توسط \fIdate_format\fP\&. T} _ T{ metadata T} T{ دیکشنری (\fIdict\fP) متاداده‌های سرآیند صفحه. T} _ T{ save_as T} T{ مکان ذخیره‌سازی صفحه. T} _ T{ slug T} T{ نامک (Slug) صفحه. T} _ T{ source_path T} T{ مسیر کامل سیستمی فایل منبع صفحه. T} _ T{ relative_source_path T} T{ مسیر نسبی از PATH \%<settings\:.html#\:PATH> به فایل منبع صفحه. T} _ T{ status T} T{ وضعیت صفحه؛ می‌تواند یکی از مقادیر \(aqpublished\(aq، \(aqhidden\(aq یا \(aqdraft\(aq باشد. T} _ T{ summary T} T{ محتوای چکیدهٔ رندرشده. T} _ T{ tags T} T{ فهرستی از اشیاء Tag. T} _ T{ template T} T{ نام قالب مورد استفاده برای رندر کردن. T} _ T{ title T} T{ عنوان صفحه. T} _ T{ translations T} T{ فهرستی از ترجمه‌ها (اشیاء Article). T} _ T{ url T} T{ نشانی اینترنتی (URL) صفحه. T} .TE.SS فیدها (Feeds) .sp متغیرهای فید در نسخهٔ ۳.۰ تغییر کرده‌اند. اکنون در نام هر متغیر به‌طور صریح ATOM یا RSS ذکر شده است. مقدار پیش‌فرض همچنان ATOM است. پوسته‌های قدیمی باید به‌روزرسانی شوند. در ادامه فهرست کاملی از متغیرهای فید آمده است: .INDENT 0.0 .INDENT 3.5 .sp .EX AUTHOR_FEED_ATOM AUTHOR_FEED_RSS CATEGORY_FEED_ATOM CATEGORY_FEED_RSS FEED_ALL_ATOM FEED_ALL_RSS FEED_ATOM FEED_RSS TAG_FEED_ATOM TAG_FEED_RSS TRANSLATION_FEED_ATOM TRANSLATION_FEED_RSS .EE .UNINDENT .UNINDENT .SS توارث (Inheritance) .sp از نسخهٔ ۳.۰، Pelican از توارث از پوستهٔ \fBsimple\fP پشتیبانی می‌کند؛ بنابراین می‌توانید از قالب‌های پوستهٔ \fBsimple\fP در پوسته‌های خود مجدداً استفاده کنید. .sp اگر یکی از فایل‌های اجباری در دایرکتوری \fBtemplates/\fP پوستهٔ شما وجود نداشته باشد، قالب متناظر آن از پوستهٔ \fBsimple\fP جایگزین آن خواهد شد. بنابراین اگر ساختار HTML یک قالب در پوستهٔ \fBsimple\fP برای شما مناسب است، نیازی نیست یک قالب جدید را از ابتدا بنویسید. .sp همچنین می‌توانید با استفاده از دستور \fB{% extends %}\fP مانند مثال زیر، قالب‌های پوستهٔ \fBsimple\fP را در پوسته‌های خود گسترش دهید: .INDENT 0.0 .INDENT 3.5 .sp .EX {% extends \(dq!simple/index.html\(dq %} <!\-\- extends the \(ga\(gaindex.html\(ga\(ga template from the \(ga\(gasimple\(ga\(ga theme \-\-> {% extends \(dqindex.html\(dq %} <!\-\- \(dqregular\(dq extending \-\-> .EE .UNINDENT .UNINDENT .SS مثال (Example) .sp با این ساختار، امکان ایجاد یک پوسته تنها با دو فایل وجود دارد. .SS base.html .sp فایل نخست، قالب \fBtemplates/base.html\fP است: .INDENT 0.0 .INDENT 3.5 .sp .EX {% extends \(dq!simple/base.html\(dq %} {% block head %} {{ super() }} <link rel=\(dqstylesheet\(dq type=\(dqtext/css\(dq href=\(dq{{ SITEURL }}/theme/css/style.css\(dq /> {% endblock %} .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP 1. 3 در خط اول، قالب \fBbase.html\fP را از پوستهٔ \fBsimple\fP گسترش می‌دهیم، بنابراین نیازی به بازنویسی کل فایل نداریم. .IP 2. 3 در خط سوم، بلوک \fBhead\fP را که پیش‌تر در پوستهٔ \fBsimple\fP تعریف شده است باز می‌کنیم. .IP 3. 3 در خط چهارم، تابع \fBsuper()\fP محتوایی را که قبلاً در بلوک \fBhead\fP درج شده بود حفظ می‌کند. .IP 4. 3 در خط پنجم، یک شیوه‌نامه را به صفحه اضافه می‌کنیم. .IP 5. 3 در خط آخر، بلوک \fBhead\fP را می‌بندیم. .UNINDENT .sp این فایل توسط تمام قالب‌های دیگر گسترش خواهد یافت، بنابراین این شیوه‌نامه در تمام صفحات پیوند داده می‌شود. .SS style.css .sp فایل دوم، شیوه‌نامهٔ CSS در مسیر \fBstatic/css/style.css\fP است: .INDENT 0.0 .INDENT 3.5 .sp .EX body { font\-family : monospace ; font\-size : 100% ; background\-color : white ; color : #111 ; width : 80% ; min\-width : 400px ; min\-height : 200px ; padding : 1em ; margin : 5% 10% ; border : thin solid gray ; border\-radius : 5px ; display : block ; } a:link { color : blue ; text\-decoration : none ; } a:hover { color : blue ; text\-decoration : underline ; } a:visited { color : blue ; } h1 a { color : inherit !important } h2 a { color : inherit !important } h3 a { color : inherit !important } h4 a { color : inherit !important } h5 a { color : inherit !important } h6 a { color : inherit !important } pre { margin : 2em 1em 2em 4em ; } #menu li { display : inline ; } #post\-list { margin\-bottom : 1em ; margin\-top : 1em ; } .EE .UNINDENT .UNINDENT.SS بارگیری (Download) .sp می‌توانید این تم نمونه را از \fBاینجا\fP بارگیری کنید\&. .SS pelican\-themes .SS توضیحات (Description) .sp \fBpelican\-themes\fP یک ابزار خط فرمانی برای مدیریت تم‌ها برای Pelican است. برای تنظیمات مربوط به تم‌ها، بخش Themes \%<#\:settings-themes> را ببینید. .SS کاربرد (Usage) .nf pelican\-themes [\-h] [\-l] [\-i theme path [theme path ...]] .in +2 [\-r theme name [theme name ...]] [\-s theme path [theme path ...]] [\-v] [\-\-version] .in -2 .fi .sp .SS آرگومان‌های اختیاری (Optional arguments): .INDENT 0.0 .TP .B \-h\fP,\fB \-\-help نمایش راهنما و خروج .TP .B \-l\fP,\fB \-\-list نمایش تم‌های از قبل نصب‌شده .TP .BI \-i \ theme_path\fR,\fB \ \-\-install \ theme_path یک یا چند تم برای نصب .TP .BI \-r \ theme_name\fR,\fB \ \-\-remove \ theme_name یک یا چند تم برای حذف .TP .BI \-s \ theme_path\fR,\fB \ \-\-symlink \ theme_path مشابه \fB\-\-install\fP، اما به جای رونوشت گرفتن از تم، یک پیوند نمادین ایجاد می‌کند. برای توسعه تم مفید است .TP .B \-v\fP,\fB \-\-verbose خروجی با جزئیات کامل .TP .B \-\-version چاپ نسخه این اسکریپت .UNINDENT .SS مثال‌ها (Examples) .SS فهرست کردن تم‌های نصب‌شده (Listing the installed themes) .sp با \fBpelican\-themes\fP، می‌توانید با استفاده از گزینه \fB\-l\fP یا \fB\-\-list\fP تم‌های موجود را ببینید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-themes \-l notmyidea two\-column@ simple $ pelican\-themes \-\-list notmyidea two\-column@ simple .EE .UNINDENT .UNINDENT .sp در این مثال، مشاهده می‌کنیم که سه تم در دسترس است: \fBnotmyidea\fP، \fBsimple\fP و \fBtwo\-column\fP\&. .sp پس از \fBtwo\-column\fP یک نماد \fB@\fP آمده است، زیرا این تم در مسیر تم‌های Pelican رونوشت نشده، بلکه فقط به آن پیوند داده شده است (برای جزئیات درباره ایجاد پیوندهای نمادین، Creating symbolic links را ببینید). .sp توجه داشته باشید که می‌توانید گزینه \fB\-\-list\fP را با گزینه \fB\-v\fP یا \fB\-\-verbose\fP ترکیب کنید تا خروجی دقیق‌تری دریافت کنید، مانند این: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-themes \-v \-l /usr/local/lib/python2.6/dist\-packages/pelican\-2.6.0\-py2.6.egg/pelican/themes/notmyidea /usr/local/lib/python2.6/dist\-packages/pelican\-2.6.0\-py2.6.egg/pelican/themes/two\-column (symbolic link to \(ga/home/skami/Dev/Python/pelican\-themes/two\-column\(aq) /usr/local/lib/python2.6/dist\-packages/pelican\-2.6.0\-py2.6.egg/pelican/themes/simple .EE .UNINDENT .UNINDENT .SS نصب تم‌ها (Installing themes) .sp می‌توانید با استفاده از گزینه \fB\-i\fP یا \fB\-\-install\fP یک یا چند تم را نصب کنید. این گزینه مسیر(های) تم(هایی) را که می‌خواهید نصب کنید به عنوان آرگومان می‌پذیرد و می‌تواند با گزینه \fB\-\-verbose\fP ترکیب شود: .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-\-install ~/Dev/Python/pelican\-themes/notmyidea\-cms \-\-verbose .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-\-install ~/Dev/Python/pelican\-themes/notmyidea\-cms\e ~/Dev/Python/pelican\-themes/martyalchin \e \-\-verbose .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-vi ~/Dev/Python/pelican\-themes/two\-column .EE .UNINDENT .UNINDENT .SS حذف تم‌ها (Removing themes) .sp دستور \fBpelican\-themes\fP همچنین می‌تواند تم‌ها را از مسیر تم‌های Pelican حذف کند. گزینه \fB\-r\fP یا \fB\-\-remove\fP نام(های) تم(هایی) را که می‌خواهید حذف کنید به عنوان آرگومان می‌گیرد و می‌تواند با گزینه \fB\-\-verbose\fP ترکیب شود. .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-\-remove two\-column .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-r martyachin notmyidea\-cmd \-v .EE .UNINDENT .UNINDENT.SS ساخت پیوندهای نمادین .sp دستور \fBpelican\-themes\fP می‌تواند به جای کپی کردن کل قالب‌ها در مسیر قالب‌های Pelican، آن‌ها را با ایجاد پیوندهای نمادین (symbolic links) نیز نصب کند. .sp برای ایجاد پیوند نمادین یک قالب، می‌توانید از گزینهٔ \fB\-s\fP یا \fB\-\-symlink\fP استفاده کنید که دقیقاً مانند گزینهٔ \fB\-\-install\fP کار می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-\-symlink ~/Dev/Python/pelican\-themes/two\-column .EE .UNINDENT .UNINDENT .sp در این مثال، اکنون قالب \fBtwo\-column\fP به صورت نمادین به مسیر قالب‌های Pelican پیوند داده شده است؛ بنابراین می‌توانیم از آن استفاده کنیم، و در عین حال می‌توانیم بدون نیاز به نصب مجدد پس از هر ویرایش، آن را تغییر دهیم. .sp این قابلیت برای توسعهٔ قالب بسیار کاربردی است: .INDENT 0.0 .INDENT 3.5 .sp .EX $ sudo pelican\-themes \-s ~/Dev/Python/pelican\-themes/two\-column $ pelican ~/Blog/content \-o /tmp/out \-t two\-column $ firefox /tmp/out/index.html $ vim ~/Dev/Pelican/pelican\-themes/two\-column/static/css/main.css $ pelican ~/Blog/content \-o /tmp/out \-t two\-column $ cp /tmp/bg.png ~/Dev/Pelican/pelican\-themes/two\-column/static/img/bg.png $ pelican ~/Blog/content \-o /tmp/out \-t two\-column $ vim ~/Dev/Pelican/pelican\-themes/two\-column/templates/index.html $ pelican ~/Blog/content \-o /tmp/out \-t two\-column .EE .UNINDENT .UNINDENT .SS انجام همزمان چندین عملیات .sp گزینه‌های \fB\-\-install\fP، \fB\-\-remove\fP و \fB\-\-symlink\fP با یکدیگر مانعةالجمع نیستند؛ بنابراین می‌توانید آن‌ها را در یک خط فرمان با هم ترکیب کنید تا همزمان بیش از یک عملیات انجام شود، مانند این: .INDENT 0.0 .INDENT 3.5 .sp .EX # pelican\-themes \-\-remove notmyidea\-cms two\-column \e \-\-install ~/Dev/Python/pelican\-themes/notmyidea\-cms\-fr \e \-\-symlink ~/Dev/Python/pelican\-themes/two\-column \e \-\-verbose .EE .UNINDENT .UNINDENT .sp در این مثال، قالب \fBnotmyidea\-cms\fP با قالب \fBnotmyidea\-cms\-fr\fP جایگزین می‌شود. .SS وارد کردن یک وبگاه موجود .SS توضیحات .sp دستور \fBpelican\-import\fP یک ابزار خط فرمانی برای تبدیل مقاله‌ها از نرم‌افزارهای دیگر به reStructuredText یا Markdown است. قالب‌های پشتیبانی‌شده برای واردسازی عبارتند از: .INDENT 0.0 .IP \(bu 2 خروجی XML از Blogger .IP \(bu 2 خروجی Dotclear .IP \(bu 2 خروجی Medium .IP \(bu 2 رابط برنامه‌نویسی Tumblr API .IP \(bu 2 خروجی XML از WordPress .IP \(bu 2 خوراک RSS/Atom .UNINDENT .sp تبدیل از HTML به reStructuredText یا Markdown به Pandoc \%<https://\:pandoc\:.org>\& متکی است. در Dotclear، اگر پست‌های مبدأ با ساختار Markdown نوشته شده باشند، تبدیل نخواهند شد (زیرا Pelican خود از Markdown پشتیبانی می‌کند). .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 برخلاف Pelican، سیستم مدیریت محتوای Wordpress از چندین دسته‌بندی برای هر مقاله پشتیبانی می‌کند. این دسته‌بندی‌ها به عنوان یک رشتهٔ جداشده با کاما وارد می‌شوند. باید این موارد را به صورت دستی تفکیک کنید، یا از افزونه‌ای مانند More Categories \%<https://\:github\:.com/\:pelican-plugins/\:more-categories> استفاده کنید که دسته‌بندی‌های چندگانه را برای هر مقاله فعال می‌سازد. .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 صفحات واردشده ممکن است حاوی پیوندهایی به تصاویری باشند که همچنان به وبگاه اصلی اشاره دارند. بنابراین شاید بخواهید آن تصاویر را در محتوای محلی خود بارگیری کرده و پیوند آن‌ها را در صفحات مربوطه از وبگاه خود به صورت دستی بازسازی کنید. .UNINDENT .UNINDENT .SS وابستگی‌ها .sp دستور \fBpelican\-import\fP وابستگی‌هایی دارد که برای سایر بخش‌های Pelican الزامی نیستند: .INDENT 0.0 .IP \(bu 2 بسته‌های \fIBeautifulSoup4\fP و \fIlxml\fP، برای وارد کردن از WordPress و Dotclear. می‌توان آن‌ها را مانند سایر بسته‌های پایتون نصب کرد (\fBpip install BeautifulSoup4 lxml\fP). .IP \(bu 2 بستهٔ \fIFeedparser\fP، برای وارد کردن خوراک (\fBpip install feedparser\fP). .IP \(bu 2 ابزار \fIPandoc\fP، برای راهنمای نصب روی سیستم‌عامل خود به وبگاه Pandoc \%<https://\:pandoc\:.org/\:installing\:.html> مراجعه کنید. .UNINDENT .SS نحوه استفاده .INDENT 0.0 .INDENT 3.5 .sp .EX pelican\-import [\-h] [\-\-blogger] [\-\-dotclear] [\-\-tumblr] [\-\-wpfile] [\-\-feed] [\-o OUTPUT] [\-m MARKUP] [\-\-dir\-cat] [\-\-dir\-page] [\-\-strip\-raw] [\-\-wp\-custpost] [\-\-wp\-attach] [\-\-disable\-slugs] [\-b BLOGNAME] input|api_key .EE .UNINDENT .UNINDENT.SS "آرگومان‌های موضعی (Positional arguments)" .INDENT 0.0 .INDENT 3.5 .TS box center; l|l. T{ \fBinput\fP T} T{ فایل ورودی برای خواندن T} _ T{ \fBapi_key\fP T} T{ (فقط در Tumblr) کلید api_key را می‌توان از \%<https://\:www\:.tumblr\:.com/\:oauth/\:apps> دریافت کرد T} .TE .UNINDENT .UNINDENT .SS "گزینه‌های اختیاری (Optional arguments)" .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .TP .B \-h\fP,\fB \-\-help نمایش این پیام راهنما و خروج .TP .B \-\-blogger برون‌بری XML از Blogger (پیش‌فرض: False) .TP .B \-\-dotclear برون‌بری Dotclear (پیش‌فرض: False) .TP .B \-\-medium برون‌بری Medium (پیش‌فرض: False) .TP .B \-\-tumblr رابط برنامه‌نویسی Tumblr API (پیش‌فرض: False) .TP .B \-\-wpfile برون‌بری XML از WordPress (پیش‌فرض: False) .TP .B \-\-feed خوراک (feed) برای تجزیه (پیش‌فرض: False) .TP .BI \-o \ OUTPUT\fR,\fB \ \-\-output \ OUTPUT مسیر خروجی (پیش‌فرض: content) .TP .BI \-m \ MARKUP\fR,\fB \ \-\-markup \ MARKUP قالب نشانه‌گذاری خروجی: \fBrst\fP، \fBmarkdown\fP یا \fBasciidoc\fP (پیش‌فرض: \fBrst\fP) .TP .B \-\-dir\-cat قرار دادن فایل‌ها در دایرکتوری‌هایی با نام دسته‌بندی‌ها (پیش‌فرض: False) .TP .B \-\-dir\-page قرار دادن فایل‌های شناخته‌شده به‌عنوان برگه در زیردایرکتوری \(dqpages/\(dq (فقط در درون‌ریزی blogger و wordpress) (پیش‌فرض: False) .TP .B \-\-filter\-author درون‌ریزی فقط پست‌های متعلق به نویسندهٔ مشخص‌شده .TP .B \-\-strip\-raw حذف کدهای خام HTML که امکان تبدیل آن‌ها به نشانه‌گذاری وجود ندارد، مانند فلش‌های جاسازی‌شده یا iframeها (پیش‌فرض: False) .TP .B \-\-wp\-custpost قرار دادن انواع پست سفارشی وردپرس در دایرکتوری‌ها. اگر همراه با گزینهٔ \-\-dir\-cat استفاده شود، دایرکتوری‌ها به‌صورت \(dq/post_type/category/\(dq ایجاد خواهند شد (فقط در درون‌ریزی wordpress) .TP .B \-\-wp\-attach دانلود فایل‌های بارگذاری‌شده در وردپرس به‌عنوان پیوست. فایل‌ها به‌صورت یک فهرست در سرآیند پست اضافه شده و پیوندهای درون پست به فایل‌ها به‌روزرسانی خواهند شد. تمام فایل‌ها دانلود خواهند شد، حتی اگر به پستی وابسته نباشند. فایل‌ها با مسیر اصلی‌شان درون دایرکتوری خروجی دانلود می‌شوند، مانند \(dqoutput/wp\-uploads/date/postname/file.jpg\(dq. (فقط در درون‌ریزی wordpress) (نیازمند اتصال اینترنت) .TP .B \-\-disable\-slugs غیرفعال کردن ذخیرهٔ نامک‌ها (slugs) از پست‌های درون‌ریزی‌شده در خروجی. با غیرفعال بودن این گزینه، ممکن است نشانی‌های اینترنتی Pelican با پست‌های اصلی شما سازگار نباشند. (پیش‌فرض: False) .TP .BI \-b \ BLOGNAME\fR,\fB \ \-\-blogname\fB= BLOGNAME نام وبلاگ مورد استفاده در Tumblr API .UNINDENT .UNINDENT .UNINDENT .SS "مثال‌ها (Examples)" .sp برای Blogger: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-import \-\-blogger \-o ~/output ~/posts.xml .EE .UNINDENT .UNINDENT .sp برای Dotclear: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-import \-\-dotclear \-o ~/output ~/backup.txt .EE .UNINDENT .UNINDENT .sp برای Medium: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-import \-\-medium \-o ~/output ~/medium\-export/posts/ .EE .UNINDENT .UNINDENT .sp برون‌بری Medium یک فایل zip است. آن را از حالت فشرده خارج کرده و این ابزار را به زیردایرکتوری \(dqposts\(dq هدایت کنید. برای کسب اطلاعات بیشتر دربارهٔ نحوهٔ برون‌بری، ببینید: \%<https://\:help\:.medium\:.com/\:hc/\:en-us/\:articles/\:115004745787-Export-your-account-data>\&. .sp برای Tumblr: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-import \-\-tumblr \-o ~/output \-\-blogname=<blogname> <api_key> .EE .UNINDENT .UNINDENT .sp برای WordPress: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican\-import \-\-wpfile \-o ~/output ~/posts.xml .EE .UNINDENT .UNINDENT .sp برای Medium (یک مثال از استفاده از خوراک RSS): .INDENT 0.0 .INDENT 3.5 $ python \-m pip install feedparser $ pelican\-import \-\-feed \%<https://\:medium\:.com/\:feed/@\:username> .UNINDENT .UNINDENT .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 خوراک RSS ممکن است فقط تازه‌ترین پست‌ها را بازگرداند — نه همهٔ آن‌ها را. .UNINDENT .UNINDENT.SS آزمون‌ها (Tests) .sp برای آزمودن این ماژول، می‌توان از فایل‌های نمونه استفاده کرد: .INDENT 0.0 .IP \(bu 2 برای WordPress: \%<https://\:www\:.wpbeginner\:.com/\:wp-themes/\:how-to-add-dummy-content-for-theme-development-in-wordpress> .IP \(bu 2 برای Dotclear: \%<http://\:media\:.dotaddict\:.org/\:tda/\:downloads/\:lorem-backup\:.txt> .UNINDENT .SS پرسش‌های متداول (FAQ) .sp در اینجا برخی از پرسش‌های متداول پیرامون Pelican آورده شده است. .SS بهترین راه برای مطرح کردن یک مشکل، پرسش یا پیشنهاد چیست؟ .sp لطفاً شیوه‌نامه‌های بازخورد ما را در \%<>\& مطالعه کنید. .SS چگونه می‌توانم کمک کنم؟ .sp راه‌های متعددی برای کمک کردن وجود دارد. نخست، می‌توانید هرگونه پیشنهاد یا مشکل مربوط به Pelican را از طریق گفتگوهای Pelican در \%<https://\:github\:.com/\:getpelican/\:pelican/\:discussions>\& مطرح کنید. لطفاً ابتدا فهرست گفتگوها و مشکلات (هم باز و هم بسته) موجود را بررسی کنید تا از ارسال موضوعاتی که پیش‌تر پوشش داده شده‌اند، خودداری شود. .sp اگر قصد مشارکت دارید، لطفاً مخزن Git به نشانی \%<https://\:github\:.com/\:getpelican/\:pelican> را فورک کنید، یک شاخه ویژگی جدید بسازید، تغییرات خود را اعمال کرده و یک pull request ارسال کنید. در اسرع وقت تغییرات شما بازبینی خواهد شد. لطفاً برای جزئیات بیشتر به بخش نحوه مشارکت \%<> مراجعه کنید. .sp همچنین می‌توانید با ساخت پوسته‌ها و بهبود مستندات مشارکت داشته باشید. .SS آیا فایل تنظیمات Pelican اجباری است؟ .sp فایل‌های پیکربندی اختیاری هستند و صرفاً راهی ساده برای پیکربندی Pelican به شمار می‌روند. برای عملیات پایه، امکان تعیین گزینه‌ها هنگام فراخوانی Pelican از طریق خط فرمان وجود دارد. برای اطلاعات بیشتر \fBpelican \-\-help\fP را ببینید. .SS تغییرات در فایل تنظیمات اعمال نمی‌شوند .sp هنگام آزمایش تنظیمات مختلف (به‌ویژه تنظیمات مربوط به متادیتا)، کش (caching) ممکن است تداخل ایجاد کند و تغییرات قابل مشاهده نباشند. در چنین مواردی، مطمئن شوید که کش از طریق \fBLOAD_CONTENT_CACHE = False\fP غیرفعال شده است یا از سوییچ خط فرمان \fB\-\-ignore\-cache\fP استفاده کنید. .SS در حال ساخت پوسته خود هستم؛ چگونه از Pygments برای برجسته‌سازی نحو استفاده کنم؟ .sp ابزار Pygments تعدادی کلاس به محتوای تولیدشده اضافه می‌کند. این کلاس‌ها توسط پوسته‌ها برای استایل‌دهی به برجسته‌سازی نحو کد از طریق CSS استفاده می‌شوند. به‌طور مشخص، می‌توانید ظاهر برجسته‌سازی نحو خود را از طریق کلاس \fB\&.highlight pre\fP در فایل CSS پوسته سفارشی‌سازی کنید. برای نمونه، جهت مشاهده چگونگی استفاده از سبک‌های گوناگون برای رندر کردن کد Django، از منوی کشویی انتخاب سبک در بالا سمت راست در سایت پیش‌نمایش پروژه Pygments به نشانی \%<https://\:pygments\:.org/\:demo>\& استفاده کنید. .sp می‌توانید از دستورهای نمونه زیر برای تولید یک فایل CSS اولیه از یکی از سبک‌های داخلی Pygments (در این مورد، \(dqmonokai\(dq) استفاده کرده و سپس فایل CSS تولیدشده را در پوسته جدید خود کپی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pygmentize \-S monokai \-f html \-a .highlight > pygment.css cp pygment.css path/to/theme/static/css/ .EE .UNINDENT .UNINDENT .sp فراموش نکنید که فایل \fBpygment.css\fP خود را در فایل CSS اصلی‌تان import کنید. .SS چگونه پوسته خودم را بسازم؟ .sp لطفاً به بخش پوسته‌ها \%<#\:theming-pelican>\& مراجعه کنید. .SS آیا می‌توانم بدون فورک کردن کل پوسته، قالب‌های تکی را بازنویسی کنم؟ .sp بله، می‌توانید قالب‌های موجود در پوسته‌ای را که استفاده می‌کنید بازنویسی کرده یا قالب‌های جدیدی را از طریق متغیر \fBTHEME_TEMPLATES_OVERRIDES\fP بیفزایید. برای نمونه، جهت بازنویسی قالب برگه (page)، می‌توانید مکان قالب‌های خود را به این صورت تعریف کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX THEME_TEMPLATES_OVERRIDES = [\(dqtemplates\(dq] .EE .UNINDENT .UNINDENT .sp سپس می‌توانید یک قالب سفارشی در \fBtemplates/page.html\fP تعریف کنید. برای جزئیات، بخش پوسته‌ها \%<#\:settings-themes> را ببینید. .SS می‌خواهم از Markdown استفاده کنم، اما با خطا مواجه شدم. .sp اگر بدون نصب کتابخانه Markdown سعی در تولید محتوای Markdown داشته باشید، ممکن است پیامی با مضمون \fBNo valid files found in content\fP دریافت کنید. کتابخانه Markdown یک وابستگی اجباری برای Pelican نیست، بنابراین اگر محتوایی در قالب Markdown دارید، باید کتابخانه Markdown را به‌طور صریح نصب کنید. می‌توانید این کار را با وارد کردن دستور زیر انجام دهید (در صورت نیاز به دسترسی‌ها، \fBsudo\fP را در ابتدای آن قرار دهید): .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install markdown .EE .UNINDENT .UNINDENT .SS آیا می‌توانم از متادیتای دلخواه در قالب‌های خود استفاده کنم؟ .sp بله. برای نمونه، جهت گنجاندن تاریخ ویرایش در یک نوشته Markdown، می‌توان مورد زیر را در ابتدای مقاله قرار داد: .INDENT 0.0 .INDENT 3.5 .sp .EX Modified: 2012\-08\-08 .EE .UNINDENT .UNINDENT .sp برای reStructuredText، این متادیتا مسلماً باید با یک دونقطه (colon) آغاز شود: .INDENT 0.0 .INDENT 3.5 .sp .EX :Modified: 2012\-08\-08 .EE .UNINDENT .UNINDENT .sp سپس می‌توان در قالب‌هایی مانند \fBarticle.html\fP از طریق زیر به این متادیتا دسترسی پیدا کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX {% if article.modified %} Last modified: {{ article.modified }} {% endif %} .EE .UNINDENT .UNINDENT .sp اگر می‌خواهید متادیتا را در قالب‌های خارج از زمینه مقاله (مانند \fBbase.html\fP) بگنجانید، عبارت شرطی \fBif\fP باید در عوض به صورت زیر باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX {% if article and article.modified %} .EE .UNINDENT .UNINDENT.SS چگونه ساختار پوشه خروجی را با سلسله‌مراتب محتوای خود یکسان کنم؟ .sp این تنظیمات را امتحان کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX USE_FOLDER_AS_CATEGORY = False PATH_METADATA = \(dq(?P<path_no_ext>.*)\e..*\(dq ARTICLE_URL = ARTICLE_SAVE_AS = PAGE_URL = PAGE_SAVE_AS = \(dq{path_no_ext}.html\(dq .EE .UNINDENT .UNINDENT .SS چگونه قالب‌های سفارشی را به ازای هر برگه اختصاص دهم؟ .sp این کار به سادگی افزودن یک خط متادیتا به هر برگه یا مقاله‌ای است که می‌خواهید قالب مخصوص به خود را داشته باشد. برای مثال، نحوه انجام این کار برای محتوا در قالب reST به این صورت است: .INDENT 0.0 .INDENT 3.5 .sp .EX :template: template_name .EE .UNINDENT .UNINDENT .sp برای محتوا در قالب Markdown: .INDENT 0.0 .INDENT 3.5 .sp .EX Template: template_name .EE .UNINDENT .UNINDENT .sp سپس کافی است مطمئن شوید پوسته (theme) شما حاوی فایل قالب مربوطه باشد (مانند \fBtemplate_name.html\fP). اگر صرفاً می‌خواهید یک قالب سفارشی جدید را به یک پوسته موجود اضافه کنید، می‌توانید آن را در پوشه‌ای که توسط \fBTHEME_TEMPLATES_OVERRIDES\fP مشخص شده قرار دهید (به بخش پوسته‌ها \%<#\:settings-themes> مراجعه کنید). .SS چگونه می‌توانم نشانی URL تولیدشده یک برگه یا مقاله خاص را بازنویسی کنم؟ .sp متادیتای \fBurl\fP و \fBsave_as\fP را در هر برگه یا مقاله‌ای که می‌خواهید URL تولیدشده آن را بازنویسی کنید، قرار دهید. در اینجا نمونه‌ای از یک برگه در قالب reST آمده است: .INDENT 0.0 .INDENT 3.5 .sp .EX Override url/save_as page ######################### :url: override/url/ :save_as: override/url/index.html .EE .UNINDENT .UNINDENT .sp با این متادیتا، برگه در مسیر \fBoverride/url/index.html\fP نوشته خواهد شد و Pelican از نشانی \fBoverride/url/\fP برای پیوند به این برگه استفاده خواهد کرد. .SS چگونه می‌توانم از یک برگه ایستا به عنوان صفحه اصلی استفاده کنم؟ .sp از قابلیت بازنویسی (override) ذکرشده در بالا می‌توان برای تعیین یک برگه ایستا به عنوان صفحه اصلی استفاده کرد. نمونه Markdown زیر می‌تواند در \fBcontent/pages/home.md\fP ذخیره شود: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: Welcome to My Site URL: save_as: index.html Thank you for visiting. Welcome! .EE .UNINDENT .UNINDENT .sp اگر همچنان به صفحه اصلی وبلاگ (blog index) نیاز است، می‌توان با تنظیم \fBINDEX_SAVE_AS = \(aqblog_index.html\(aq\fP برای قالب مستقیم \fB\(aqindex\(aq\fP، آن را در مکان دیگری ذخیره کرد. .SS چگونه می‌توانم تولید خوراک (feed) را غیرفعال کنم؟ .sp برای غیرفعال کردن تولید خوراک، تمام تنظیمات خوراک باید بر روی \fBNone\fP تنظیم شوند. به جز سه مورد، مقدار پیش‌فرض تمام تنظیمات خوراک از قبل \fBNone\fP است؛ بنابراین اگر می‌خواهید تولید تمام خوراک‌ها را غیرفعال کنید، تنها کافی است تنظیمات زیر را مشخص کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX FEED_ALL_ATOM = None CATEGORY_FEED_ATOM = None TRANSLATION_FEED_ATOM = None AUTHOR_FEED_ATOM = None AUTHOR_FEED_RSS = None .EE .UNINDENT .UNINDENT .sp کلمه \fBNone\fP نباید داخل علامت نقل‌قول قرار گیرد. لطفاً توجه داشته باشید که \fBNone\fP و \fB\(aq\(aq\fP یکسان نیستند. .SS هشداری درباره تولید خوراک‌ها بدون تنظیم صحیح SITEURL دریافت می‌کنم .sp خوراک‌های RSS و Atom نیازمند آن هستند که تمام پیوند‌های URL مطلق باشند \%<https://\:validator\:.w3\:.org/\:feed/\:docs/\:rss2\:.html#\:comments>\&. برای تولید صحیح پیوندها در Pelican، باید \fBSITEURL\fP را روی مسیر کامل سایت خود تنظیم کنید. .sp هنگام نمایش این هشدار خوراک‌ها همچنان تولید می‌شوند، اما ممکن است پیوندهای درون آن‌ها ناقص یا معیوب باشند و بنابراین خوراک معتبر شناخته نشود. .SS آیا می‌توانم خوراک‌های Atom را مجبور به نمایش خلاصه به جای متن کامل مقاله کنم؟ .sp اکثریت قاطع افرادی که از خوراک‌خوان‌ها استفاده می‌کنند، ترجیح می‌دهند محتوا را در خود برنامه‌خوان مطالعه کنند تا این‌که مجبور باشند پنجره جداگانه‌ای را در مرورگر باز کنند. عمدتاً به همین دلیل، Pelican از محدود کردن خوراک‌های Atom به خلاصه‌ها پشتیبانی نمی‌کند. برخلاف خوراک‌های Atom، مشخصات فنی خوراک RSS فیلد جداگانه‌ای به نام \fBcontent\fP ندارد، بنابراین Pelican به‌طور پیش‌فرض خوراک‌های RSS را تنها با خلاصه منتشر می‌کند (اما می‌توان آن را به صورت اختیاری برای انتشار محتوای کامل در خوراک‌های RSS نیز تنظیم کرد). در نتیجه، رفتار پیش‌فرض تولید خوراک برای کاربران یک حق انتخاب فراهم می‌کند: عضویت در خوراک‌های Atom برای دسترسی به محتوای کامل یا خوراک‌های RSS تنها برای دریافت خلاصه‌ها. .SS آیا Pelican فقط برای وبلاگ‌ها مناسب است؟ .sp خیر. Pelican را می‌توان به راحتی برای ایجاد و نگهداری هر نوع وب‌سایت ایستایی پیکربندی کرد. این کار ممکن است نیازمند کمی سفارشی‌سازی پوسته و پیکربندی Pelican شما باشد. به عنوان مثال، اگر در حال ساخت وب‌سایت معرفی محصول هستید و نیازی به برچسب‌ها در سایت خود ندارید، می‌توانید کدهای HTML مربوطه را از پوسته حذف کنید. همچنین می‌توانید تولید برگه‌های مربوط به برچسب‌ها را از این طریق غیرفعال کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX TAGS_SAVE_AS = \(aq\(aq TAG_SAVE_AS = \(aq\(aq .EE .UNINDENT .UNINDENT.SS چرا Pelican با وجود فعال بودن کش محتوا، همیشه تمام فایل‌های HTML را بازنویسی می‌کند؟ .sp برای تشخیص مطمئن این‌که آیا خروجی HTML قبل از بازنویسی تغییر کرده است یا خیر، باید بخش بزرگی از محیط تولید شامل زمینه‌های قالب (template contexts)، افزونه‌های وارد شده و غیره ذخیره و مقایسه شوند؛ دست‌کم در قالب یک هش (hash) که این امر خود نیازمند مدیریت ویژهٔ انواع داده‌های غیرقابل هش خواهد بود، زیرا ترکیبات احتمالی بی‌شماری از افزونه‌ها، صفحه‌بندی‌ها و غیره وجود دارند که ممکن است به روش‌های گوناگونی تغییر کنند. این فرایند به زمان پردازش، حافظه و فضای ذخیره‌سازی بسیار بیشتری نیاز خواهد داشت. صرفاً نوشتن هر بارهٔ فایل‌ها بسیار سریع‌تر و بسیار قابل‌اطمینان‌تر است. .sp با این حال، این بدان معناست که زمان ویرایش فایل‌ها هر بار تغییر می‌کند، بنابراین بارگذاری مبتنی بر \fBrsync\fP حتی در صورتی که محتوای فایل‌ها تغییری نکرده باشد، آن‌ها را انتقال خواهد داد. یک راه‌حل ساده استفاده از گزینهٔ \fB\-\-checksum\fP در دستور \fBrsync\fP است که موجب می‌شود چک‌سام‌های فایل‌ها به شیوه‌ای بسیار سریع‌تر از آنچه Pelican انجام می‌داد، مقایسه شوند. .SS چگونه تنها زیرمجموعه‌ای از تمام مقاله‌ها را پردازش کنیم؟ .sp اغلب برای اهداف اشکال‌زدایی مفید است که مثلاً تنها ۱۰ مقاله پردازش شوند. این کار را می‌توان با مشخص کردن صریح نام فایل‌های آن مقاله‌ها در \fBARTICLE_PATHS\fP انجام داد. فهرستی از چنین نام فایل‌هایی را می‌توان با دستوری مشابه \fBcd content; find \-name \(aq*.md\(aq | head \-n 10\fP به دست آورد. .SS ابر برچسب‌های من پس از ارتقای Pelican ناپدید/خراب شده است .sp در راستای تلاش مداوم برای بهینه‌سازی و ساده‌سازی Pelican، تولید ابر برچسب‌ها (tag cloud) از هستهٔ Pelican خارج شده و به یک افزونهٔ جداگانه \%<https://\:github\:.com/\:pelican-plugins/\:tag-cloud>\& منتقل شده است. برای اطلاعات بیشتر دربارهٔ سامانهٔ افزونه‌های Pelican، مستندات Plugins \%<#\:plugins> را مشاهده کنید. .SS از زمان ارتقای Pelican برگه‌های من دیگر رندر نمی‌شوند .sp برگه‌ها (Pages) در پوسته‌ها هم به صورت حروف کوچک \fBpages\fP و هم با حروف بزرگ \fBPAGES\fP در دسترس بودند. برای هماهنگی با بخش Templates and Variables \%<#\:templates-variables>، متغیر \fBPAGES\fP حذف شده است. این مشکل با به‌روزرسانی پوسته جهت پیمایش روی \fBpages\fP به جای \fBPAGES\fP به‌سرعت حل می‌شود. کافی است: .INDENT 0.0 .INDENT 3.5 .sp .EX {% for pg in PAGES %} .EE .UNINDENT .UNINDENT .sp را با چیزی شبیه به این جایگزین کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX {% for pg in pages %} .EE .UNINDENT .UNINDENT .SS چگونه می‌توان از تلاش Pelican برای تجزیهٔ فایل‌های ایستا به عنوان محتوا جلوگیری کرد؟ .sp تولیدکننده‌های مقاله‌ها و برگه‌های Pelican پیش از تولیدکنندهٔ فایل‌های ایستای آن اجرا می‌شوند. این بدان معناست که اگر تنظیمی مشابه با پیکربندی پیش‌فرض داشته باشید، که در آن یک پوشهٔ منبع ایستا درون یک تنظیم \fB*_PATHS\fP تعریف شده باشد، تمامی فایل‌هایی که پسوند فایل محتوایی معتبر دارند (\fB\&.html\fP، \fB\&.rst\fP، \fB\&.md\fP و ...) قبل از آنکه به عنوان فایل ایستا در نظر گرفته شوند، به عنوان مقاله یا برگه پردازش خواهند شد. .sp برای دور زدن این مشکل، یا از تنظیم مناسب \fB*_EXCLUDES\fP استفاده کنید یا خوانندهٔ مربوطه (reader) را در صورتی که نیازی به آن ندارید، از طریق \fBREADERS\fP غیرفعال نمایید. .SS چرا [نحو دلخواه Markdown] پشتیبانی نمی‌شود؟ .sp پردازش Markdown مستقیماً توسط Pelican انجام نمی‌شود و در عوض این کار به پروژهٔ Python\-Markdown \%<https://\:github\:.com/\:Python-Markdown/\:markdown> واگذار شده است که هستهٔ آن عمداً از قواعد نحو اولیهٔ Markdown پیروی می‌کند و نه از انبوه «طعم‌ها» (\(dqflavors\(dq)ی Markdown که پس از آن گسترش یافته‌اند. با این حال، پروژهٔ Python\-Markdown \%<https://\:github\:.com/\:Python-Markdown/\:markdown> کاملاً پیمانه‌ای است و نحو مورد نظر شما ممکن است توسط یکی از افزونه‌های متعدد Markdown Extensions \%<https://\:python-markdown\:.github\:.io/\:extensions>\& ارائه شده باشد. از سوی دیگر، برخی کاربران افزونه‌هایی برای Pelican ایجاد کرده‌اند که از نگارش‌های مختلف Markdown پشتیبانی می‌کنند؛ بنابراین اگر می‌خواهید هنگام نوشتن محتوای خود از نگارش خاصی استفاده کنید، ممکن است این افزونه‌ها بهترین گزینه باشند. .SS نکات .sp در اینجا چند نکتهٔ کاربردی دربارهٔ Pelican آورده شده است. .SS صفحه‌های ۴۰۴ سفارشی .sp هنگامی که یک مرورگر منبعی را درخواست می‌کند که وب‌سرور قادر به یافتن آن نیست، وب‌سرور معمولاً یک صفحهٔ خطای پیش‌فرض «پرونده یافت نشد» (404) را نمایش می‌دهد که اغلب ساده و نازیبا است. یکی از راه‌های ارائهٔ یک صفحهٔ خطا که با پوستهٔ سایت شما همخوانی داشته باشد، ایجاد یک برگهٔ ۴۰۴ سفارشی (\fIنه\fP یک مقاله) است؛ مانند این نمونه با فرمت Markdown که در \fBcontent/pages/404.md\fP ذخیره شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX Title: Not Found Status: hidden Save_as: 404.html The requested item could not be located. Perhaps you might want to check the [Archives](/archives.html)? .EE .UNINDENT .UNINDENT .sp گام بعدی، پیکربندی وب‌سرور جهت نمایش این برگهٔ سفارشی به جای صفحهٔ ۴۰۴ پیش‌فرض آن است. برای Nginx، عبارت زیر را به بلوک \fBlocation\fP در فایل پیکربندی خود بیفزایید: .INDENT 0.0 .INDENT 3.5 .sp .EX error_page 404 /404.html; .EE .UNINDENT .UNINDENT .sp برای Apache: .INDENT 0.0 .INDENT 3.5 .sp .EX ErrorDocument 404 /404.html .EE .UNINDENT .UNINDENT .sp برای Amazon S3، ابتدا در کنسول AWS به منوی \fBStatic Site Hosting\fP در تنظیمات باکت بروید. از آنجا: .INDENT 0.0 .INDENT 3.5 .sp .EX Error Document: 404.html .EE .UNINDENT .UNINDENT.SS انتشار در GitHub Pages .sp اگر از GitHub \%<https://\:github\:.com> برای وب‌سایت Pelican خود استفاده می‌کنید، می‌توانید وب‌سایتتان را به‌صورت رایگان در GitHub Pages \%<https://\:pages\:.github\:.com> منتشر کنید. اگر وب‌سایت شما یک سایت کاربری یا سازمانی باشد در \fBhttps://<username>.github.io\fP و اگر یک سایت پروژه باشد در \fBhttps://<username>.github.io/<repository>\fP منتشر خواهد شد. همچنین استفاده از دامنه سفارشی با GitHub Pages \%<https://\:docs\:.github\:.com/\:en/\:pages/\:configuring-a-custom-domain-for-your-github-pages-site>\& امکان‌پذیر است. .sp دو روش برای انتشار یک وب‌سایت در GitHub Pages وجود دارد \%<https://\:docs\:.github\:.com/\:en/\:pages/\:getting-started-with-github-pages/\:configuring-a-publishing-source-for-your-github-pages-site>: .INDENT 0.0 .IP 1. 3 \fBانتشار از یک شاخه:\fP دستور \fBpelican\fP را به‌صورت محلی اجرا کرده و دایرکتوری خروجی را به یک شاخه خاص از مخزن GitHub خود push کنید. سپس GitHub محتویات این شاخه را در وب‌سایت GitHub Pages شما منتشر خواهد کرد. .IP 2. 3 \fBانتشار با یک جریان کاری سفارشی GitHub Actions:\fP کافی است فایل‌های منبع وب‌سایت Pelican خود را به شاخه پیش‌فرض مخزن GitHub خود push کرده و از یک جریان کاری (workflow) سفارشی GitHub Actions بخواهید که \fBpelican\fP را برای شما اجرا کند تا دایرکتوری خروجی تولید و در وب‌سایت GitHub Pages منتشر شود. به این ترتیب نیازی به اجرای محلی \fBpelican\fP نخواهید داشت. حتی می‌توانید فایل‌های منبع وب‌سایت خود را با استفاده از رابط وب GitHub ویرایش کنید و هر تغییری که commit کنید منتشر خواهد شد. .UNINDENT .SS انتشار یک وب‌سایت پروژه در GitHub Pages از یک شاخه .sp برای انتشار یک وب‌سایت Pelican به‌صورت یک صفحه پروژه (Project Page)، باید محتوای دایرکتوری \fBoutput\fP تولیدشده توسط Pelican را به شاخه \fBgh\-pages\fP یک مخزن در GitHub دستور \fIpush\fP کنید. .sp ابزار عالی ghp\-import \%<https://\:github\:.com/\:davisp/\:ghp-import> که با \fBpip\fP قابل نصب است، این فرایند را بسیار آسان می‌کند. .sp به‌عنوان مثال، اگر منبع وب‌سایت Pelican شما در یک مخزن GitHub قرار دارد، و می‌خواهید آن وب‌سایت Pelican را در قالب Project Pages در این مخزن منتشر کنید، می‌توانید از دستورهای زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican content \-o output \-s pelicanconf.py $ ghp\-import output \-b gh\-pages $ git push origin gh\-pages .EE .UNINDENT .UNINDENT .sp دستور \fBghp\-import output\fP شاخه محلی \fBgh\-pages\fP را با محتوای دایرکتوری \fBoutput\fP به‌روزرسانی می‌کند (در صورتی که شاخه از قبل وجود نداشته باشد، آن را ایجاد می‌کند). دستور \fBgit push origin gh\-pages\fP شاخه دوردست \fBgh\-pages\fP را به‌روز کرده و عملاً وب‌سایت Pelican را منتشر می‌سازد. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 تارگت \fBgithub\fP در Makefile (و وظیفه \fBgh_pages\fP در \fBtasks.py\fP) ایجادشده توسط دستور \fBpelican\-quickstart\fP، وب‌سایت Pelican را طبق آنچه در بالا شرح داده شد به‌صورت Project Pages منتشر می‌کند. .UNINDENT .UNINDENT .SS انتشار یک وب‌سایت کاربری در GitHub Pages از یک شاخه .sp برای انتشار یک وب‌سایت Pelican در قالب صفحات کاربری (User Pages)، باید محتوای دایرکتوری \fBoutput\fP تولیدشده توسط Pelican را به شاخه \fBmain\fP مخزن \fB<username>.github.io\fP خود در GitHub ارسال (\fIpush\fP) کنید. .sp بار دیگر، می‌توانید از ابزار \fBghp\-import\fP بهره ببرید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican content \-o output \-s pelicanconf.py $ ghp\-import output \-b gh\-pages $ git push git@github.com:elemoine/elemoine.github.io.git gh\-pages:main .EE .UNINDENT .UNINDENT .sp دستور \fBgit push\fP شاخه محلی \fBgh\-pages\fP (که به‌تازگی توسط دستور \fBghp\-import\fP به‌روز شده است) را به شاخه \fBmain\fP در مخزن \fBelemoine.github.io\fP در GitHub ارسال (push) می‌کند. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 برای انتشار وب‌سایت Pelican خود به‌صورت User Pages، می‌توانید تارگت \fBgithub\fP را در Makefile بر حسب نیاز خود ویرایش کنید. .UNINDENT .UNINDENT .sp گزینه دیگر برای انتشار به‌صورت User Pages، تولید فایل‌های خروجی در دایرکتوری ریشه پروژه است. .sp برای مثال، پوشه اصلی پروژه شما \fB<username>.github.io\fP است و می‌توانید پروژه Pelican را در یک زیردایرکتوری با نام \fBPelican\fP ایجاد کنید. سپس از داخل پوشه \fBPelican\fP می‌توانید اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ pelican content \-o .. \-s pelicanconf.py .EE .UNINDENT .UNINDENT .sp اکنون می‌توانید کل پروژه \fB<username>.github.io\fP را به شاخه main مخزن GitHub خود push کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ git push origin main .EE .UNINDENT .UNINDENT .sp (با فرض اینکه origin روی مخزن دوردست شما تنظیم شده باشد). .SS انتشار در GitHub Pages با استفاده از یک جریان کاری سفارشی GitHub Actions .sp وب‌سایت‌های مبتنی بر Pelican می‌توانند از طریق یک جریان کاری سفارشی \%<https://\:github\:.com/\:getpelican/\:pelican/\:blob/\:main/\:\:.github/\:workflows/\:github_pages\:.yml>\& در GitHub Pages منتشر شوند. برای استفاده از آن: .INDENT 0.0 .IP 1. 3 فعال‌سازی GitHub Pages در مخزن خود: به بخش \fBSettings → Pages\fP بروید و برای تنظیم \fBSource\fP گزینه \fBGitHub Actions\fP را انتخاب کنید. .IP 2. 3 یک فایل \fB\&.github/workflows/pelican.yml\fP را با این محتوا به مخزن خود commit کنید: .INDENT 3.0 .INDENT 3.5 .sp .EX name: Deploy to GitHub Pages on: push: branches: [\(dqmain\(dq] workflow_dispatch: jobs: deploy: uses: \(dqgetpelican/pelican/.github/workflows/github_pages.yml@main\(dq permissions: contents: \(dqread\(dq pages: \(dqwrite\(dq id\-token: \(dqwrite\(dq with: settings: \(dqpublishconf.py\(dq .EE .UNINDENT .UNINDENT .sp ممکن است بخواهید \fB@main\fP را با شناسه (ID) یک commit خاص در این مخزن جایگزین کنید تا نسخه جریان کاری قابل استفاده مجدد را تثبیت (pin) کنید: \fBuses: getpelican/pelican/.github/workflows/github_pages.yml@<COMMIT_ID>\fP\&. اگر این کار را انجام دهید، ممکن است بخواهید ترتیبی دهید که Dependabot با انتشار نسخه‌های جدید این جریان کاری، pull requestهای خودکاری برای به‌روزرسانی آن شناسه commit برای شما ارسال کند، به این صورت: .INDENT 3.0 .INDENT 3.5 .sp .EX # .github/dependabot.yml version: 2 updates: \- package\-ecosystem: \(dqgithub\-actions\(dq directory: \(dq/\(dq schedule: interval: \(dqmonthly\(dq .EE .UNINDENT .UNINDENT .sp برای اطلاعات بیشتر، مستندات GitHub درباره استفاده از Dependabot برای به‌روز نگه‌داشتن Actionهای خود را ببینید \%<https://\:docs\:.github\:.com/\:en/\:code-security/\:dependabot/\:working-with-dependabot/\:keeping-your-actions-up-to-date-with-dependabot>\&. .IP 3. 3 به برگه \fBActions\fP در مخزن خود بروید (\fBhttps://github.com/<username>/<repository>/actions\fP)؛ در آنجا باید اقدام (action) \fBDeploy to GitHub Pages\fP را در حال اجرا ببینید. .IP 4. 3 پس از اتمام این اقدام، باید وب‌سایت Pelican خود را که در نشانی GitHub Pages مخزن شما مستقر شده است مشاهده کنید: \fBhttps://<username>.github.io\fP برای یک سایت کاربری یا سازمانی، یا \fBhttps://<username>.github.io/<repository>>\fP برای یک سایت پروژه. .UNINDENT .sp نکات: .INDENT 0.0 .IP \(bu 2 نیازی به تنظیم \fBSITEURL\fP یا \fBFEED_DOMAIN\fP در تنظیمات Pelican خود ندارید: جریان کاری این مقادیر را به‌درستی برای شما تنظیم خواهد کرد .IP \(bu 2 نیازی به commit کردن دایرکتوری \fB\-\-output\fP / \fBOUTPUT_PATH\fP (\fBoutput/\fP) در git ندارید: جریان کاری، دستور \fBpelican\fP را روی GitHub Actions اجرا می‌کند تا دایرکتوری خروجی را برای شما بسازد .UNINDENT .sp برای اطلاعات بیشتر، مستندات GitHub در مورد جریان‌های کاری با قابلیت استفاده مجدد (reusable workflows) را ببینید \%<https://\:docs\:.github\:.com/\:en/\:actions/\:using-workflows/\:reusing-workflows>\&. .sp هنگام فراخوانی جریان کاری، تعدادی ورودی اختیاری را می‌توان به بلوک \fBwith:\fP اضافه کرد، برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX with: settings: \(dqpublishconf.py\(dq requirements: \(dqpelican[markdown] typogrify\(dq theme: \(dqhttps://github.com/seanh/sidecar.git\(dq python: \(dq3.12\(dq .EE .UNINDENT .UNINDENT .sp در ادامه فهرست کامل ورودی‌های جریان کاری آمده است: .TS box center; l|l|l|l|l. T{ نام T} T{ الزامی T} T{ توضیحات T} T{ نوع T} T{ پیش‌فرض T} _ T{ \fBsettings\fP T} T{ بله T} T{ مسیر فایل تنظیمات Pelican (گزینه \fB\-\-settings\fP در \fBpelican\fP)، برای مثال: \fB\(dqpublishconf.py\(dq\fP T} T{ string T} T{ T} _ T{ \fBrequirements\fP T} T{ خیر T} T{ پیش‌نیازهای پایتون برای نصب، برای مثال جهت فعال‌سازی markdown و typogrify: \fB\(dqpelican[markdown] typogrify\(dq\fP یا در صورت داشتن فایل پیش‌نیازها: \fB\(dq\-r requirements.txt\(dq\fP T} T{ string T} T{ \fB\(dqpelican\(dq\fP T} _ T{ \fBoutput\-path\fP T} T{ خیر T} T{ محل ذخیره فایل‌های خروجی تولیدشده (گزینه \fB\-\-output\fP در \fBpelican\fP) T} T{ string T} T{ \fB\(dqoutput/\(dq\fP T} _ T{ \fBtheme\fP T} T{ خیر T} T{ نشانی مخزن GitHub یک تم سفارشی برای استفاده، برای مثال: \fB\(dqhttps://github.com/seanh/sidecar.git\(dq\fP T} T{ string T} T{ \fB\(dq\(dq\fP T} _ T{ \fBpython\fP T} T{ خیر T} T{ نسخه پایتون مورد استفاده برای ساخت سایت، برای مثال: \fB\(dq3.12\(dq\fP (جهت استفاده از جدیدترین نسخه پایتون ۳.۱۲ که سریع‌تر است) یا \fB\(dq3.12.1\(dq\fP (برای استفاده از یک نسخه دقیق که کندتر است) T} T{ string T} T{ \fB\(dq3.12\(dq\fP T} _ T{ \fBsiteurl\fP T} T{ خیر T} T{ نشانی پایه وب‌سایت شما (تنظیم \fBSITEURL\fP در Pelican). در صورت عدم ارسال، مقدار پیش‌فرض آن نشانی سایت GitHub Pages شما خواهد بود که در اغلب موارد صحیح است. T} T{ string T} T{ نشانی سایت GitHub Pages شما. T} _ T{ \fBfeed_domain\fP T} T{ خیر T} T{ دامنه‌ای که به ابتدای نشانی‌های خوراک اضافه می‌شود (تنظیم \fBFEED_DOMAIN\fP در Pelican). در صورت عدم ارسال، مقدار پیش‌فرض آن نشانی وب‌سایت GitHub Pages شما خواهد بود که در اکثر موارد صحیح است. T} T{ string T} T{ نشانی سایت GitHub Pages شما. T} _ T{ \fBdeploy\fP T} T{ خیر T} T{ برای تعیین اینکه آیا سایت در GitHub Pages مستقر شود یا خیر استفاده می‌شود. این گزینه زمانی بسیار کاربردی است که بخواهید تغییری در وب‌سایت خود را پیش از استقرار، در یک pull request آزمایش کنید. T} T{ bool T} T{ \fBtrue\fP T} .TE.SS آزمایش ساخت در یک Pull Request گیت‌هاب .sp اگر می‌خواهید پیش از استقرار در گیت‌هاب، ساخت (build) خود را در یک pull request آزمایش کنید، گردش‌کار (workflow) شما ممکن است چیزی شبیه به این باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX name: Build and Deploy Site on: push: branches: [\(dqmain\(dq] pull_request: branches: [\(dqmain\(dq] workflow_dispatch: inputs: deploy: required: false default: true description: \(dqWhether to deploy the site. If checked, then build the site and deploy it. If not checked, then just test that the site builds successfully but don\(aqt deploy anything.\(dq type: boolean jobs: deploy: uses: \(dqgetpelican/pelican/.github/workflows/github_pages.yml@main\(dq permissions: id\-token: write contents: read pages: write with: settings: \(dqpublishconf.py\(dq requirements: \(dq\-r requirements.txt\(dq deploy: ${{ (github.event_name == \(aqworkflow_dispatch\(aq && inputs.deploy == true) || (github.event_name == \(aqpush\(aq && github.ref_type == \(aqbranch\(aq && github.ref_name == github.event.repository.default_branch) }} .EE .UNINDENT .UNINDENT .sp بخش \fBon\fP گردش‌کار رویدادهایی را مشخص می‌کند که گردش‌کار را راه‌اندازی (trigger) خواهند کرد. در این مثال، گردش‌کار با push به شاخه اصلی (main)، pull requestها به شاخه اصلی و اجراهای دستی گردش‌کار اجرا خواهد شد. .sp \fBworkflow_dispatch\fP متغیر بولیِ deploy را به‌طور پیش‌فرض برابر با true تعریف می‌کند. این بدان معناست که اگر گردش‌کار را به‌صورت دستی اجرا کنید، سایت مستقر خواهد شد. .sp ورودی \fBdeploy\fP برای کار (job) از مجموعه‌ای از متغیرهای استاندارد گردش‌کار گیت‌هاب برای کنترل زمان‌هایی که \fBdeploy\fP مقدار true یا false دارد استفاده می‌کند (می‌توانید آن را بر اساس نیازهای خود سفارشی‌سازی کنید). .sp در این مثال، مقدار \fBdeploy\fP در صورتی true خواهد بود که رویداد از نوع push به شاخه اصلی (یا ادغام به main از طریق یک PR) یا اجرای دستی گردش‌کار باشد. اگر رویداد یک pull request باشد، مقدار \fBdeploy\fP برابر با false خواهد بود و تنها یک آرتیفکت برای سایت ساخته خواهد شد. .SS هشدارهای «محتوای ناامن» (\(dqInsecure content\(dq) از سوی مرورگرها .sp اگر سایت شما از \fBhttps://\fP استفاده می‌کند و به دلیل مسدود شدن درخواست‌های شبکه (برای مثال برای فایل‌های CSS) توسط مرورگر به علت «محتوای ناامن» (\(dqinsecure content\(dq) دچار مشکل شده است، ممکن است به این دلیل باشد که GitHub Pages در حال تولید نشانی‌های اینترنتی \fBhttp://\fP برای سایت شماست. .sp برای رفع این مشکل، به تنظیمات مخزن سایت خود بروید و گزینه \fBEnforce HTTPS\fP را فعال کنید: به \fBSettings → Pages\fP بروید و \fBEnforce HTTPS\fP را علامت بزنید\&. سپس گردش‌کار را دوباره اجرا کنید تا سایت شما مجدداً مستقر شود. همچنین، می‌توانید از تنظیمات \fBsiteurl\fP و \fBfeed_domain\fP در گردش‌کار استفاده کنید. .SS صفحه‌های ۴۰۴ سفارشی .sp همان‌طور که در مستندات مربوطه در گیت‌هاب \%<https://\:help\:.github\:.com/\:articles/\:custom-404-pages>\& ذکر شده است، GitHub Pages صفحه ۴۰۴ سفارشی شرح‌داده‌شده در بالا را نمایش خواهد داد. .SS به‌روزرسانی سایت در هر کامیت .sp برای به‌روزرسانی خودکار سایت Pelican خود با هر commit، می‌توانید یک قلاب post\-commit ایجاد کنید. برای مثال، می‌توانید عبارت زیر را به \fB\&.git/hooks/post\-commit\fP بیفزایید: .INDENT 0.0 .INDENT 3.5 .sp .EX pelican content \-o output \-s pelicanconf.py && ghp\-import output && git push origin gh\-pages .EE .UNINDENT .UNINDENT .SS کپی فایل‌های ایستا به ریشه سایت .sp برای استفاده از یک دامنه سفارشی \%<https://\:help\:.github\:.com/\:articles/\:setting-up-a-custom-domain-with-pages> با GitHub Pages، باید دامنه سایت خود (مانند \fBblog.example.com\fP) را درون یک فایل \fBCNAME\fP در ریشه سایت قرار دهید. برای این کار، دایرکتوری \fBcontent/extra/\fP را بسازید و یک فایل \fBCNAME\fP به آن اضافه کنید. سپس از تنظیم \fBSTATIC_PATHS\fP استفاده کنید تا به Pelican اعلام کنید این فایل را در دایرکتوری خروجی کپی کند. برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX STATIC_PATHS = [\(aqimages\(aq, \(aqextra/CNAME\(aq] EXTRA_PATH_METADATA = {\(aqextra/CNAME\(aq: {\(aqpath\(aq: \(aqCNAME\(aq},}` .EE .UNINDENT .UNINDENT .sp نکته: حتی در ویندوز نیز از اسلش‌های رو به جلو، \fB/\fP، استفاده کنید. .sp همچنین می‌توانید از سازوکار \fBEXTRA_PATH_METADATA\fP برای قرار دادن یک \fBfavicon.ico\fP یا \fBrobots.txt\fP در ریشه هر سایتی استفاده کنید. .SS نحوه افزودن ویدیوهای YouTube یا Vimeo .sp ساده‌ترین روش این است که کد جاسازی (embed) ویدیو را از این سایت‌ها مستقیماً در محتوای مبدأ خود جای‌گذاری (paste) کنید. .sp به‌عنوان راهکاری دیگر، می‌توانید از افزونه‌های Pelican مانند \fBliquid_tags\fP، \fBpelican_youtube\fP یا \fBpelican_vimeo\fP برای جاسازی ویدیوها در محتوای خود استفاده کنید. .sp علاوه بر این، زبان‌های نشانه‌گذاری مانند reST و Markdown دارای افزونه‌هایی هستند که به شما امکان می‌دهند ویدیوها را در نشانه‌گذاری جاسازی کنید. می‌توانید از دستورالعمل ویدیوی reST در \%<https://\:gist\:.github\:.com/\:dbrgn/\:2922648> برای reST یا افزونه mdx_video در \%<https://\:github\:.com/\:italomaia/\:mdx-video> برای Markdown استفاده کنید. .SS توسعه محلی با استفاده از SSL .sp در اینجا نحوه راه‌اندازی سرور محلی pelican برای پشتیبانی از SSL آمده است. .sp ابتدا با استفاده از \fBopenssl\fP یک کلید و گواهی خودامضا (self\-signed) بسازید (این کار فایل‌های \fBcert.pem\fP و \fBkey.pem\fP را ایجاد می‌کند): .INDENT 0.0 .INDENT 3.5 .sp .EX $ openssl req \-x509 \-newkey rsa:4096 \-keyout key.pem \-out cert.pem \-days 365 \-nodes .EE .UNINDENT .UNINDENT .sp و از این دستور برای راه‌اندازی سرور استفاده کنید (سرور از داخل دایرکتوری \fBoutput\fP شما اجرا می‌شود): .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pelican.server 8443 \-\-key=../key.pem \-\-cert=../cert.pem .EE .UNINDENT .UNINDENT .sp اگر از \fBdevelop\-server.sh\fP استفاده می‌کنید، این خطوط را به بالای آن اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX CERT=\(dq$BASEDIR/cert.pem\(dq KEY=\(dq$BASEDIR/key.pem\(dq .EE .UNINDENT .UNINDENT .sp و خط \fBpelican.server\fP را به‌صورت زیر تغییر دهید: .INDENT 0.0 .INDENT 3.5 .sp .EX $PY \-m pelican.server $port \-\-ssl \-\-cert=\(dq$CERT\(dq \-\-key=\(dq$KEY\(dq & .EE .UNINDENT .UNINDENT.SS راهنمای مشارکت و بازخورد (Contributing and feedback guidelines) .sp روش‌های زیادی برای مشارکت در Pelican وجود دارد. شما می‌توانید مستندات را بهبود دهید، ویژگی‌های ناموجود را اضافه کنید، و باگ‌ها را برطرف سازید (یا صرفاً آن‌ها را گزارش کنید). همچنین می‌توانید با بازبینی و ارسال نظر درباره گزارش‌های مشکل موجود \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues>\& کمک کنید. .sp در ساخت انشعاب (fork) از Pelican و ارسال یک issue یا pull request در GitHub درنگ نکنید. هنگام انجام این کار، لطفاً راهنماهای زیر را مد نظر داشته باشید. .SS ثبت گزارش مشکلات (Filing issues) .INDENT 0.0 .IP \(bu 2 پیش از آنکه issue جدیدی ارسال کنید، ابتدا سعی کنید راهنمایی بخواهید. .IP \(bu 2 اگر مصمم به ایجاد یک issue جدید هستید، ابتدا در بحث‌های Pelican \%<https://\:github\:.com/\:getpelican/\:pelican/\:discussions> و issueهای موجود \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues> (باز و بسته) جستجو کنید تا ببینید آیا پیش‌تر به پرسش شما پاسخ داده شده است یا خیر. .UNINDENT .SS نحوه دریافت راهنمایی (How to get help) .sp پیش از آنکه درخواست راهنمایی کنید، لطفاً مطمئن شوید اقدامات زیر را انجام داده‌اید: .INDENT 0.0 .IP 1. 3 مستندات \%<https://\:docs\:.getpelican\:.com> را به‌طور کامل و دقیق بخوانید. اگر عجله دارید، دست‌کم از کادر جستجو که در بالا سمت چپ صفحات مستندات \%<https://\:docs\:.getpelican\:.com> تعبیه شده است استفاده کنید. مطمئن شوید مستندات مربوط به همان نگارش Pelican که استفاده می‌کنید را می‌خوانید. .IP 2. 3 از یک موتور جستجو (مانند DuckDuckGo یا Google) برای یافتن راه‌حلی برای مشکل خود استفاده کنید. شاید فردی پیش‌تر راه‌حلی یافته باشد، مثلاً در قالب یک افزونه (plugin) \%<https://\:docs\:.getpelican\:.com/\:en/\:latest/\:plugins\:.html> یا ترکیب خاصی از تنظیمات. .IP 3. 3 تلاش کنید مشکل را در یک محیط تمیز بازتولید کنید و مطمئن شوید از موارد زیر استفاده می‌کنید: .UNINDENT .INDENT 0.0 .IP \(bu 2 جدیدترین انتشار Pelican (یا یک کلون Git به‌روز از شاخه \fBmain\fP در Pelican) .IP \(bu 2 جدیدترین نگارش کتابخانه‌های مورد استفاده Pelican .IP \(bu 2 بدون هیچ افزونه‌ای یا تنها با افزونه‌های مرتبط با مشکل .UNINDENT .sp \fBنکته:\fP شایع‌ترین منشأ مشکلات، ناهنجاری‌ها در (۱) تم‌ها، (۲) افزونه‌ها، (۳) فایل‌های تنظیمات، و (۴) اسکریپت‌های پوششی خودکارسازی \fBmake\fP/\fBinvoke\fP هستند. اگر هنگام استفاده از مراحل زیر برای تولید سایت خود نتوانستید مشکل را بازتولید کنید، تقریباً به‌طور قطع مشکل از یکی از عناصر ذکرشده در بالاست (و نه خود Pelican): .INDENT 0.0 .INDENT 3.5 .sp .EX cd ~/projects/your\-site git clone https://github.com/getpelican/pelican ~/projects/pelican pelican content \-s ~/projects/pelican/samples/pelican.conf.py \-t ~/projects/pelican/pelican/themes/notmyidea .EE .UNINDENT .UNINDENT .sp اگر توانستید سایت خود را با مراحل بالا بدون مشکل ایجاد کنید، بعید است مشکل ناشی از خود Pelican باشد؛ بنابراین لطفاً به جای مطرح کردن موضوع با جامعه اصلی Pelican، با نگه‌دارندگان تم یا افزونه‌هایی که استفاده می‌کنید تماس بگیرید. .sp اگر با وجود تلاش‌های فوق همچنان نتوانستید مشکل خود را برطرف کنید، حتماً اطلاعات زیر را در پرسش خود بگنجانید، ترجیحاً در قالب پیوندهایی به محتوای بارگذاری‌شده در یک سرویس اشتراک متن (paste service) \%<https://\:dpaste\:.com>، مخزن GitHub، یا هر مکان دیگر با دسترسی عمومی: .INDENT 0.0 .IP \(bu 2 شرح دهید از چه نگارشی از Pelican استفاده می‌کنید (خروجی \fBpelican \-\-version\fP یا هش کامیت HEAD در صورتی که مخزن را کلون کرده‌اید) و دقیقاً چگونه آن را نصب کرده‌اید (دستور کاملی که استفاده کرده‌اید، مثلاً \fBpython \-m pip install pelican\fP). .IP \(bu 2 اگر به دنبال راهی برای رسیدن به یک نتیجه نهایی خاص هستید، توضیحی با جزئیات از اینکه نتیجه نهایی چگونه باید باشد آماده کنید (ترجیحاً در قالب یک تصویر یا ماکت صفحه) و به تفصیل شرح دهید که تاکنون برای رسیدن به آن چه کرده‌اید. .IP \(bu 2 اگر در تلاش برای رفع یک مشکل هستید، شرح دقیقی از نحوه بازتولید مشکل آماده کنید. اگر مشکل به‌سادگی قابل بازتولید نباشد، اشکال‌زدایی آن توسط توسعه‌دهندگان یا داوطلبان امکان‌پذیر نخواهد بود. تنها \fBحداقل مراحل لازم\fP برای بازتولید را توضیح دهید (بدون افزونه‌های اضافی و غیره). .IP \(bu 2 فایل تنظیمات خود یا هر کد سفارشی دیگری را که به دیگران اجازه بازتولید مشکل یا بررسی تلاش‌های پیشین شما برای دستیابی به نتیجه مورد نظر را می‌دهد، بارگذاری کنید. .IP \(bu 2 گزارش‌های خروجی و ردگیری‌های پشته (backtraces) تفصیلی و \fBکامل\fP را بارگذاری کنید (به یاد داشته باشید که پرچم \fB\-\-debug\fP را اضافه کنید: \fBpelican \-\-debug content [...]\fP) .UNINDENT .sp پس از انجام مقدمات بالا، می‌توانید پرسش خود را به عنوان یک مبحث جدید در بحث‌های Pelican \%<https://\:github\:.com/\:getpelican/\:pelican/\:discussions>\& ارسال کنید. به خاطر داشته باشید تمامی اطلاعات آماده‌شده را ضمیمه کنید. .SS مشارکت در کد (Contributing code) .sp پیش از ارسال هرگونه مشارکت، لطفاً پرس‌وجو کنید که آیا تغییر مورد نظر پذیرفته خواهد شد یا خیر، تا زمان زیادی را صرف کاری نکنید که به دلیلی مشخص رد شود. همچنین در نظر بگیرید که آیا ویژگی جدید شما بهتر است در قالب یک افزونه \%<https://\:docs\:.getpelican\:.com/\:en/\:latest/\:plugins\:.html> پیاده‌سازی شود یا خیر — برای تصمیم‌گیری در این مورد می‌توانید درخواست راهنمایی کنید. .sp همچنین اگر قصد دارید برای موردی که هنوز issueای برای آن وجود ندارد یک pull request ارسال کنید، نیازی نیست ابتدا یک issue جدید ایجاد کرده و بلافاصله یک pull request برای بستن آن ارسال کنید. می‌توانید pull request را به تنهایی ارسال کنید. .SS استفاده از Git و GitHub (Using Git and GitHub) .INDENT 0.0 .IP \(bu 2 یک شاخه جدید مخصوص به تغییر خود ایجاد کنید \%<https://\:github\:.com/\:getpelican/\:pelican/\:wiki/\:Git-Tips#\:making-your-changes> (به جای ثبت کامیت‌ها مستقیماً در شاخه \fBmain\fP). .IP \(bu 2 \fBچندین رفع باگ یا ویژگی نامرتبط را در یک شاخه یا pull request قرار ندهید.\fP برای نمونه، اگر روی یک ویژگی جدید کار می‌کنید و متوجه رفع باگی شدید که به ویژگی جدید شما \fIنیازی ندارد\fP، \fBیک شاخه و pull request کاملاً مجزا\fP برای آن رفع باگ بسازید. به همین ترتیب، هرگونه تغییر پیشنهادی برای اصلاح سبک قالب‌بندی کد باید در یک pull request کاملاً جداگانه قرار گیرد. .IP \(bu 2 یک فایل \fBRELEASE.md\fP در ریشه پروژه اضافه کنید که نوع انتشار (major، minor، patch) و خلاصه‌ای از تغییرات را که به عنوان مدخل سیاهه تغییرات (changelog) انتشار استفاده می‌شود، شامل شود. برای نمونه: .INDENT 2.0 .INDENT 3.5 .sp .EX Release type: minor Reload browser window upon changes to content, settings, or theme .EE .UNINDENT .UNINDENT .IP \(bu 2 پیش از کامیت کردن، با استفاده از \fBgit diff \-\-check\fP فاصله‌های خالی غیرضروری را بررسی کنید. .IP \(bu 2 خط نخست پیام کامیت شما باید با یک فعل در زمان حال آغاز شود، ۵۰ نویسه یا کمتر باشد، و در صورت لزوم شماره issue(های) مرتبط را در بر گیرد. \fIنمونه:\fP \fBEnsure proper PLUGIN_PATH behavior. Refs #428.\fP اگر کامیت یک گزارش باگ موجود را \fIبه‌طور کامل برطرف می‌کند\fP، لطفاً از نحو \fBFixes #585\fP یا \fBFix #585\fP استفاده کنید (تا پس از ادغام PR، issue مربوطه به‌طور خودکار بسته شود). .IP \(bu 2 پس از خط اول پیام کامیت، یک خط خالی و سپس شرحی مفصل‌تر (در صورت ارتباط) اضافه کنید. .IP \(bu 2 کامیت‌های خود را فشرده (squash) کنید \%<https://\:github\:.com/\:getpelican/\:pelican/\:wiki/\:Git-Tips#\:squashing-commits> تا کامیت‌های ادغام حذف شوند و از یک تاریخچه کامیت تمیز و خوانا اطمینان حاصل شود. .IP \(bu 2 پس از ارسال یک pull request، سیستم یکپارچه‌سازی مداوم (CI) مجموعه آزمون‌ها را روی تمام نگارش‌های پشتیبانی‌شده Python اجرا کرده و انطباق سبک کد را بررسی می‌کند. اگر هر یک از این بررسی‌ها با شکست مواجه شد، باید آن‌ها را اصلاح کنید. (اگر آزمون‌ها در سیستم CI با خطا مواجه شدند اما به صورت محلی موفقیت‌آمیز بودند، مطمئن شوید اجرای محلی آزمون‌ها هیچ آزمونی را نادیده نگرفته باشد.) .UNINDENT.SS استانداردهای کیفیت مشارکت .INDENT 0.0 .IP \(bu 2 به استانداردهای شیوه‌نامهٔ کدنویسی پروژه پایبند باشید. ببینید: محیط توسعه \%<https://\:docs\:.getpelican\:.com/\:en/\:latest/\:contribute\:.html#\:setting-up-the-development-environment> .IP \(bu 2 اطمینان حاصل کنید که کد شما با نسخه‌های رسماً پشتیبانی‌شدهٔ Python سازگار است \%<https://\:devguide\:.python\:.org/\:versions/#\:versions>\&. .IP \(bu 2 برای تغییرات خود مستندات و آزمون‌ها را اضافه کنید. ویژگی‌های فاقد مستندات و بدون آزمون پذیرفته نخواهند شد. .IP \(bu 2 تمام آزمون‌ها \%<https://\:docs\:.getpelican\:.com/\:en/\:latest/\:contribute\:.html> را \fBروی تمام نسخه‌های Python که توسط Pelican پشتیبانی می‌شوند\fP اجرا کنید تا مطمئن شوید چیزی تصادفاً از کار نیفتاده است. .UNINDENT .sp صفحهٔ نکات Git ما \%<https://\:github\:.com/\:getpelican/\:pelican/\:wiki/\:Git-Tips> را بررسی کنید یا اگر به کمک نیاز دارید یا دربارهٔ این دستورالعمل‌ها سؤالی دارید، درخواست راهنمایی کنید. .SS راه‌اندازی محیط توسعه .sp اگرچه راه‌های بسیاری برای راه‌اندازی محیط توسعه وجود دارد، دستورالعمل‌های زیر از Pip \%<https://\:pip\:.pypa\:.io> و PDM \%<https://\:pdm\:.fming\:.dev/\:latest>\& بهره می‌گیرند. این ابزارها مدیریت محیط‌های مجازی را برای پروژه‌های مجزای Python که از یکدیگر ایزوله هستند تسهیل می‌کنند تا بتوانید برای هر کدام از بسته‌ها (و نسخه‌های بستهٔ) متفاوتی استفاده کنید. .sp لطفاً توجه داشته باشید که برای توسعهٔ Pelican به Python >=3.9 نیاز است. .sp \fI(اختیاری)\fP اگر ترجیح می‌دهید PDM \%<https://\:pdm\:.fming\:.dev/\:latest/#\:installation> را یک بار برای استفاده در چندین پروژه نصب کنید، می‌توانید آن را از طریق زیر نصب کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX curl \-sSL https://pdm.fming.dev/install\-pdm.py | python3 \- .EE .UNINDENT .UNINDENT .sp مرورگر وب خود را به سمت مخزن Pelican \%<https://\:github\:.com/\:getpelican/\:pelican> باز کرده و دکمهٔ \fBFork\fP در بالا سمت راست را بزنید. سپس سورس فورک خود را clone کرده و پروژهٔ بالادست (upstream) را به عنوان یک Git remote اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX mkdir ~/projects git clone https://github.com/YOUR_USERNAME/pelican.git ~/projects/pelican cd ~/projects/pelican git remote add upstream https://github.com/getpelican/pelican.git .EE .UNINDENT .UNINDENT .sp اگرچه PDM می‌تواند محیط‌های مجازی را به صورت پویا ایجاد و مدیریت کند، ما قصد داریم یک محیط مجازی را به صورت دستی ایجاد و فعال کنیم: .INDENT 0.0 .INDENT 3.5 .sp .EX mkdir ~/virtualenvs && cd ~/virtualenvs python3 \-m venv pelican source ~/virtualenvs/pelican/*/activate .EE .UNINDENT .UNINDENT .sp وابستگی‌های مورد نیاز را نصب کرده و پروژه را راه‌اندازی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX python \-m pip install invoke invoke setup .EE .UNINDENT .UNINDENT .sp اکنون محیط محلی شما باید آماده به کار باشد! .SS توسعه .sp پس از اینکه Pelican برای توسعهٔ محلی راه‌اندازی شد، یک شاخهٔ موضوعی (topic branch) برای رفع باگ یا قابلیت مورد نظر خود بسازید: .INDENT 0.0 .INDENT 3.5 .sp .EX git checkout \-b name\-of\-your\-bugfix\-or\-feature .EE .UNINDENT .UNINDENT .sp اکنون می‌توانید تغییرات مورد نظر را در Pelican، مستندات آن و/یا سایر بخش‌های پروژه ایجاد کنید. .SS راه‌اندازی \fBgit blame\fP (اختیاری) .sp دستور \fBgit blame\fP خطوط یک فایل را با اطلاعات مربوط به pull request که آخرین بار آن را تغییر داده نشانه‌گذاری می‌کند. تغییرات سطحی و گسترده (مانند قالب‌بندی) می‌توانند این اطلاعات را کم‌فایده‌تر کنند؛ بنابراین ما فهرستی از چنین تغییراتی نگه می‌داریم تا نادیده گرفته شوند. دستور زیر را برای اعمال این تنظیم در مخزن خود اجرا کنید، و اگر می‌خواهید این تنظیم برای تمام مخازن اعمال شود، \fB\-\-global\fP را اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX git config blame.ignoreRevsFile .git\-blame\-ignore\-revs .EE .UNINDENT .UNINDENT .sp همان‌طور که در مقاله‌ای مفید \%<https://\:www\:.michaelheap\:.com/\:git-ignore-rev> دربارهٔ \fBgit blame\fP اشاره شده است، تنظیمات مرتبط دیگری نیز وجود دارند که ممکن است برای شما سودمند باشند: .INDENT 0.0 .INDENT 3.5 .sp .EX # Add \(ga?\(ga to any lines that have had a commit skipped using \-\-ignore\-rev git config \-\-global blame.markIgnoredLines true # Add \(ga*\(ga to any lines that were added in a skipped commit and can not be attributed git config \-\-global blame.markUnblamableLines true .EE .UNINDENT .UNINDENT.SS اجرای مجموعه آزمون‌ها .sp هر بار که در Pelican تغییراتی ایجاد می‌کنید، دو کار در رابطه با آزمون‌ها باید انجام دهید: بررسی این‌که آزمون‌های موجود با موفقیت سپری شوند، و افزودن آزمون برای هر قابلیت جدید یا رفع باگ. آزمون‌ها در \fBpelican/tests\fP قرار دارند و می‌توانید آن‌ها را از این طریق اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke tests .EE .UNINDENT .UNINDENT .sp (برای اطلاعات بیشتر درباره Invoke، دستور \fBinvoke \-l\fP را برای فهرست کردن وظایف اجرا کنید یا برای مشاهده مستندات به \%<https://\:pyinvoke\:.org> مراجعه نمایید.) .sp علاوه بر اجرای مجموعه آزمون‌ها، مهم است که مطمئن شوید هر خطی که تغییر داده‌اید با شیوه‌نامه نگارش کد مطابقت داشته باشد. می‌توانید این مورد را از این طریق بررسی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke lint .EE .UNINDENT .UNINDENT .sp اگر در خطوطی که تغییر داده‌اید موارد نقض شیوه‌نامه کد یافت شد، آن خطوط را اصلاح کرده و دستور lint بالا را مجدداً اجرا کنید تا تمام آن‌ها برطرف شوند. نیازی به رسیدگی به موارد نقض شیوه‌نامه (در صورت وجود) برای خطوط کدی که به آن‌ها دست نزده‌اید نیست. .sp پس از اعمال تغییرات و اجرای آزمون‌ها، ممکن است با شکست آزمونی مواجه شوید مبنی بر اینکه \(dqsome generated files differ from the expected functional tests output.\(dq (برخی فایل‌های تولید‌شده با خروجی آزمون‌های کارکردیِ مورد انتظار تفاوت دارند). اگر تغییراتی ایجاد کرده‌اید که بر خروجی HTML تولید‌شده توسط Pelican اثر می‌گذارد، و با توجه به ماهیت تغییرات شما، تغییرات در آن خروجی مورد انتظار و درست تلقی می‌شود، باید خروجی استفاده‌شده توسط آزمون‌های کارکردی را به‌روزرسانی کنید. برای این کار، \fBمطمئن شوید هر دو لوکال\fP \fBen_EN.utf8\fP \fBو\fP \fBfr_FR.utf8\fP \fBرا نصب دارید\fP، و سپس دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke update\-functional\-tests .EE .UNINDENT .UNINDENT .sp همچنین ممکن است متوجه شوید برخی از آزمون‌ها به دلیل نصب نبودن یک وابستگی (مانند Pandoc) نادیده گرفته شده‌اند. این امر لزوماً به این معنا نیست که این آزمون‌ها با موفقیت سپری شده‌اند؛ شما باید حداقل بررسی کنید که آزمون‌های نادیده گرفته‌شده تحت تأثیر تغییرات شما قرار نگرفته باشند. .sp شما باید مجموعه آزمون‌ها را تحت هر یک از نسخه‌های پشتیبانی‌شدهٔ Python اجرا کنید. این کار به بهترین نحو با ایجاد یک محیط Python جداگانه برای هر نسخه انجام می‌شود. ابزار Tox \%<https://\:tox\:.readthedocs\:.io/\:en/\:latest> ابزاری مفید برای خودکارسازی اجرای آزمون‌ها داخل محیط‌های \fBvirtualenv\fP است. .SS اجرای گزارش پوشش کد .sp در صورتی که کد مورد آزمون قرار گیرد، احتمال بیشتری دارد که پایدار و مستحکم باقی بماند. ابزار Coverage \%<https://\:github\:.com/\:nedbat/\:coveragepy> کتابخانه‌ای است که میزان آزموده شدن کد را می‌سنجد. برای اجرای آن: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke coverage .EE .UNINDENT .UNINDENT .sp این دستور پوشش کلی، پوشش به ازای هر فایل و حتی پوشش خط‌به‌خط را نشان خواهد داد. همچنین یک گزارش HTML نیز در دسترس است: .INDENT 0.0 .INDENT 3.5 .sp .EX open htmlcov/index.html .EE .UNINDENT .UNINDENT .SS ساخت مستندات .sp اگر تغییراتی در مستندات ایجاد می‌کنید، باید قبل از commit کردن آن‌ها، تغییرات خود را ساخته و بازبینی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke docserve .EE .UNINDENT .UNINDENT .sp برای مرور مستندات، آدرس \%<http://\:localhost:8000> را در مرورگر خود باز کنید. در حین اجرای وظیفهٔ بالا، هر تغییری که ایجاد کرده و در مستندات ذخیره کنید باید به‌طور خودکار در مرورگر نمایش داده شود، زیرا با تشخیص تغییرات در فایل‌های منبع مستندات، صفحه را به‌صورت زنده بازنشانی (live\-reload) می‌کند. .SS توسعه افزونه .sp برای ساخت یک افزونهٔ \fIجدید\fP Pelican، لطفاً برای دریافت دستورالعمل‌های تفصیلی به مخزن قالب افزونه \%<https://\:github\:.com/\:getpelican/\:cookiecutter-pelican-plugin> مراجعه کنید. .sp اگر می‌خواهید در یک افزونهٔ \fIموجود\fP Pelican مشارکت کنید، مراحل بالا را برای راه‌اندازی Pelican جهت توسعه محلی دنبال کرده و سپس پوشه‌ای برای ذخیره مخازن کلون‌شدهٔ افزونه ایجاد کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX mkdir \-p ~/projects/pelican\-plugins .EE .UNINDENT .UNINDENT .sp با این فرض که می‌خواهید در افزونه Simple Footnotes مشارکت کنید، ابتدا باید در گیت‌هاب به مخزن Simple Footnotes \%<https://\:github\:.com/\:pelican-plugins/\:simple-footnotes> رفته و دکمهٔ \fBFork\fP را در بالا سمت راست بزنید. سپس سورس فورک خود را کلون کرده و پروژهٔ بالادست (upstream) را به عنوان ریموت Git اضافه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX git clone https://github.com/YOUR_USERNAME/simple\-footnotes.git ~/projects/pelican\-plugins/simple\-footnotes cd ~/projects/pelican\-plugins/simple\-footnotes git remote add upstream https://github.com/pelican\-plugins/simple\-footnotes.git .EE .UNINDENT .UNINDENT .sp وابستگی‌های مورد نیاز را نصب کرده و پروژه را راه‌اندازی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke setup .EE .UNINDENT .UNINDENT .sp یک شاخه موضوعی (topic branch) برای رفع باگ یا قابلیت افزونهٔ خود بسازید: .INDENT 0.0 .INDENT 3.5 .sp .EX git checkout \-b name\-of\-your\-bugfix\-or\-feature .EE .UNINDENT .UNINDENT .sp پس از نوشتن آزمون‌های جدید برای تغییرات افزونه‌تان، مجموعه آزمون‌های افزونه را اجرا کرده و مطابقت با شیوه‌نامه نگارش کد را از این طریق بررسی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke tests invoke lint .EE .UNINDENT .UNINDENT .sp اگر موارد نقض شیوه‌نامه پیدا شد، بسیاری از آن‌ها را می‌توان به‌طور خودکار از این طریق برطرف کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX invoke format .EE .UNINDENT .UNINDENT .sp اگر حتی پس از اجرای ابزارهای قالب‌بندی خودکار بالا، موارد نقض شیوه‌نامه همچنان وجود داشت، باید تغییرات دستی بیشتری ایجاد کنید تا زمانی که \fBinvoke lint\fP دیگر هیچ نقض شیوه‌نامه کدی را گزارش نکند..SS ارسال تغییرات .sp به شرط قبولی در اعتبارسنجی linting و آزمون‌ها، یک فایل \fBRELEASE.md\fP در ریشه پروژه اضافه کنید که شامل نوع انتشار (major، minor، patch) و خلاصه‌ای از تغییرات باشد که به عنوان مدخل سیاهه تغییرات انتشار استفاده خواهد شد. برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX Release type: patch Fix browser reloading upon changes to content, settings, or theme .EE .UNINDENT .UNINDENT .sp تغییرات خود را کامیت کرده و شاخه موضوعی خود را push کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX git add . git commit \-m \(dqYour detailed description of your changes\(dq git push origin name\-of\-your\-bugfix\-or\-feature .EE .UNINDENT .UNINDENT .sp در نهایت، به فورک مخزن خود در GitHub رفته و یک pull request ارسال کنید. .SS نکات لاگ‌گیری .sp سعی کنید از لاگ‌گیری با سطوح مناسب استفاده کنید. .sp برای پیام‌های لاگی که تکرار نمی‌شوند، از روش معمول پایتون استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX # at top of file import logging logger = logging.getLogger(__name__) # when needed logger.warning(\(dqA warning with %s formatting\(dq, arg_to_be_formatted) .EE .UNINDENT .UNINDENT .sp پیام‌های لاگ را خودتان قالب‌بندی نکنید. از قالب‌بندی \fB%s\fP در پیام‌ها استفاده کرده و آرگومان‌ها را به logger ارسال کنید. این موضوع مهم است، زیرا لاگر Pelican برخی آرگومان‌ها، مانند استثناها را پیش‌پردازش می‌کند. .SS محدود کردن پیام‌های لاگ غیرضروری .sp اگر پیام لاگ ممکن است چندین بار رخ دهد، ممکن است بخواهید لاگ را برای جلوگیری از انباشت بیش از حد پیام‌ها محدود کنید. برای انجام این کار، از آرگومان کلیدواژه‌ای \fBextra\fP برای پیام لاگ با قالب زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX logger.warning(\(dqA warning with %s formatting\(dq, arg_to_be_formatted, extra={\(aqlimit_msg\(aq: \(aqA generic message for too many warnings\(aq}) .EE .UNINDENT .UNINDENT .sp به صورت اختیاری، اگر پیام عمومی شما نیاز به قالب‌بندی دارد، می‌توانید \fB\(aqlimit_args\(aq\fP را نیز به عنوان یک تاپل از آرگومان‌ها در دیکشنری \fBextra\fP تعیین کنید. .sp حد مجاز روی \fB5\fP تنظیم شده است، یعنی چهار لاگ اول با همان \fB\(aqlimit_msg\(aq\fP به طور عادی در خروجی نمایش داده می‌شوند اما پنجمین لاگ با استفاده از \fB\(aqlimit_msg\(aq\fP (و \fB\(aqlimit_args\(aq\fP در صورت وجود) ثبت خواهد شد. پس از پنجمی، پیام‌های لاگ مربوطه نادیده گرفته می‌شوند. .sp به عنوان مثال، اگر می‌خواهید منابع ناموجود را لاگ کنید، از کد زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX for resource in resources: if resource.is_missing: logger.warning( \(aqThe resource %s is missing\(aq, resource.name, extra={\(aqlimit_msg\(aq: \(aqOther resources were missing\(aq}) .EE .UNINDENT .UNINDENT .sp پیام‌های لاگ به صورت زیر نمایش داده خواهند شد: .INDENT 0.0 .INDENT 3.5 .sp .EX WARNING: The resource prettiest_cat.jpg is missing WARNING: The resource best_cat_ever.jpg is missing WARNING: The resource cutest_cat.jpg is missing WARNING: The resource lolcat.jpg is missing WARNING: Other resources were missing .EE .UNINDENT .UNINDENT .SS نمایش traceback در لاگ‌ها .sp اگر درون یک بلوک \fBexcept\fP لاگ می‌گیرید، ممکن است بخواهید اطلاعات traceback را نیز ارائه دهید. می‌توانید این کار را با تنظیم آرگومان کلیدواژه‌ای \fBexc_info\fP روی \fBTrue\fP در هنگام لاگ‌گیری انجام دهید. با این حال، انجام این کار به صورت پیش‌فرض ممکن است نامطلوب باشد زیرا tracebackها طولانی هستند و می‌توانند برای کاربران عادی گیج‌کننده باشند. سعی کنید آن‌ها را مانند زیر به حالت \fB\-\-debug\fP محدود کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX try: some_action() except Exception as e: logger.error(\(aqException occurred: %s\(aq, e, exc_info=settings.get(\(aqDEBUG\(aq, False)) .EE .UNINDENT .UNINDENT.SS سازوکار درونی Pelican .sp این بخش نحوه کارکرد درونی Pelican را شرح می‌دهد. همان‌طور که خواهید دید، بسیار ساده است، اما کمی مستندات هرگز ضرری ندارد. :) .sp همچنین می‌توانید در بخش تاریخچه‌ای درباره Pelican \%<> گزیده‌ای از گزارشی را بیابید که نویسنده اصلی همراه با اطلاعاتی در زمینه طراحی نرم‌افزار نوشته است. .SS ساختار کلی .sp کاری که Pelican انجام می‌دهد این است که فهرستی از فایل‌ها را دریافت کرده و آن‌ها را به نوعی خروجی پردازش می‌کند. معمولاً فایل‌های ورودی پرونده‌های reStructuredText و Markdown هستند و خروجی یک وبلاگ است، اما ورودی و خروجی هر دو می‌توانند هر آنچه بخواهید باشند. .sp منطق برنامه به کلاس‌ها و مفاهیم متفاوتی تفکیک شده است: .INDENT 0.0 .IP \(bu 2 \fBWriters\fP مسئول نوشتن فایل‌ها هستند: فایل‌های .html، فیدهای RSS و غیره. از آنجا که این عملیات به‌طور متداول استفاده می‌شوند، این شیء یک‌بار ایجاد شده و سپس به مولدها تحویل داده می‌شود. .IP \(bu 2 \fBReaders\fP برای خواندن از قالب‌های گوناگون استفاده می‌شوند (در حال حاضر HTML، Markdown و reStructuredText، اما سیستم قابل گسترش است). با دریافت یک فایل، آن‌ها متادیتا (نویسنده، برچسب‌ها، دسته‌بندی و غیره) و محتوا (با قالب‌بندی HTML) را برمی‌گردانند. .IP \(bu 2 \fBGenerators\fP خروجی‌های مختلف را تولید می‌کنند. برای نمونه، Pelican همراه با \fBArticlesGenerator\fP و \fBPageGenerator\fP\& ارائه می‌شود. با دریافت یک پیکربندی، آن‌ها می‌توانند هر کاری را انجام دهند. در اکثر مواقع، کار آن‌ها تولید فایل‌ها از روی ورودی‌ها است. .IP \(bu 2 همچنین Pelican از قالب‌ها (templates) استفاده می‌کند، بنابراین نوشتن پوسته اختصاصی برایتان آسان خواهد بود. نحو آن Jinja2 \%<https://\:palletsprojects\:.com/\:p/\:jinja> است و یادگیری آن بسیار ساده است، پس در دست‌به‌کار شدن و ساخت پوسته خود درنگ نکنید. .UNINDENT .SS چگونه یک Reader جدید پیاده‌سازی کنیم؟ .sp آیا زبان نشانه‌گذاری فوق‌العاده‌ای وجود دارد که بخواهید به Pelican اضافه کنید؟ خب، تنها کاری که باید انجام دهید ایجاد کلاسی با یک متد \fBread\fP است که محتوای HTML و مقداری متادیتا را برگرداند. .sp نگاهی به خواننده Markdown بیندازید: .INDENT 0.0 .INDENT 3.5 .sp .EX from pelican.readers import BaseReader from pelican.utils import pelican_open from markdown import Markdown class MarkdownReader(BaseReader): enabled = True def read(self, source_path): \(dq\(dq\(dqParse content and metadata of markdown files\(dq\(dq\(dq with pelican_open(source_path) as text: md_extensions = {\(aqmarkdown.extensions.meta\(aq: {}, \(aqmarkdown.extensions.codehilite\(aq: {}} md = Markdown(extensions=md_extensions.keys(), extension_configs=md_extensions) content = md.convert(text) metadata = {} for name, value in md.Meta.items(): name = name.lower() meta = self.process_metadata(name, value[0]) metadata[name] = meta return content, metadata .EE .UNINDENT .UNINDENT .sp ساده است، مگر نه؟ .sp اگر خواننده جدید شما به وابستگی‌های پایتونی اضافی نیاز دارد، باید دستورهای \fBimport\fP مربوط به آن‌ها را در یک بلوک \fBtry...except\fP قرار دهید. سپس در داخل کلاس reader، صفت کلاسی \fBenabled\fP را تنظیم کنید تا موفقیت یا عدم موفقیت در واردسازی را نشان دهد. این کار به کاربران امکان می‌دهد بدون نیاز به نصب ماژول‌ها برای قالب‌هایی که استفاده نمی‌کنند، به استفاده از روش نشانه‌گذاری محبوب خود ادامه دهند. .SS چگونه یک Generator جدید پیاده‌سازی کنیم؟ .sp مولدها دارای دو متد مهم هستند. شما مجبور نیستید هر دو را ایجاد کنید؛ تنها متدهای موجود فراخوانی خواهند شد. .INDENT 0.0 .IP \(bu 2 \fBgenerate_context\fP، که ابتدا برای تمام مولدها فراخوانی می‌شود. هر کاری را که لازم است انجام دهید و در صورت نیاز زمینه سراسری (global context) را به‌روزرسانی کنید. این زمینه بین همه مولدها به اشتراک گذاشته می‌شود و به قالب‌ها منتقل خواهد شد. برای نمونه، متد \fBgenerate_context\fP در \fBPageGenerator\fP تمام برگه‌ها را پیدا می‌کند، آن‌ها را به شیء تبدیل می‌نماید و زمینه را با آن‌ها پر می‌کند. دقت کنید که در این مرحله با استفاده از این زمینه \fIهیچ\fP خروجی تولید نکنید، چرا که احتمال دارد با اثر مولدهای دیگر تغییر کند. .IP \(bu 2 سپس \fBgenerate_output\fP فراخوانی می‌شود. و حدس می‌زنید برای چه کاری ساخته شده؟ بله، تولید خروجی. :) اینجاست که ممکن است بخواهید به زمینه نگاه کنید و متدهای شیء \fBwriter\fP را که به عنوان آرگومان نخست این تابع ارسال شده است، فراخوانی نمایید. در مثال \fBPageGenerator\fP، این متد تمام برگه‌های ثبت‌شده در زمینه سراسری را بررسی کرده و برای هر برگه یافت‌شده، فایلی را روی دیسک (با استفاده از متد \fBwrite_file\fP مربوط به writer) خروجی می‌دهد. .UNINDENT .SS تاریخچه‌ای درباره Pelican .sp \fBهشدار:\fP .INDENT 0.0 .INDENT 3.5 این صفحه برگرفته از گزارشی است که نویسنده اصلی (Alexis Métaireau) بلافاصله پس از نوشتن Pelican در دسامبر ۲۰۱۰ نوشته است. اطلاعات ممکن است به‌روز نباشد. .UNINDENT .UNINDENT .sp برنامه Pelican یک مولد وبلاگ ایستا و ساده است. این برنامه فایل‌های نشانه‌گذاری (در حال حاضر Markdown یا reStructuredText) را تجزیه کرده و یک پوشه HTML حاوی تمام فایل‌ها درون آن تولید می‌کند. من پایتون را برای پیاده‌سازی Pelican انتخاب کردم، چرا که ساده به نظر می‌رسید و با نیازهای من سازگار بود. نمی‌خواستم برای هر چیزی یک کلاس تعریف کنم، اما همچنان می‌خواستم بخش‌های برنامه‌ام پیوستگی سست و ناوابستگی (loosely coupled) داشته باشند. در نهایت مشخص شد که این دقیقاً همان چیزی بود که می‌خواستم. گهگاه به لطف بازخورد برخی کاربران، زمان بسیار کمی از من صرف ارائه اصلاحات روی آن می‌شد. تاکنون دو بار کد Pelican را بازنویسی و بازسازی کرده‌ام؛ که هر بار کمتر از ۳۰ دقیقه طول کشیده است. .SS موارد کاربرد .sp من پیش از این از WordPress استفاده می‌کردم؛ راهکاری که می‌توانید برای مدیریت وبلاگ خود روی یک سرور وب میزبانی کنید. در اکثر اوقات، ترجیح می‌دهم برای نوشتن مقاله‌هایم از زبان‌های نشانه‌گذاری مانند Markdown یا reStructuredText استفاده کنم. برای انجام این کار از vim استفاده می‌کنم. به نظرم مهم است که به افراد اجازه داده شود ابزار مورد نظر خود را برای نوشتن مقاله‌ها انتخاب کنند. از نظر من، یک مدیر وبلاگ تنها باید به شما اجازه دهد هر نوع ورودی را دریافت کرده و آن را به یک وبلاگ تبدیل کنید. این کاری است که Pelican انجام می‌دهد. شما می‌توانید مقاله‌های خود را با استفاده از ابزار و زبان نشانه‌گذاری دلخواهتان بنویسید و سپس یک وبلاگ استاتیک HTML تولید کنید. [تصویر] .sp برای انعطاف‌پذیری کافی، Pelican از قالب‌ها پشتیبانی می‌کند، بنابراین در صورت تمایل می‌توانید به راحتی پوسته‌های دلخواه خود را بنویسید..SS "فرآیند طراحی (Design process)" .sp Pelican بر اساس نیازی که داشتم شکل گرفت. کار را با ایجاد یک برنامهٔ تک‌فایلی شروع کردم و آن را گسترش دادم تا به قابلیت‌های کنونی‌اش برسد. برای شروع، بخش کوتاهی از مستندات را درباره آنچه می‌خواستم انجام دهم نوشتم. سپس، محتوایی را که می‌خواستم تجزیه (parse) کنم (فایل‌های reStructuredText) ایجاد کرده و آزمایش با کد را آغاز کردم. Pelican در اولین نسخهٔ قابل استفاده‌اش ۲۰۰ خط کد داشت و تقریباً شامل ۱۰ تابع و یک کلاس بود. .sp در طول زمان با مشکلات متعددی روبه‌رو شدم و می‌خواستم هنگام استفاده از Pelican، ویژگی‌هایی را به آن اضافه کنم. نخستین تغییری که اعمال کردم، افزودن پشتیبانی از یک فایل تنظیمات بود. ارسال گزینه‌ها از طریق خط فرمان ممکن است، اما در صورت زیاد بودن آن‌ها می‌تواند خسته‌کننده باشد. به همین ترتیب، در طول زمان پشتیبانی از موارد گوناگونی را افزودم: فیدهای Atom، چندین پوسته، پشتیبانی از چندین قالب نشانه‌گذاری و غیره. در مقطعی مشخص شد که ایدهٔ \(dqتنها یک فایل\(dq دیگر برای Pelican مناسب نیست، بنابراین تصمیم گرفتم ساختار آن را بازطراحی کرده و آن را به چندین فایل مختلف تقسیم کنم. .sp من منطق برنامه را به کلاس‌ها و مفاهیم مختلفی تفکیک کردم: .INDENT 0.0 .IP \(bu 2 \fIwriters\fP مسئول تمام فرآیند نوشتن فایل‌ها هستند. آن‌ها مسئول نوشتن فایل‌های .html، فیدهای RSS و امثال آن می‌باشند. از آنجا که این عملیات‌ها معمولاً بسیار استفاده می‌شوند، شیء یک‌بار ایجاد شده و سپس به generatorها ارسال می‌شود. .IP \(bu 2 \fIreaders\fP برای خواندن از قالب‌های مختلف استفاده می‌شوند (در حال حاضر Markdown و reStructuredText، اما سیستم قابل گسترش است). با دادن یک فایل، آن‌ها فراداده (نویسنده، برچسب‌ها، دسته‌بندی و غیره) و محتوا (با قالب‌بندی HTML) را بازمی‌گردانند. .IP \(bu 2 \fIgenerators\fP خروجی‌های مختلف را تولید می‌کنند. به عنوان مثال، Pelican به همراه ArticlesGenerator و PagesGenerator، در میان بقیه موارد، ارائه می‌شود. بر اساس یک پیکربندی، آن‌ها می‌توانند هر آنچه می‌خواهید انجام دهند. در اکثر مواقع، این فرآیند تولید فایل‌ها از ورودی‌ها (ورودی‌های کاربر و فایل‌ها) است. .UNINDENT .sp من همچنین با اشیاء محتوا (contents objects) سروکار دارم. آن‌ها می‌توانند \fBArticles\fP، \fBPages\fP، \fBQuotes\fP یا هر چیز دیگری که بخواهید باشند. آن‌ها در ماژول \fBcontents.py\fP تعریف شده‌اند و نشان‌دهنده محتوایی هستند که توسط برنامه استفاده می‌شود. .SS "جزئیات بیشتر (In more detail)" .sp در اینجا نمایی کلی از کلاس‌های دخیل در Pelican آورده شده است. [تصویر] .sp رابط (interface) واقعاً وجود ندارد و من آن را صرفاً برای شفاف‌تر شدن تصویر کلی افزوده‌ام. من از duck typing استفاده می‌کنم و نه رابط‌ها. .sp در درون برنامه، فرآیند زیر دنبال می‌شود: .INDENT 0.0 .IP \(bu 2 در ابتدا، خط فرمان تجزیه می‌شود و بخشی از محتوای کاربر برای مقداردهی اولیهٔ اشیاء generator مختلف به کار می‌رود. .IP \(bu 2 یک \fBcontext\fP ایجاد می‌شود. این بخش شامل تنظیمات حاصل از خط فرمان و در صورت ارائه، یک فایل تنظیمات است. .IP \(bu 2 متد \fBgenerate_context\fP مربوط به هر generator فراخوانی شده و context را به‌روزرسانی می‌کند. .IP \(bu 2 شیء writer ایجاد شده و به متد \fBgenerate_output\fP مربوط به هر generator داده می‌شود. .UNINDENT .sp من دو فراخوانی انجام می‌دهم زیرا مهم است زمانی که خروجی توسط generatorها تولید می‌شود، context تغییر نکند. به عبارت دیگر، متد نخست یعنی \fBgenerate_context\fP باید context را تغییر دهد، در حالی که متد دوم یعنی \fBgenerate_output\fP نباید این کار را انجام دهد. .sp سپس، این بر عهدهٔ generatorها است که در متدهای \fBgenerate_context\fP و \fBgenerate_content\fP آنچه را می‌خواهند انجام دهند. بررسی کلاس \fBArticlesGenerator\fP به درک برخی مفاهیم دیگر کمک خواهد کرد. آنچه هنگام فراخوانی متد \fBgenerate_context\fP رخ می‌دهد به این صورت است: .INDENT 0.0 .IP \(bu 2 پوشهٔ “path” را خوانده، فایل‌های reStructuredText را جستجو می‌کند، هر یک از آن‌ها را بارگذاری کرده و با آن یک شیء محتوا (\fBArticle\fP) می‌سازد. برای انجام این کار از اشیاء \fBReader\fP استفاده می‌شود. .IP \(bu 2 به‌روزرسانی \fBcontext\fP با تمام آن مقالات. .UNINDENT .sp سپس، متد \fBgenerate_content\fP از \fBcontext\fP و \fBwriter\fP برای تولید خروجی مورد نظر استفاده می‌کند. .SS "تاریخچه انتشار (Release history)" .SS 4.11.0 \- 2025\-01\-15 .INDENT 0.0 .IP \(bu 2 افزودن تنظیمی برای حذف انتخابی فیلترهای Typogrify (#3439) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3439> .IP \(bu 2 افزودن بلوک‌های بیشتر به قالب پایه پوستهٔ Simple، که ایجاد پوسته‌های جدید را از طریق ارث‌بری از پوستهٔ Simple آسان‌تر می‌کند (#3405) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3405> .IP \(bu 2 اصلاح رفتار بارگذاری مجدد خودکار (auto\-reload) هنگام تغییرات در پوسته، محتوا یا تنظیمات. تنظیم پیش‌فرض \fBIGNORE_FILES\fP برای نادیده گرفتن بازگشتی تمام فایل‌های پنهان و همچنین فیلترهای پیش‌فرض \%<https://\:watchfiles\:.helpmanual\:.io/\:api/\:filters/#\:watchfiles\:.DefaultFilter\:.ignore_dirs> از \fBwatchfiles.DefaultFilter\fP\&. (#3441) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3441> .IP \(bu 2 دریافت سال جاری از متغیر محیطی \fBSOURCE_DATE_EPOCH\fP در صورت وجود (#3430) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3430> .IP \(bu 2 افزودن Python 3.13 به ماتریس آزمون و حذف Python 3.8 (#3435) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3435> .IP \(bu 2 الزام به Typogrify 2.1+ و Pygments <2.19 .UNINDENT .SS 4.10.2 \- 2024\-11\-27 .INDENT 0.0 .IP \(bu 2 تغییر مقدار پیش‌فرض تنظیم \fBIGNORE_FILES\fP برای نادیده گرفتن تمام فایل‌های پنهان .IP \(bu 2 رفع مشکل رعایت نشدن \fBSUMMARY_MAX_PARAGRAPHS\fP در برخی ترکیب‌ها با \fBSUMMARY_MAX_LENGTH\fP .UNINDENT .SS 4.10.1 \- 2024\-09\-28 .INDENT 0.0 .IP \(bu 2 رفع خطا هنگام اجرای \fBpelican \-r \-l\fP .IP \(bu 2 اصلاح مدیریت symlink در \fBpelican\-themes\fP .UNINDENT .SS 4.10.0 \- 2024\-09\-16 .INDENT 0.0 .IP \(bu 2 افزودن تنظیمی برای مشخص کردن خلاصه از طریق تعداد پاراگراف .IP \(bu 2 افزودن وضعیتی جدید برای صرف‌نظر از تولید یک پست .IP \(bu 2 افزودن تنظیمی برای پیوست پارامتر \fBref\fP به پیوندهای موجود در فیدها .IP \(bu 2 پیکربندی گرداننده گزارش‌گیری (logging handler) از طریق گزینه خط فرمان \fB\-\-log\-handler\fP .IP \(bu 2 حل پیوندهای درون‌سایتی در خلاصه‌ها .IP \(bu 2 هشدار هنگام پردازش نشدن فایل‌ها به دلیل غیرفعال بودن readerها .IP \(bu 2 افزودن واردکننده پست‌های Medium .IP \(bu 2 بهبود گردش کار (workflow) در GitHub Pages .IP \(bu 2 بهبود پوشش آزمون کد .IP \(bu 2 ترجمه مستندات به چینی ساده‌شده .UNINDENT.SS 4.9.1 \- 2023\-11\-15 .INDENT 0.0 .IP \(bu 2 اطمینان از نصب بودن وابستگی \fBtzdata\fP در Windows .UNINDENT .SS 4.9.0 \- 2023\-11\-12 .INDENT 0.0 .IP \(bu 2 ارتقای کدها به نسخه حداقل پشتیبانی‌شده جدید Python: 3.8 .IP \(bu 2 پشتیبانی از \fBpathlib.Path\fP در تنظیمات (#2758) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2758> .IP \(bu 2 بهبودهای گوناگون در پوسته Simple (#2976 \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2976> و #3234 \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3234>) .IP \(bu 2 استفاده از Furo به‌عنوان پوسته مستندات Sphinx (#3023) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3023> .IP \(bu 2 تنظیم پیش‌فرض حداکثر ۱۰۰ مقاله در فیدها (#3127) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3127> .IP \(bu 2 افزودن متغیر \fBperiod_archives common context\fP (#3148) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3148> .IP \(bu 2 استفاده از \fBwatchfiles\fP به‌عنوان زیرسیستم پایش فایل (#3151) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3151> .IP \(bu 2 افزودن گردش کار GitHub Actions برای GitHub Pages (#3189) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3189> .IP \(bu 2 امکان استفاده از dataclassها در تنظیمات (#3204) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3204> .IP \(bu 2 تغییر ابزار ساخت به PDM به‌جای Setuptools/Poetry (#3220) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3220> .IP \(bu 2 ارائه یک آزمون Jinja به نام \fBplugin_enabled\fP برای پوسته‌ها (#3235) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3235> .IP \(bu 2 حفظ ترتیب اتصال در Blinker (#3238) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3238> .IP \(bu 2 حذف نمادهای شبکه‌های اجتماعی از پوسته پیش‌فرض \fBnotmyidea\fP (#3240) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3240> .IP \(bu 2 حذف قابلیت غیرقابل اطمینان \fBWRITE_SELECTED\fP (#3243) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3243> .IP \(bu 2 واردکننده: گزارش پیوندهای ویدئویی جاسازی‌شده شکسته هنگام وارد کردن از Tumblr (#3177) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:3177> .IP \(bu 2 واردکننده: حذف افزودن خط جدید هنگام پیمایش انواع پست‌های Photo (#3178) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:3178> .IP \(bu 2 واردکننده: اجبار تبدیل برچسب زمانی در واردکننده Tumblr به فرمت UTC با آفست (#3221) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3221> .IP \(bu 2 واردکننده: استفاده از tempfile برای فایل میانی HTML در Pandoc (#3221) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3221> .IP \(bu 2 تغییر لینترها به Ruff (#3223) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3223> .UNINDENT .SS 4.8.0 \- 2022\-07\-11 .INDENT 0.0 .IP \(bu 2 استفاده از مقادیر JSON برای تنظیمات اضافی در الگوی وظایف Invoke (#2994) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2994> .IP \(bu 2 افزودن برچسب محتوا برای پیوندها، جهت بهبود مواردی مانند کارت‌های اجتماعی Twitter (#3001) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3001> .IP \(bu 2 بهبود رفتار شمارش کلمات هنگام تولید خلاصه (#3002) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:3002> .UNINDENT .SS 4.7.2 \- 2022\-02\-09 .INDENT 0.0 .IP \(bu 2 رفع خطای تجزیه نادرست پارامترهای ارائه‌شده از طریق پرچم‌های گزینه \fI\-e\fP / \fI\-\-extra\-settings\fP (#2938) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2938> .IP \(bu 2 افزودن الگوی \fBcategories.html\fP به پوسته پیش‌فرض (#2973) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2973> .IP \(bu 2 مستندسازی نحوه استفاده از افزونه‌ها برای تزریق محتوا (#2922) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2922> .UNINDENT .SS 4.7.1 \- 2021\-10\-12 .INDENT 0.0 .IP \(bu 2 گسترش ثبت وقایع غنی به مؤلفه سرور (#2927) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2927> .IP \(bu 2 رفع مشکلی که در آن فراداده‌های نشانه‌گذاری‌شده برای دور انداخته شدن، کَش می‌شدند (#2926) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2926> .IP \(bu 2 تنظیم پسوند در سرور جهت امکان تغییر مسیر در صورت نیاز (#2931) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2931> .IP \(bu 2 افزودن نوع‌های MIME برای فونت‌های وب (#2929) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2929> .IP \(bu 2 توزیع داده‌های نمونه مورد استفاده برای اجرای آزمون‌ها (#2935) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2935> .IP \(bu 2 افزودن Python 3.10 به ماتریس آزمایش‌ها .UNINDENT .SS 4.7.0 \- 2021\-10\-01 .INDENT 0.0 .IP \(bu 2 بهبود نمایش پوسته پیش‌فرض در تلفن‌های همراه و دیگر دستگاه‌های با صفحه نمایش کوچک (#2914) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2914> .IP \(bu 2 افزودن پشتیبانی از مقاله‌های پنهان (#2866) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2866> .IP \(bu 2 بهبود رفتار شمارش کلمات هنگام تولید خلاصه برای CJK و دیگر محلی‌سازی‌ها (#2864) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2864> .IP \(bu 2 افزودن نشانگر چرخان پیشرفت حین تولید (#2869) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2869> و گزارش‌گیری غنی‌تر (#2897) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2897>، هر دو از طریق Rich \%<https://\:github\:.com/\:willmcgugan/\:rich> .IP \(bu 2 وظایف \fBserve\fP و \fBlivereload\fP در Invoke اکنون به‌طور خودکار مرورگر وب را باز کرده و وب‌سایت محلی را نشان می‌دهند (#2764) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2764> .IP \(bu 2 پشتیبانی از برخی کدهای قالب تاریخ مورد استفاده در تاریخ‌های ISO (#2902) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2902> .IP \(bu 2 مستندسازی نحوه افزودن یک writer جدید (#2901) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2901> .UNINDENT .SS 4.6.0 \- 2021\-03\-23 .INDENT 0.0 .IP \(bu 2 افزودن الگوی URL جدید به \fBPAGINATION_PATTERNS\fP برای آخرین صفحه در فهرست (#1401) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:1401> .IP \(bu 2 افزایش سرعت وظیفه \fBlivereload\fP در Invoke از طریق کَش کردن (#2847) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2847> .IP \(bu 2 نادیده گرفتن مقدار بازگشتی \fBNone\fP از سیگنال \fBget_generators\fP (#2850) \%<https://\:github\:.com/\:getpelican/\:pelican/\:pull/\:2850> .IP \(bu 2 تسهیل حداقل نسخه وابستگی‌ها و حذف محدودیت‌های بالایی .UNINDENT .SS 4.5.4 \- 2021\-01\-04 .sp جایگزینی تعاریف افزونه در تنظیمات با بازنمودهای رشته‌ای پس از ثبت، تا به‌درستی در حافظه موقت (کَش) ذخیره شوند (#2828) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:2828>\&. .SS 4.5.3 \- 2020\-12\-01 .sp رفع خطای پیش‌آمده در PR #2821 .SS 4.5.2 \- 2020\-11\-22 .sp بهبود گزارش‌گیری از generators و بارگذارهای writer .SS 4.5.1 \- 2020\-11\-02 .INDENT 0.0 .IP \(bu 2 بازنویسی ساختار کشف پیوندهای درون‌سایتی به‌منظور تطبیق با انعطاف بیشتر (#2646) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:2646> .IP \(bu 2 رفع اجرای دوباره افزونه‌ها در حالت بارگذاری خودکار (#2817) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:2817> .IP \(bu 2 افزودن هشدار برای استفاده از \fBfrom pelican import signals\fP به‌جای \fBimport pelican.signals\fP (#2805) \%<https://\:github\:.com/\:getpelican/\:pelican/\:issues/\:2805> .UNINDENT.SS 4.5.0 \- 2020\-08\-20 .INDENT 0.0 .IP \(bu 2 افزودن پشتیبانی از افزونه‌های فضای‌نام؛ فهرست کردن افزونه‌ها از طریق دستور \fBpelican\-plugins\fP .IP \(bu 2 بازنویسی تنظیمات از طریق پرچم‌های گزینه خط فرمان \fB\-e\fP / \fB\-\-extra\-settings\fP .IP \(bu 2 افزودن تنظیمات برای متغیرهای سراسری و آزمون‌های سفارشی Jinja .IP \(bu 2 سفارشی‌سازی علامت تعلیق در خلاصه مقاله‌ها از طریق تنظیم \fBSUMMARY_END_SUFFIX\fP .IP \(bu 2 سفارشی‌سازی کار با خط تیره در Typogrify با تنظیم جدید \fBTYPOGRIFY_DASHES\fP .IP \(bu 2 پشتیبانی از یونیکد هنگام تولید نامک‌ها (slugs) .IP \(bu 2 پشتیبانی از تولید فایل‌های \fB\&.adoc\fP برای Asciidoc در واردکننده Pelican .IP \(bu 2 بهبود تجربه کاربری هنگام خروج از کارساز وب \fBpelican \-\-listen\fP .IP \(bu 2 بهبود قالب وظایف Invoke .IP \(bu 2 گنجاندن آزمون‌ها در بسته‌های توزیع کد مبدا .IP \(bu 2 تغییر بستر ادغام مداوم (CI) از Travis به GitHub Actions .IP \(bu 2 حذف پشتیبانی از Python 2.7 .UNINDENT .SS 4.2.0 \- 2019\-10\-17 .INDENT 0.0 .IP \(bu 2 پشتیبانی از SVGهای درون‌خطی؛ عدم تلقی عنوان‌های موجود در SVGها به عنوان عنوان‌های HTML .IP \(bu 2 افزودن دسته‌بندی به فیدها (علاوه بر برچسب‌ها) .IP \(bu 2 بهبود مستندات مربوط به فیلدهای فراداده محتوا .IP \(bu 2 افزودن مستندات برای گنجاندن سایر فایل‌های Markdown/reST در محتوا .UNINDENT .SS 4.1.3 \- 2019\-10\-09 .INDENT 0.0 .IP \(bu 2 اصلاح مستندات شروع سریع پیرامون \fBpelican \-\-listen\fP .IP \(bu 2 تنظیم نشانی گوش دادن پیش‌فرض روی 127.0.0.1 .IP \(bu 2 افزودن وابستگی اضافی/اختیاری Markdown به setup.py .IP \(bu 2 استفاده از نحو صحیح درگاه SSH برای rsync در tasks.py .IP \(bu 2 متمرکز کردن مدیریت تمام تنظیمات منسوخ‌شده در یک بخش .IP \(bu 2 افزودن نشانی‌های اینترنتی پروژه‌های مرتبط برای نمایش در PyPI .IP \(bu 2 نادیده گرفتن برخی از آزمون‌ها در Windows که به دلیل تفاوت در سیستم فایل موفق نمی‌شدند .UNINDENT .SS 4.1.2 \- 2019\-09\-23 .sp اصلاح pelican.settings.load_source جهت جلوگیری از مشکلات حافظه موقت \- PR #2621 .SS 4.1.1 \- 2019\-08\-23 .INDENT 0.0 .IP \(bu 2 افزودن AutoPub برای انتشار خودکار نگارش‌ها هنگام ادغام PR .IP \(bu 2 افزودن کلاس‌های CSS برای شکل‌های reStructuredText .IP \(bu 2 ارسال \fBargv\fP به نقطه ورود \fBmain\fP در Pelican .IP \(bu 2 تنظیم وضعیت پیش‌فرض محتوا روی یک رشته خالی به جای \fBNone\fP .UNINDENT .SS 4.1.0 \- 2019\-07\-14 .INDENT 0.0 .IP \(bu 2 بارگذاری مجدد و زنده مرورگر پس از تغییر فایل‌ها (ارائه‌شده از طریق وظیفه Invoke) .IP \(bu 2 افزودن \fBpyproject.toml\fP که توسط Poetry مدیریت می‌شود .IP \(bu 2 پشتیبانی از اجرای \fBpython \-m pelican\fP .IP \(bu 2 افزودن صفت مسیر نسبی مبدا به محتوا .IP \(bu 2 مجاز بودن دایرکتوری‌ها در \fBEXTRA_PATH_METADATA\fP .IP \(bu 2 افزودن متغیر \fBall_articles\fP به صفحه‌های دوره‌ای (برای قابلیت پست‌های اخیر) .IP \(bu 2 بهبود خروجی حالت اشکال‌زدایی (debug) .IP \(bu 2 حذف خلاصه‌های خالی یا تکراری از فید Atom .IP \(bu 2 رفع اشکالات در صفحه‌بندی، pelican\-import، pelican\-quickstart و واردکننده فید .UNINDENT .SS 4.0.1 (2018\-11\-30) .INDENT 0.0 .IP \(bu 2 بازسازی ساختار ثبت وقایع در \fBpelican.server\fP .IP \(bu 2 رفع اشکالی که در آن تمام فایل‌های ایستا به عنوان \(dqdraft\(dq پردازش می‌شدند .IP \(bu 2 رفع اشکال در خودکارسازی Invoke/Makefile، واردکننده و سایر موارد متفرقه .UNINDENT .sp در صورت ارتقا از 3.7.x یا قبل‌تر، لطفاً توجه داشته باشید که تنظیمات مربوط به نامک در 4.0+ به جای \fB%s\fP از \fB{slug}\fP و/یا \fB{lang}\fP استفاده می‌کنند. اگر با تنظیماتی به سبک \fB%s\fP مواجه شود، Pelican هشداری نمایش می‌دهد و به تنظیمات پیش‌فرض بازمی‌گردد. ممکن است برخی پوسته‌های ارائه‌شده توسط کاربران تلاش کنند مقادیر تنظیمات را قالب‌بندی کنند اما هنگام ساخت سایت با خطای \fBTypeError\fP مواجه شوند. در چنین مواردی، پوسته باید به‌روزرسانی شود. برای مثال، به جای \fBTAG_FEED_ATOM|format(tag.slug)\fP، از \fBTAG_FEED_ATOM.format(slug=tag.slug)\fP استفاده کنید. .SS 4.0.0 (2018\-11\-13) .INDENT 0.0 .IP \(bu 2 جایگزینی اسکریپت \fBdevelop_server.sh\fP با \fBpelican \-\-listen\fP .IP \(bu 2 بهبود رفتار کپی/پیوند برای فایل‌های ایستای حجیم (مانند ویدیوها) .IP \(bu 2 نحو جدید \fB{static}\fP برای پیوند به محتوای ایستا؛ محتوایی که توسط \fB{static}\fP و \fB{attach}\fP پیوند داده شده باشد، به‌طور خودکار کپی می‌شود حتی اگر در \fBSTATIC_PATHS\fP نباشد .IP \(bu 2 صفحه‌ها اکنون می‌توانند دارای وضعیت \fBdraft\fP باشند .IP \(bu 2 نمایش تنظیمات جاری با استفاده از پرچم جدید \fB\-\-print\-settings\fP .IP \(bu 2 تمام تنظیمات مربوط به نامک‌ها اکنون به جای \fB%s\fP از \fB{slug}\fP و/یا \fB{lang}\fP استفاده می‌کنند. اگر با تنظیماتی به سبک \fB%s\fP مواجه شود، Pelican هشداری نمایش داده و به تنظیمات پیش‌فرض بازمی‌گردد. .IP \(bu 2 سیگنال‌های جدید: \fBfeed_generated\fP و \fBpage_generated_write_page\fP .IP \(bu 2 جایگزینی Fabric با Invoke و قالب \fBfabfile.py\fP با \fBtasks.py\fP .IP \(bu 2 جایگزینی \fBPAGINATED_DIRECT_TEMPLATES\fP با \fBPAGINATED_TEMPLATES\fP، گسترش کنترل صفحه‌بندی به همه قالب‌ها و متغیر ساختن اندازه صفحه .IP \(bu 2 جایگزینی \fBSLUG_SUBSTITUTIONS\fP (و موارد مرتبط) با \fBSLUG_REGEX_SUBSTITUTIONS\fP برای کنترل دقیق‌تر .IP \(bu 2 مقدار \fB\(aq{base_name}\(aq\fP در تنظیم \fBPAGINATION_PATTERNS\fP دیگر عبارت \fB\(aqbar\(aq\fP را از \fB\(aqfoo/bar.html\(aq\fP حذف نمی‌کند (مگر اینکه \fB\(aqbar\(aq == \(aqindex\(aq\fP باشد). .IP \(bu 2 تنظیمات \fBARTICLE_ORDER_BY\fP و \fBPAGE_ORDER_BY\fP اکنون بر ۱) صفحه‌های دسته‌بندی، برچسب و نویسنده ۲) فیدها ۳) مقاله‌ها و صفحه‌های پیش‌نویس و پنهان نیز اثر می‌گذارند .IP \(bu 2 تنظیمات جدید \fBARTICLE_TRANSLATION_ID\fP و \fBPAGE_TRANSLATION_ID\fP برای مشخص کردن ویژگی‌های فراداده به‌کاررفته در شناسایی/غیرفعال‌سازی ترجمه‌ها .IP \(bu 2 امکان تجزیه چند مورد تکرار برچسب‌های فراداده به صورت یک فهرست در خواننده HTML .IP \(bu 2 واردکننده جدید نسخه پشتیبان XML در Blogger .IP \(bu 2 واردکننده Wordpress اکنون در صورتی که فایل‌ها با \fB\-\-wp\-attach\fP بارگیری شده باشند، پیوندهای فایل را به‌روزرسانی می‌کند تا به نسخه‌های محلی اشاره کنند. .IP \(bu 2 واردکننده دیگر خط‌های جدید اضافی اضافه نمی‌کند، تا از شکسته‌شدن مشخصه‌های HTML جلوگیری شود. .IP \(bu 2 کارساز Pelican اکنون هنگام حل‌وفصل \fBfoo\fP، فایل‌های \fBfoo.html\fP و \fBfoo/index.html\fP را بر \fBfoo/\fP اولویت می‌دهد. .UNINDENT.SS 3.7.1 (2017\-01\-10) .INDENT 0.0 .IP \(bu 2 رفع مشکلات مربوط به locale در اسکریپت Quickstart .IP \(bu 2 مشخص کردن کدگذاری برای README و CHANGELOG در setup.py .UNINDENT .SS 3.7.0 (2016\-12\-12) .INDENT 0.0 .IP \(bu 2 فیدهای Atom علاوه بر \fB<summary>\fP، تگ \fB<content>\fP را نیز در خروجی می‌آورند .IP \(bu 2 فیدهای Atom از \fB<published>\fP برای تاریخ انتشار اولیه و از \fB<updated>\fP برای ویرایش‌ها استفاده می‌کنند .IP \(bu 2 ساده‌سازی تولید شناسه فید Atom و پشتیبانی از قطعه‌های نشانی وب (URL fragments) .IP \(bu 2 تولید فیدهای دسته‌بندی با عنوان‌های مختص هر دسته .IP \(bu 2 فیدهای RSS اکنون به‌طور پیش‌فرض به جای کل محتوا، خلاصه را ارائه می‌دهند؛ برای بازگشت به رفتار پیشین، \fBRSS_FEED_SUMMARY_ONLY = False\fP را تنظیم کنید .IP \(bu 2 جایگزینی تنظیم \fBMD_EXTENSIONS\fP با \fBMARKDOWN\fP .IP \(bu 2 جایگزینی \fBJINJA_EXTENSIONS\fP با تنظیم پایدارتر \fBJINJA_ENVIRONMENT\fP .IP \(bu 2 بهبود منطق کوتاه‌سازی خلاصه برای مدیریت نویسه‌های خاص و تگ‌های چندخطی، با استفاده از تجزیه‌کننده HTML به جای عبارت‌های باقاعده .IP \(bu 2 لحاظ کردن خلاصه هنگام جستجو برای جایگزینی پیوندهای درون‌سایتی .IP \(bu 2 پیوند دادن به نویسندگان و نمایه از طریق نحو \fB{author}name\fP و \fB{index}\fP .IP \(bu 2 بازنویسی نام ابزارک‌ها از طریق \fBLINKS_WIDGET_NAME\fP و \fBSOCIAL_WIDGET_NAME\fP .IP \(bu 2 افزودن گزینه \fBINDEX_SAVE_AS\fP برای لغو مقدار پیش‌فرض \fBindex.html\fP .IP \(bu 2 حذف متغیر زمینه \fBPAGES\fP برای قالب‌ها به نفع \fBpages\fP .IP \(bu 2 گزینه \fBSLUG_SUBSTITUTIONS\fP اکنون عناصر سه‌تایی را می‌پذیرد که به نامک‌های نشانی وب اجازه می‌دهد حاوی نویسه‌های غیرحرفی\-عددی باشند .IP \(bu 2 امکان کنترل نامک‌های برچسب و دسته‌بندی با دقت بیشتر با استفاده از تنظیمات \fBTAG_SUBSTITUTIONS\fP و \fBCATEGORY_SUBSTITUTIONS\fP .IP \(bu 2 امکان کنترل نامک‌های نویسنده با دقت بیشتر با استفاده از تنظیم \fBAUTHOR_SUBSTITUTIONS\fP .IP \(bu 2 امکان تعریف \fBDEFAULT_DATE\fP به صورت رشته .IP \(bu 2 استفاده از \fBmtime\fP به جای \fBctime\fP هنگامی که \fBDEFAULT_DATE = \(aqfs\(aq\fP باشد .IP \(bu 2 افزودن گزینه \fB\-\-fatal=errors|warnings\fP برای استفاده در یکپارچه‌سازی مداوم (CI) .IP \(bu 2 هنگام استفاده از حافظه موقت در سطح تولیدکننده، اطمینان حاصل می‌شود که فایل‌های ذخیره‌شده پیشین به جای فقط فایل‌های جدید پردازش شوند. .IP \(bu 2 افزودن اطلاعات نسخه Python و Pelican به خروجی اشکال‌زدایی .IP \(bu 2 بهبود سازگاری با Python 3.5 .IP \(bu 2 انطباق با رهنمودهای PEP8 و اعمال آن‌ها .IP \(bu 2 جایگزینی جداول در مستندات تنظیمات با دستورالعمل‌های \fBdata::\fP .UNINDENT .SS 3.6.3 (2015\-08\-14) .INDENT 0.0 .IP \(bu 2 رفع مشکل مجوزهای دسترسی در تاربال نسخه منتشرشده .UNINDENT .SS 3.6.2 (2015\-08\-01) .INDENT 0.0 .IP \(bu 2 رفع خطاهای نصب مرتبط با یونیکد در آزمون‌ها .IP \(bu 2 عدم نمایش صفحه‌بندی در قالب \fBnotmyidea\fP در صورتی که فقط یک صفحه وجود دارد .IP \(bu 2 در دسترس قرار دادن صفحات پنهان در زمینه (context) .IP \(bu 2 بهبود مقایسه URLWrapper .UNINDENT .SS 3.6.0 (2015\-06\-15) .INDENT 0.0 .IP \(bu 2 غیرفعال‌سازی پیش‌فرض حافظه موقت برای جلوگیری از سردرگمی‌های احتمالی .IP \(bu 2 بهبود رفتار حافظه موقت و جایگزینی \fBpickle\fP با \fBcpickle\fP .IP \(bu 2 امکان استفاده از محتوای Markdown یا reST در فیلدهای فراداده به جز \fBsummary\fP .IP \(bu 2 پشتیبانی از فهرست‌های نویسنده/برچسب جداشده با نقطه‌ویرگول .IP \(bu 2 بهبود انعطاف‌پذیری در مرتب‌سازی مقاله‌ها .IP \(bu 2 افزودن آرگومان \fB\-\-relative\-urls\fP .IP \(bu 2 پشتیبانی از شنود سرور توسعه (devserver) روی نشانی‌هایی به جز localhost .IP \(bu 2 یکپارچه‌سازی گرداننده‌های سرور HTTP در سرتاسر برنامه به \fBpelican.server\fP .IP \(bu 2 مدیریت پیوندهای درون‌سایتی به پست‌های پیش‌نویس .IP \(bu 2 انتقال \fBtag_cloud\fP از هسته به افزونه .IP \(bu 2 بارگذاری منابع خارجی در قالب پیش‌فرض از طریق HTTPS .IP \(bu 2 درون‌ریزی پیش‌نویس‌ها از فایل XML وردپرس .IP \(bu 2 بهبود پشتیبانی برای کاربران ویندوز .IP \(bu 2 ارتقای ثبت وقایع و مجموعه آزمون‌ها .IP \(bu 2 پاک‌سازی و بازسازی ساختار کدها .IP \(bu 2 سیگنال‌های جدید: \fBall_generators_finalized\fP و \fBpage_writer_finalized\fP .UNINDENT .SS 3.5.0 (2014\-11\-04) .INDENT 0.0 .IP \(bu 2 معرفی تنظیمات \fBARTICLE_ORDER_BY\fP و \fBPAGE_ORDER_BY\fP برای کنترل ترتیب مقاله‌ها و صفحات. .IP \(bu 2 گنجاندن اطلاعات منطقه زمانی در تاریخ‌های نمایش‌یافته در قالب‌ها. .IP \(bu 2 نمایان ساختن نام خواننده (reader) در فراداده‌های مقاله‌ها و صفحات. .IP \(bu 2 افزودن قابلیت ذخیره‌سازی فایل‌های ایستا در کنار محتوا در همان دایرکتوری مقاله‌ها و صفحات با استفاده از \fB{attach}\fP در مسیر. .IP \(bu 2 جلوگیری از ایجاد استثنا در Pelican هنگام وجود فراداده‌های تکراری در یک فایل Markdown. .IP \(bu 2 معرفی تنظیم \fBTYPOGRIFY_IGNORE_TAGS\fP جهت افزودن تگ‌های HTML که باید توسط Typogrify نادیده گرفته شوند. .IP \(bu 2 افزودن قابلیت استفاده از \fB\-\fP در قالب‌های تاریخ برای حذف صفر‌های ابتدایی. برای مثال، \fB%\-d/%\-m/%y\fP اکنون منجر به تاریخ \fB9/8/12\fP خواهد شد\&. .IP \(bu 2 اطمینان از غیرفعال‌سازی صحیح تولید فید در جریان پیکربندی راه‌اندازی سریع (quickstart). .IP \(bu 2 رفع مشکل تطابق نادرست دایرکتوری‌های فرعی در \fBPAGE_EXCLUDES\fP و \fBARTICLE_EXCLUDES\fP\&. .IP \(bu 2 معرفی تنظیم \fBSTATIC_EXCLUDE\fP برای افزودن استثناهای فایل‌های ایستا. .IP \(bu 2 رفع اشکال هنگام استفاده از \fBPAGINATION_PATTERNS\fP در زمانی که \fBRELATIVE_URLS\fP فعال است. .IP \(bu 2 رفع مشکلی در تولید فید که باعث می‌شد پیوندها هنگام استفاده از سایر localeها از زبان نادرستی برای نام ماه‌ها استفاده کنند. .IP \(bu 2 رفع مشکلی که در آن فهرست نویسندگان در قالب ساده به‌درستی قالب‌بندی نمی‌شد. .IP \(bu 2 رفع مشکلی در هنگام تجزیه نشانی‌های وب غیررشته‌ای از تنظیمات. .IP \(bu 2 بهبود یکدستی پیام‌های اشکال‌زدایی و هشدار. .UNINDENT.SS 3.4.0 (2014\-07\-01) .INDENT 0.0 .IP \(bu 2 افزایش سرعت تولید محتوا از طریق سازوکار جدید کش‌گذاری (caching) .IP \(bu 2 افزودن امکان تولید انتخابی پست‌ها (به جای ساخت همیشگی کل سایت) .IP \(bu 2 بهبودهای متعدد در مستندات، از جمله تغییر به پوستهٔ زیباتر RtD .IP \(bu 2 افزودن پشتیبانی از چندین مسیر محتوا و افزونه .IP \(bu 2 افزودن فیلد فرادادهٔ \fB:modified:\fP به عنوان مکمل \fB:date:\fP\&. برای مشخص‌کردن آخرین تاریخ و زمان به‌روزرسانی مقاله به‌طور مستقل از تاریخ و زمان انتشار آن به کار می‌رود. .IP \(bu 2 افزودن پشتیبانی از چندین نویسنده از طریق فیلد فرادادهٔ جدید \fB:authors:\fP .IP \(bu 2 پایش تغییرات در دایرکتوری‌های ایستا در حالت بازتولید خودکار .IP \(bu 2 افزودن پالایه‌ها برای محدود کردن خروجی ثبت وقایع در صورت تمایل .IP \(bu 2 افزودن پشتیبانی از زبان به پیش‌نویس‌ها .IP \(bu 2 افزودن تنظیم \fBSLUGIFY_SOURCE\fP برای کنترل چگونگی ایجاد نامک‌های (slugs) پست‌ها .IP \(bu 2 رفع مشکلات متعدد مربوط به محلی‌سازی (locale) و کدگذاری .IP \(bu 2 اِعمال فیلتر Typogrify بر خلاصهٔ پست‌ها .IP \(bu 2 حفظ فراداده‌های فایل (مانند برچسب‌های زمانی) هنگام رونوشت فایل‌های ایستا در خروجی .IP \(bu 2 انتقال پشتیبانی از AsciiDoc از هستهٔ Pelican به یک افزونهٔ جداگانه .IP \(bu 2 تولید پیوندهای درون‌خطی به جای پیوندهای ارجاعی در هنگام وارد کردن محتوا .IP \(bu 2 بهبود رفتار کار با تنظیم \fBIGNORE_FILES\fP .IP \(bu 2 گریز (escape) صحیح نویسه‌های نمادین در نام برچسب‌ها (مانند \fBC++\fP) .IP \(bu 2 تغییرات جزئی برای سازگاری با Python 3.4 .IP \(bu 2 افزودن چندین سیگنال جدید .UNINDENT .SS 3.3.0 (2013\-09\-24) .INDENT 0.0 .IP \(bu 2 حذف پشتیبانی از Python 3.2 به نفع Python 3.3 .IP \(bu 2 افزودن \fBFabfile\fP جهت امکان استفاده از Fabric به جای Make برای خودکارسازی گردش کار .IP \(bu 2 تنظیم \fBOUTPUT_RETENTION\fP می‌تواند برای جلوگیری از حذف فراداده‌ها (مانند داده‌های VCS نظیر \fB\&.hg\fP و \fB\&.git\fP) از دایرکتوری خروجی به کار رود .IP \(bu 2 واردسازی محتوا از Tumblr .IP \(bu 2 بهبود منطق و یکدستی هنگام پاک‌سازی پوشهٔ خروجی .IP \(bu 2 بهبود نسخه‌بندی مستندات و خودکارسازی انتشار .IP \(bu 2 بهبود انعطاف‌پذیری صفحه‌بندی .IP \(bu 2 تغییر نام سیگنال‌ها برای یکدستی بیشتر (ممکن است برخی افزونه‌ها نیازمند به‌روزرسانی باشند) .IP \(bu 2 انتقال استخراج فراداده از مولدها (generators) به خواننده‌ها (readers)؛ استخراج فراداده دیگر مختص مقاله‌ها نیست .IP \(bu 2 منسوخ شدن \fBFILES_TO_COPY\fP به نفع \fBSTATIC_PATHS\fP و \fBEXTRA_PATH_METADATA\fP .IP \(bu 2 خلاصه‌ها در پست‌های Markdown دیگر شامل پانویس‌ها نمی‌شوند .IP \(bu 2 حذف فاصله‌های سفید غیرضروری در خروجی از طریق پارامتر \fBlstrip_blocks\fP در Jinja .IP \(bu 2 انتقال تولید PDF از هسته به افزونه .IP \(bu 2 جایگزینی تنظیم \fBMARKUP\fP با \fBREADERS\fP .IP \(bu 2 افزودن هشدار در صورت عدم وجود ویژگی \fBalt\fP در برچسب img .IP \(bu 2 افزودن پشتیبانی از \fB{}\fP در نحو پیوندهای نسبی، علاوه بر \fB||\fP .IP \(bu 2 افزودن پشتیبانی از پیوندهای نسبی \fB{tag}\fP و \fB{category}\fP .IP \(bu 2 افزودن سیگنال \fBcontent_written\fP .UNINDENT .SS "3.2.1 و 3.2.2" .INDENT 0.0 .IP \(bu 2 تسهیل گنجاندن در مجموعه پورت‌های FreeBSD (Ports Collection) .UNINDENT .SS 3.2 (2013\-04\-24) .INDENT 0.0 .IP \(bu 2 پشتیبانی از Python 3! .IP \(bu 2 امکان تغییر مسیر ذخیره‌سازی صفحه از طریق فراداده (برای نمونه امکان استفاده از یک صفحهٔ ایستا به عنوان صفحهٔ اصلی سایت) .IP \(bu 2 بایگانی‌های دوره‌ای زمانی (بایگانی سالانه، ماهانه و روزانهٔ پست‌ها) .IP \(bu 2 واردسازی وبلاگ از Posterous .IP \(bu 2 بهبود واردسازی وبلاگ از WordPress .IP \(bu 2 انتقال افزونه‌ها به مخزن جداگانه .IP \(bu 2 بهبود تجزیه‌کنندهٔ HTML .IP \(bu 2 فراهم شدن قابلیت نمایش یا پنهان‌سازی دسته‌ها در منو با استفاده از گزینهٔ \fBDISPLAY_CATEGORIES_ON_MENU\fP .IP \(bu 2 امکان چشم‌پوشی از فایل‌ها در بازتولید خودکار با استفاده از تنظیم \fBIGNORE_FILES\fP .IP \(bu 2 بهبود بازخورد پس از تولید به کاربر .IP \(bu 2 برای پست‌های چندزبانه، استفاده از فراداده جهت تعیین مورد اصلی و ترجمه‌شده .IP \(bu 2 افزودن \fB\&.mdown\fP به فهرست پسوندهای فایل Markdown پشتیبانی‌شده .IP \(bu 2 تولید نشانی‌های وب نسبی نسبت به سند (\fBRELATIVE_URLS\fP) اکنون به‌طور پیش‌فرض غیرفعال است .UNINDENT.SS 3.1 (2012\-12\-04) .INDENT 0.0 .IP \(bu 2 واردکننده اکنون به‌طور پیش‌فرض اسلاگ‌ها را در فایل‌ها ذخیره می‌کند. این ویژگی می‌تواند با گزینهٔ \fB\-\-disable\-slugs\fP غیرفعال شود. .IP \(bu 2 بهبود مدیریت پیوندها به منابع درون‌سایتی .IP \(bu 2 اطمینان از اینکه واردکردن از WordPress برای همه انواع پایان خط‌ها در محتوای پست، بندها (پاراگراف‌ها) را اضافه می‌کند .IP \(bu 2 رمزگشایی موجودیت‌های HTML در عناوین پست‌های WordPress هنگام وارد کردن .IP \(bu 2 بهبود ظاهر آیکون LinkedIn در پوسته پیش‌فرض .IP \(bu 2 افزودن پشتیبانی از آیکون‌های شبکه‌های اجتماعی GitHub و +Google در پوسته پیش‌فرض .IP \(bu 2 بهینه‌سازی آیکون‌های شبکه‌های اجتماعی .IP \(bu 2 افزودن \fBFEED_ALL_ATOM\fP و \fBFEED_ALL_RSS\fP برای تولید خوراک‌های شامل همه پست‌ها صرف‌نظر از زبان آن‌ها .IP \(bu 2 تقسیم \fBTRANSLATION_FEED\fP به \fBTRANSLATION_FEED_ATOM\fP و \fBTRANSLATION_FEED_RSS\fP .IP \(bu 2 اکنون می‌توان خوراک‌های مختلف را به‌صورت جداگانه فعال یا غیرفعال کرد .IP \(bu 2 امکان خالی بودن نویسنده: اگر تنظیم \fBAUTHOR\fP مشخص نشده باشد، نویسنده دیگر به‌طور پیش‌فرض به \fB${USER}\fP تنظیم نمی‌شود و چنانچه نویسندهٔ پست خالی باشد، پست حاوی هیچ اطلاعاتی از نویسنده نخواهد بود .IP \(bu 2 انتقال پشتیبانی از LESS و Webassets از هسته Pelican به افزونه .IP \(bu 2 تنظیم \fBDEFAULT_DATE\fP اکنون به‌طور پیش‌فرض به \fBNone\fP مقداردهی می‌شود، به این معنی که مقاله‌ها تولید نخواهند شد مگر اینکه متاداده تاریخ مشخص شده باشد .IP \(bu 2 افزودن تنظیم \fBFILENAME_METADATA\fP برای پشتیبانی از استخراج متاداده از نام فایل .IP \(bu 2 افزودن افزونهٔ \fBgzip_cache\fP برای فشرده‌سازی فایل‌های متنی رایج در یک فایل \fB\&.gz\fP درون همان دایرکتوری فایل اصلی، که از فشرده‌سازی فایل‌ها توسط کارساز (مانند Nginx) در حین فراخوانی HTTP جلوگیری می‌کند .IP \(bu 2 افزودن پشتیبانی از محتوای دارای قالب‌بندی AsciiDoc .IP \(bu 2 افزودن تنظیم \fBUSE_FOLDER_AS_CATEGORY\fP برای فعال یا غیرفعال کردن این ویژگی .IP \(bu 2 پشتیبانی از فایل‌های قالب دلخواه Jinja .IP \(bu 2 بازیابی آزمون‌های کارکردی پایه‌ای .IP \(bu 2 سیگنال‌های جدید: \fBgenerator_init\fP، \fBget_generators\fP و \fBarticle_generate_preread\fP .UNINDENT .SS 3.0 (2012\-08\-08) .INDENT 0.0 .IP \(bu 2 بازطراحی روش مدیریت نشانی‌های وب (URLها) .IP \(bu 2 بهبود مستندات انگلیسی .IP \(bu 2 رفع ایراد بسته‌بندی با استفاده از entrypointهای \fBsetuptools\fP .IP \(bu 2 افزودن پشتیبانی از \fBtypogrify\fP .IP \(bu 2 افزودن روشی برای غیرفعال کردن تولید خوراک .IP \(bu 2 افزودن پشتیبانی از \fBDIRECT_TEMPLATES\fP .IP \(bu 2 مجاز شمردن چندین پسوند برای فایل‌های محتوا .IP \(bu 2 افزودن پشتیبانی از LESS .IP \(bu 2 بهبود اسکریپت وارد کردن .IP \(bu 2 افزودن آزمون‌های کارکردی .IP \(bu 2 پشتیبانی از Rsync در Makefile تولیدشده .IP \(bu 2 بهبود پشتیبانی از خوراک (برای مثال، اتصال آسان به Feedburner) .IP \(bu 2 افزودن پشتیبانی از \fBabbr\fP در reST .IP \(bu 2 رفع چندین باگ :\-) .UNINDENT .SS 2.8 (2012\-02\-28) .INDENT 0.0 .IP \(bu 2 واردکننده Dotclear .IP \(bu 2 امکان استفاده از افزونه‌های Markdown .IP \(bu 2 پوسته‌ها اکنون به‌راحتی قابل توسعه هستند .IP \(bu 2 عدم نمایش اطلاعات صفحه‌بندی در صورتی که فقط یک صفحه وجود دارد .IP \(bu 2 افزودن یک صفحه به ازای هر نویسنده، شامل تمام مقاله‌های آن‌ها .IP \(bu 2 بهبود مجموعه آزمون‌ها .IP \(bu 2 ساده‌تر شدن توسعهٔ پوسته‌ها .IP \(bu 2 حذف پشتیبانی از Skribit .IP \(bu 2 افزودن اسکریپت \fBpelican\-quickstart\fP .IP \(bu 2 رفع مشکلات مربوط به منطقه زمانی .IP \(bu 2 افزودن چند اسکریپت برای پشتیبانی از Windows .IP \(bu 2 امکان مشخص کردن تاریخ بر حسب ثانیه .IP \(bu 2 عدم شکست در هنگام تولید پست‌ها (رد کردن و ادامه دادن) .IP \(bu 2 امکان استفاده از تاریخ‌های آینده .IP \(bu 2 پشتیبانی از مناطق زمانی مختلف برای هر زبان .IP \(bu 2 بهبود مستندات .UNINDENT.SS 2.7 (2011\-06\-11) .INDENT 0.0 .IP \(bu 2 استفاده از \fBlogging\fP به‌جای ارسال خروجی با چاپ در stdout .IP \(bu 2 پشتیبانی از فیلترهای سفارشی Jinja .IP \(bu 2 سازگاری با Python 2.5 .IP \(bu 2 افزودن مدیریت پوسته .IP \(bu 2 بسته‌بندی برای Debian .IP \(bu 2 افزودن پشتیبانی از پیش‌نویس .UNINDENT .SS 2.6 (2011\-03\-08) .INDENT 0.0 .IP \(bu 2 تغییرات در ساختار دایرکتوری خروجی .IP \(bu 2 آسان‌تر شدن کار با قالب‌ها و ساخت آن‌ها .IP \(bu 2 افزودن پشتیبانی از RSS (پیش‌تر فقط شامل Atom می‌شد) .IP \(bu 2 افزودن پشتیبانی از برچسب‌ها در فیدها .IP \(bu 2 بهبود مستندات .IP \(bu 2 افزودن یک پوسته دیگر (brownstone) .IP \(bu 2 افزودن ترجمه‌ها .IP \(bu 2 افزودن راهکاری برای استفاده از نشانی‌های (URL) تمیزتر به‌کمک ماژول بازنویسی نشانی (یا معادل آن) .IP \(bu 2 افزودن ابر برچسب‌ها .IP \(bu 2 افزودن قابلیت بارگذاری مجدد خودکار: با هر بار تشخیص تغییر، وبلاگ به‌طور خودکار دوباره تولید می‌شود .IP \(bu 2 ترجمه مستندات به فرانسوی .IP \(bu 2 وارد کردن وبلاگ از یک فید RSS .IP \(bu 2 پشتیبانی از صفحه‌بندی .IP \(bu 2 افزودن پشتیبانی از Skribit .UNINDENT .SS 2.5 (2010\-11\-20) .INDENT 0.0 .IP \(bu 2 وارد کردن از WordPress .IP \(bu 2 افزودن چندین پوسته جدید (martyalchin / wide\-notmyidea) .IP \(bu 2 نخستین گزارش باگ! .IP \(bu 2 پشتیبانی از Linkedin .IP \(bu 2 افزودن بخش پرسش‌های متداول (FAQ) .IP \(bu 2 پشتیبانی از Google Analytics .IP \(bu 2 پشتیبانی از Twitter .IP \(bu 2 استفاده از URLهای نسبی، نه ایستا .UNINDENT .SS 2.4 (2010\-11\-06) .INDENT 0.0 .IP \(bu 2 تغییرات جزئی در پوسته‌ها .IP \(bu 2 افزودن پشتیبانی از Disqus (جهت ثبت نظرات) .IP \(bu 2 بازآرایی مجدد کد .IP \(bu 2 افزودن تنظیمات پیکربندی مربوط به صفحه‌ها .IP \(bu 2 امکان تولید ورودی‌های وبلاگ در قالب PDF .UNINDENT .SS 2.3 (2010\-10\-31) .INDENT 0.0 .IP \(bu 2 پشتیبانی از Markdown .UNINDENT .SS 2.2 (2010\-10\-30) .INDENT 0.0 .IP \(bu 2 زیباسازی خروجی .IP \(bu 2 پشتیبانی و مدیریت صفحه‌های ایستا .UNINDENT .SS 2.1 (2010\-10\-30) .INDENT 0.0 .IP \(bu 2 انتخاب notmyidea به‌عنوان پوسته پیش‌فرض .UNINDENT .SS 2.0 (2010\-10\-30) .INDENT 0.0 .IP \(bu 2 بازآرایی کد برای توسعه‌پذیری بیشتر .IP \(bu 2 تغییر در متغیرهای تنظیمات .UNINDENT .SS 1.2 (2010\-09\-28) .INDENT 0.0 .IP \(bu 2 افزودن گزینه اشکال‌زدایی (debug) .IP \(bu 2 افزودن فیدها به تفکیک دسته‌بندی .IP \(bu 2 استفاده از سیستم‌فایل جهت دریافت تاریخ‌ها در صورت عدم ارائه فراداده .IP \(bu 2 افزودن پشتیبانی از Pygments .UNINDENT .SS 1.1 (2010\-08\-19) .INDENT 0.0 .IP \(bu 2 نخستین نسخه کارآمد .UNINDENT .SH "نویسنده (AUTHOR)" Justin Mayer.SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2010–2025 .\" End of generated man page.