<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های مینو علیمحمدی</title><link>https://virgool.ir/feed/@minoo.a</link><description>برنامه‌نویس دات‌نت هستم و با سی‌ام‌اس ناپ‌کامرس آشنایی دارم، سالهاست به صورت تخصصی توسعه‌دهنده این cms باحال هستم! در اکانتم مطالب مربوط به این cms فقط به اشتراک گذاشته می‌شه.</description><language>fa</language><pubDate>2026-11-11 02:06:29</pubDate><image><url>https://files.virgool.ir/upload/users/203441/avatar/NciO9u.jpeg</url><title>مینو علیمحمدی</title><link>https://virgool.ir/@minoo.a</link></image><item><title>پریودی بد نیست!</title><link>https://virgool.ir/@minoo.a/پریودی-بد-نیست-hr6psxu9om1x</link><description>این مطلب مرتبط به موضوع پیجم نیست ولی می‌خوام به کمپین ویرگول و مای‌لیدی به عنوان یک زن بپیوندم. https://virgool.io/campaign/myladymhd سلام خدمت خوانندگان عزیز، بسیار خوشحالم مانند چند سال پیش یه زن در دروان قاعدگی مثل یک زن ترد شده از انسان‌ها و انسانیت دیده نمی‌شه و مردم کم‌کم یاد می‌گیرن که این مسئله یک موضوع کاملاً معمولی و طبیعی می‌باشد.وقتی به آن زمان که نوجوان بودم فکر می‌کنم و تفکر خودم را در مورد این مسئله به یاد می‌آورم بسیار غمگین می‌شم، بسیار غمگین می‌شم برای دختری که باور داشت زمانی که پریود می‌شه تمام وجودش نفرین (نجس) می‌شه و باید کاملاً از جامعه دوری کنه و اصلا مهم نیست چقدر درد می‌کشه، تنها چیزی که حائز اهمیت بود، نگهداشتن این راز و پنهان کردنش از نزدیک‌ترین افراد خانواده‌‌است. به یاد دارم اوایل از پارچه استفاده می‌کردم و بخاطر شستشو زیاد و تعویض مشکلات زیادی رو همراه داشتم.مشکل بزرگ این بود که مادران ما بخاطر داشتن باورهای غلط در این مورد هم به خود و هم به دختران خود آزار می‌‎رساندن و اگر در بهترین حالت به بیماری‌های عفونی دچار نمی‌شدند ولی همیشه بخاطر یک مسئله کاملاً طبیعی مورد سرزنش قرار می‌گرفتند.به یاد دارم در مسجد قدیمی روستای پدریم خانم‌های که پریود بودن دم در می‌نشستند و اگر کسی سهواً نزدیک ورودی می‌شد مورد انتقاد و نکوهشن قرار می‌گرفت، حالا من به این مسئله که چرا این تفکر در مسجد وجود داره کاری ندارم اما برای خانم‌های جمع ورود یه فرد با کفش کثیف به فرش مسجد قابل پذیرش بود اما ورود یک زن که پریود شده و کاملاً تمیز هستش غیر قابل تحمل، به این دلیل که خانم‌ها یاد گرفته بودن یک زن که پریود شده را کامل نفرین (نجس) شده بدانند و ورود آنها به مسجد یعنی گناه و آزرده‌خاطر شدن خدای بزرگ مهربان!یک باور غلط: خانم‌ها و آقایون در زمان پریودی هیچ خون کثیفی دفع نمی‌شه ! پریودی فقط برای دفع دیواره رحم که هرماه ایجاد می‌شه برای اینکه یک خانم باردار بشود، همین ! و در آخر که لازم نیست نوار بهداشتی رو توی کیسه مشکی مثل مواد جابجا کنید!امیدوارم به روزی برسیم که سراسر کشور همه خانم‌ها دوران پریودی را راحت و آسان بگذرانند.</description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Mon, 03 Jul 2023 01:28:53 +0330</pubDate></item><item><title>پلاگین تقویم فارسی ناپ کامرس 4.5</title><link>https://virgool.ir/@minoo.a/پلاگین-تقویم-فارسی-ناپ-کامرس-jlnecd4ly7ll</link><description>پلاگین تقویم فارسی ناپ کامرس⚜️ در cms ناپ‌کامرس با تمام آپدیت‌های که شده باز در نمایش تاریخ شمسی مشکل وجود داره.این پلاگین می‌تونه این مشکل رو حل کنه.⚜️ سورس کد پلاگین تاریخ شمسی برای ناپ‌کامرس ورژن 4.5(مشکلاتی ممکن وجود داشته باشه خوشحال می‌شم که نظرتون رو برام بگید تا پلاگین رو تکمیل کنم ) https://github.com/MinooAlimohamadi/Nop.Plugin.Misc.PersianCalendar </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Wed, 10 Aug 2022 18:47:38 +0430</pubDate></item><item><title>سورس کد پلاگین پرداخت پاسارگاد ناپ‌کامرس ورژن 4.5</title><link>https://virgool.ir/@minoo.a/سورس-کد-پلاگین-پرداخت-پاسارگاد-ناپ-کامرس-ورژن-45-i2fuwajlg5av</link><description>در لینک زیر من سورس کد پلاگین پرداخت بانک پاسارگاد رو قرار دادم. این پلاگین مناسب ورژن 4.5 ناپ‌کامرس می‌باشد. امیدوارم براتون مفید باشه. ممنون  https://github.com/MinooAlimohamadi/Nop.Plugin.Payments.Pasargad.git </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Mon, 20 Jun 2022 09:49:55 +0430</pubDate></item><item><title>آپلود لوگو در ناپ‌کامرس</title><link>https://virgool.ir/@minoo.a/آپلود-لوگو-در-ناپ-کامرس-zpckcvcxexqd</link><description>لوگو سایت شما معمولاً در هر صفحه سایت در هدر صفحه نمایش داده می‌شود. صرف نظر از اینکه کدام تم را انتخاب می‌کنید و هر چند وقت یکبار آن را تغییر می‌دهید، لوگو شما در اکثر تم‌های nopCommerce عالی به نظر می‌رسد. مراحل بعدی را برای آپلود لوگو جدید در سایت خود دنبال کنید:به پیکربندی --&gt; تنظیمات --&gt; تنظیمات عمومی بروید. پنجره تنظیمات عمومی نمایش داده می‌شود:آپلود لوگو در ناپ‌کامرسدر قسمت Logo، روی دکمه آپلود فایل کلیک کرده و یک فایل تصویری را انتخاب کنید. تصویر انتخاب شده آپلود می‌شود. با کلیک روی دکمه حذف تصویر می‌توانید تصویر آپلود شده را حذف کنید.برای فعال کردن لوگو در سایت، روی دکمه ذخیره در بالا سمت راست کلیک کنید.لوگو شما ثبت و جایگزین می‌شود.ممنون از همراهیتون.منبع</description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Sat, 24 Apr 2021 00:24:20 +0430</pubDate></item><item><title>سفارشی کردن تم ناپ‌کامرس</title><link>https://virgool.ir/@minoo.a/سفارشی-کردن-تم-ناپ-کامرس-iczgl882reg1</link><description>این مقاله ما به صورت کلی نحوه سفارشی کردن قسمت‌های مختلف تم ناپ‌کامرس را بررسی می‌کنیم.سفارشی کردن تم ناپ‌کامرس آپلود کردن لوگو فروشگاهبرای آپلود کردن لوگو در فروشگاه ناپ‌کامرس دو روش وجود دارد:روش اول:آپلود کردن از طریق منوی ادمین. توضیحات بیشتر را در این مقاله مطالعه کنید.روش دوم:در پوشه ناپ‌کامرس در این مسیر بروید /Themes/YOUR THEME/Content/images/فایل عکس logo.png را پیدا کنیدفایل لوگو خود را با همین نام با فایل مربوطه جابجا کنید.(اندازه لوگو باید 50*50 باشد)اگر می‌خواهید تغییراتی در stylesheet لوگو ایجاد کنید کد زیر را در فایل styles.css سرچ کنید:.header-logo {&#xA;    margin: 0 0 20px;&#xA;    text-align: center;&#xA;}&#xA;.header-logo a {&#xA;    display: inline-block;&#xA;    max-width: 100%;&#xA;    line-height: 0; /*firefox line-height bug fix*/&#xA;}&#xA;.header-logo a img {&#xA;    max-width: 100%;&#xA;    opacity: 1;&#xA;}مهم: برای دیدن تغییرات لوگو و css احتمالا باید کش مرورگر خود را پاک کنید (ctrl+f5)تغییر Layout1. اگر قصد تغییر در ساختار Layout ناپ‌کامرس دارید (Root.cshtml_) در فایل styles.css این کدها را سرچ کنید:.master-wrapper-content {&#xA;    position: relative;&#xA;    z-index: 0;&#xA;    width: 90%;&#xA;    margin: 0 auto;&#xA;}&#xA;.master-column-wrapper {&#xA;    position: relative;&#xA;    z-index: 0;&#xA;}&#xA;.master-column-wrapper:after {&#xA;    content: &#34;&#34;&#xA;    display: block;&#xA;    clear: both;&#xA;}2. اگر قصد تغییر در ColumnOne.cshtml_ دارید، این کد را در فایل styles.css سرچ کنید:.center-1 {&#xA;    margin: 0 0 100px;&#xA;}3. اگر قصد تغییر در ColumnTwo.cshtml_ دارید، این کد را در فایل styles.css سرچ کنید:.center-2, .side-2 {&#xA;    margin: 0 0 50px;&#xA;}&#xA;.side-2:after {&#xA;    content: &#34;&#34;&#xA;    display: block;&#xA;    clear: both;&#xA;}تغییر در منوی هدر (منوی بالا)اگر قصد تغییر در منوی هدر وب‌سایت ناپ‌کامرس خود دارید به آدرس زیر برید:/Views/Shared/Components/TopMenu/Default.cshtmlفایل Default.chtml باز کنید و با توجه به نیازهاتون منوی مورد نظر خود &lt;li&gt; را اضافه یا حذف کنید.تغییر در فوتراگر قصد تغییر در فوتر (لینک‌های فوتر) وب‌سایت ناپ‌کامرس خود دارید به آدرس زیر برید:/Views/Shared/Components/TopMenu/Default.cshtmlفایل Default.chtml را باز کنید و با توجه به نیازهاتون لینک مورد نظر خود را &lt;li&gt; یا به صورت کامل &lt;ul&gt; اضافه یا حذف کنید.ممنون از همراهیتون.(قسمت سوم)منبع</description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Fri, 23 Apr 2021 23:14:14 +0430</pubDate></item><item><title>بررسی Layout/Design (ناپ‌کامرس)</title><link>https://virgool.ir/@minoo.a/بررسی-layoutdesign-kbn2z49ktt1u</link><description>Layoutمفهوم Layout چیست؟ هر توسعه‌دهنده یا طراحی مایل است تمام صفحات وب‌سایت ظاهری ثابت داشته باشد. در گذشته مفهوم &#34;MasterPages&#34; در ASP.NET 2.0 معرفی شد که با حفظ ظاهر و سازگار به وب، آن را به صفحات aspx متصل می‌کرد.همچنین Razor مشابه این کانسپت را با نام &#34;Layout&#34; پشتیبانی می‌کند. به شما این امکان می‌دهد یک قالب مشترک را تعریف کرده و در تمام صفحات وب‌سایت از آن ارث‌بری کنید.در ناپ‌کامرس دو نوع layout وجود دارد:_ColumnsOne.cshtml_ColumnsTwo.cshtmlهر دو Layout از یک Layout دیگری به نام Root.cshtml_ ارث‌بری کرده است. این Root.cshtml_ خود از یک Layout دیگری به نام _Root.Head.cshtml ارث‌بری کرده است.در Root.Head.cshtml_ فایل‌های مورد نیاز پیوست شده است در صورتی که نیاز به اضافه کردن فایل css و js دارید در این فایل باید اضافه کنید. محل همه‌ی فایل‌های Layout در آدرس زیر می‌باشد:[nopCommerce root directory]/Views/Shared/...اگر از سورس کد ناپ‌کامرس استفاده می‌کنید:\Presentation\Nop.Web\Views\Shared\..._Root.cshtml_Root.cshtml_Root.cshtml(با توجه به css کلاس)root-layout-cssحالا دو Layout که از Root.cshtml_ اورراید می‌شود را بررسی می‌کنیم:_ColumnsOne.cshtmlدراین حالت تغییری در Layout نمی‌دهد و ساختارش خیلی شبیه به Root.cshtml_ می‌باشد._ColumnsOne.cshtml_ColumnsTwo.cshtmlدر این حالت ساختار Body دو ستون وجود دارد:_ColumnsTwo.cshtmlممنون از همراهیتون.بخش دوممنبع</description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Mon, 19 Apr 2021 23:30:44 +0430</pubDate></item><item><title>نحوه ایجاد تم برای ناپ‌کامرس (با استفاده از تم پیش‌فرض)</title><link>https://virgool.ir/@minoo.a/نحوه-ایجاد-تم-برای-ناپ-کامرس-با-استفاده-از-تم-پیش-فرض-gfbim4xasxos</link><description>در این مقاله چند قسمتی قصد داریم ابتدا روند ایجاد تم را بررسی کنیم و بعد با ساختار کلی دیزاین ناپ‌کامرس آشنا می‌شویم. با من همراه باشید.نحوه ایجاد تم برای ناپ‌کامرسسولوشن ناپ‌کامرس یا وب‌سایت (ورژن وب) را با ویژال استادیو باز کنید و به آدرس زیر بروید:اگر از سورس کد استفاده می‌کنید\Nop.Web\Themes\اگر از نسخه وب ناپ‌کامرس استفاده می‌کنید\[Project Root]\Themes\1. تم دیفالت را انتخاب کنید.2. راست کلیک کرده و Copy را انتخاب کنید.3. حالا روی پوشه Theme راست کلیک کرده و Paste را انتخاب کنید.4. نتیجه نهایی چیزی شبیه به عکس زیر می‌باشد.5. اسم پوشه را به هر اسمی که مد نظرتون است تغییر دهید برای مثال MyFirstTheme.6. داخل پوشه تم MyFirstTheme رفته و فایل theme.json را باز کنید.7. به صورت زیر نام تم را تغییر دهید.8. داخل پوشه تم در مسیر &#34;MyFirstTheme&#34; → Content → Imagesتصویر مد مورد نظر خود را اضافه کنید و با توجه به نیازهاتون شروع به تغییر و کاستوم کردن فایل style.css کنید.برای تست تغییرات تم، به قسمت ادمین رفته و تم خود را انتخاب کرده و save کنید.به همین راحتی، بهتون تبریک می‌گم شما اولین تم خودتان را ایجاد کردید.قسمت اولمنبع</description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Sun, 18 Apr 2021 01:07:55 +0430</pubDate></item><item><title>اضافه کردن منو به قسمت ادمین ناپ کامرس توسط پلاگین</title><link>https://virgool.ir/@minoo.a/اضافه-کردن-منو-به-قسمت-ادمین-ناپ-کامرس-توسط-پلاگین-mvufwnjsrkfg</link><description>اضافه کردن منو به قسمت ادمین ناپ کامرس توسط پلاگینمنوی‌های ناپ کامرس از فایلی به نام sitemap.config  ساخته و تنظیم می‌شود.src\Presentation\Nop.Web\Areas\Adminبرای انجام اینکار توسط پلاگین، در فایل cs پلاگین اینترفیس IAdminMenuPlugin برای کلاس پلاگین خود پیاده‌سازی کرده و از کد زیر استفاده کنید.همچنین می‌توانید برای این قسمت از ACL برای مدیریت دسترسی پلاگین استفاده کنید و اینجا قرار دهید.public class CustomPlugin : BasePlugin, IAdminMenuPlugin&#xA; {&#xA;&#xA;    public Task ManageSiteMapAsync(SiteMapNode rootNode)&#xA;    {&#xA;        var menuItem = new SiteMapNode()&#xA;        {&#xA;            SystemName = &#34;YourCustomSystemName&#34;,&#xA;            Title = &#34;Plugin Title&#34;,&#xA;            ControllerName = &#34;ControllerName&#34;,&#xA;            ActionName = &#34;List&#34;,&#xA;            Visible = true,&#xA;            RouteValues = new RouteValueDictionary() { { &#34;area&#34;, null } },&#xA;        };&#xA;        var pluginNode = rootNode.ChildNodes.FirstOrDefault(x =&gt; x.SystemName == &#34;Third party plugins&#34;);&#xA;        if(pluginNode != null)&#xA;            pluginNode.ChildNodes.Add(menuItem);&#xA;        else&#xA;            rootNode.ChildNodes.Add(menuItem);&#xA;&#xA;        return Task.CompletedTask;&#xA;    }&#xA;&#xA;}برای ورژن 2.00 تا 3.50 از کد زیر استفاده کنید:public bool Authenticate()&#xA;{&#xA;    return true;&#xA;}&#xA;&#xA;public  SiteMapNode BuildMenuItem() // SiteMapNode is Class in Nop.Web.Framework.Menu&#xA;{&#xA;   var menuItemBuilder = new SiteMapNode()&#xA;   {&#xA;       Title = &#34;Title For Menu item&#34;,   // Title for your Custom Menu Item&#xA;       Url = &#34;Path of action link&#34;, // Path of the action link&#xA;       Visible = true,&#xA;       RouteValues = new RouteValueDictionary() { {&#34;Area&#34;, &#34;Admin&#34;} }&#xA;   };&#xA;    var SubMenuItem = new SiteMapNode()   // add child Custom menu&#xA;   {&#xA;       Title =  &#34;Title For Menu Child menu item&#34;, //   Title for your Sub Menu item&#xA;       ControllerName = &#34;Your Controller Name&#34;, // Your controller Name&#xA;       ActionName = &#34;Configure&#34;, // Action Name&#xA;       Visible = true,&#xA;       RouteValues = new RouteValueDictionary() { {&#34;Area&#34;, &#34;Admin&#34;} },&#xA;   };&#xA;   menuItemBuilder.ChildNodes.Add(SubMenuItem);&#xA;&#xA;   return menuItemBuilder;&#xA;}در کد بالا، باتوجه به کامنت‌ها لازم به جایگزینی مقادیر بسته به نیاز خود دارید. علاوه بر این، کد نحوه ایجاد زیر منو در منوی اصلی که ایجاد می‌کنید را نشان می‌دهد.ممنون از توجهتون.منبع : https://docs.nopcommerce.com/en/developer/plugins/menu-item.html </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Fri, 16 Apr 2021 05:43:29 +0430</pubDate></item><item><title>چگونه ناپ‌کامرس را با داکر روی لینوکس اجرا کنیم؟</title><link>https://virgool.ir/@minoo.a/چگونه-ناپ-کامرس-را-با-داکر-روی-لینوکس-اجرا-کنیم-kxhzcnvl5bw3</link><description>ناپ‌کامرس یک پلتفرم اپن سورس، که با فناوری ماکروسافت طراحی شده است. ناپ‌کامرس ورژن 4.20 با فریم‌ورک دات‌نت کور می‌باشد و مایل هستیم روی لینوکس اجرا کنیم. راه‌های مختلفی برای این کار وجود دارد ولی راحت‌ترین آن استفاده از داکر می‌باشد. در این مقاله می‌خواهیم یاد بگیریم به چه صورت ناپ‌کامرس را روی لینوکس با استفاده داکر اجرا کنیم؟قبل از اینکه شروع کنیم، در مورد داکر و اجزای آن که قراره در این مقاله ازشون استفاده کنیم آشنا بشیم.Dockerداکر یک پلت‌فرم سبک، اوپن سورس و ایمن می‌باشد. داکر راهی برای ساده‌سازی روند ساخت پروژه، جابجای و اجرای برنامه‌ها در یک محیط متفاوت است. Docker تمام وابستگی‌های یک برنامه را جمع می‌کند و آن را در یک container (ظرف) اجرا می‌کند، در یک جمله ساده، شانس استفاده از MSSQL، بدون نیاز به دانلود، نصب و مدیریت آن را بهمون می‌دهد، کافیست container را با Docker اجرا کرده و از آن استفاده کنید - به همین سادگی.Imageاز یک image برای ساخت یک container استفاده می‌شود، که دارای فایل‌های لازم برای اجرای چیزی روی سیستم عامل، که مانند ویندوز یا اوبونتو است و دارای فریم‌ورک برنامه شما، به همراه فایل‌های پایگاه داده است که از آن پشتیبانی می‌کند. بنابراین، اگر از ASP.NET، NodeJS یا Python استفاده می‌کنید، imageها دارای کد معمول هستند.Containerایمیج‌ (image) ها فقط تعاریفی هستند که به طور مستقیم قابل اجرا نیستند. برای اجرای image ها، ما به containers(ظرف) نیاز داریم. containerها اینستنس‌های هستند که به اجرای image با تنظیمات متفاوت مانند پورت، آدرس IP و غیره کمک می‌کنند.Docker Composeبرای اجرای چندین کانتینر در یک نمونه استفاده می‌شود. Docker Compose یک شبکه با کانتینرهای مختلف ایجاد می‌کند، از طریق این شبکه کانتینرها می‌توانند با یکدیگر ارتباط برقرار کنند. بنابراین، اگر برنامه به کانتینرهای دیگری وابسته باشد، Docker Compose مناسب است.می‌خواهیم برنامه nopCommerce با سرور MS SQL اجرا کنیم، پس از Docker Compose استفاده خواهیم کرد.فرضیاتتمام دستورات موجود در این پست فرض را بر این می گذاریم که:شما در حال اجرا لینوکس هستیدداکر روی سیستم شما نصب استمرحله 1- از دستور Docker بدون Sudo استفاده کنید.اجرای دستور Docker به root privileges و افزودن privilege احتیاج دارد، برای اجرای دستور باید پیشوند &#34;sudo&#34; را اضافه کنیم. برای سهولت کار، نام کاربری خود را به گروه Docker اضافه کنید تا هر زمان از دستور Docker استفاده می‌کنید، نیازی به پاس دادن &#34;sudo&#34; نباشد.$sudo usermod -aG docker ${USER}برای اعمال تغییرات‌، از سیستم خارج شوید و دوباره وارد سیستم شوید.مرحله 2 - نسخه Docker را بررسی کنید.از آنجا که Docker قبلاً روی سیستم نصب شده است، نسخه را با استفاده از دستور زیر بررسی کنید:docker –vنتیجهadminvm@adminvm-VirtualBox:~$ docker -v&#xA;Docker version 18.09.7, build 2d0083dاگر نسخه بدون پیام خطا نمایش دهد، آماده هستید تا مرحله بعدی را انجام دهید.مرحله 3 - Docker Compose را نصب کنید.از آنجا که باید nopCommerce با کانتینر SQL Server ارتباط برقرار کند، باید Docker Compose را روی دستگاه نصب کنیم. به خاطر داشته باشید که Docker Compose باید جداگانه نصب شود. با نصب پیش فرض داکر نصب نمی‌شود.با دستورات زیر نصب کنید:sudo curl -L&#xA;&#34;https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)&#34;  -o /usr/local/bin/docker-compose&#xA;sudo mv /usr/local/bin/docker-compose /usr/bin/docker-compose&#xA;sudo chmod +x /usr/bin/docker-composeپس از آن، نسخه Docker Compose را با دستورات زیر بررسی کنید:docker-compose -vنتیجهadminvm@adminvm-VirtualBox:~$ docker-compose -v&#xA;docker-compose version 1.22.0, build f46880feمرحله 4 – فایل &#34;docker-compose.yml&#34;کد nopCommerce 4.20 را بر روی دستگاه خود دانلود کنید و فایل docker-compose.yml را در فایل اصلی باز کنید.مرحله 5 - اجرای Docker Composeدر محل فایل &#34;docker-compose.yml&#34;  ترمینال (terminal ) را باز کنید و دستور زیر را بزنید:با این کار ایمیج‌های مورد نیاز دانلود می‌شود، پروژه ساخته می‌شود و کانتینرها استارت می‌خورند. مدتی طول خواهد کشید - آرام بنشینید و آرام باشید!پس از اتمام مراحل، باید صفحه زیر با لاگ‌ها مربوط را مشاهده کنید.مرحله 6 - کانتینرهای در حال اجرا را بررسی کنید.ترمینال دوم را باز کرده و دستور زیر را اجرا کنید. تمام کانتینرها در حال اجرا را لیست می‌کند. باید ببینید که هر دو کانتینر nopCommerce و SQL Server اکنون در حال اجرا هستند. [docker ps]مرحله 7 - فروشگاه nopCommerce را در یک مرورگر اجرا کنید.یک تب در مرورگر باز کنید و لینک زیر را بزنید. صفحه نصب nopCommerce را باز می‌کند.http://localhost:80مرحله 8 - اتصال به دیتابیس.نام کانتینر و رمز عبور پایگاه داده را که در فایل yml تعریف شده است، منتقل کنید.مرحله 9 - وضعیت کانتینر را بررسی کنید.پس از نصب، باید صفحه تنظیم مجدد اتصال را ببینید زیرا عملکرد کانتینر برنامه ما متوقف شده است.دوباره دستور زیر را اجرا کنید تا کانتینرهای در حال اجرا را ببینید. باید ببینید که فقط یک کانتینر MSSQL در حال اجرا است. [docker ps]برای دریافت لیستی از تمام کانتینرها، دستور زیر را اجرا کنید. [docker ps -a]مرحله 10 - دوباره کانتینر وب را بالا ببرید.برای اجرای دوباره کانتینر وب، دستور[docker container start &lt;container-id&gt;]را اجرا کنید. به راحتی می‌توانید سه کاراکتر اول شناسه کانتینر را بدهید.با دستور زیر لیست کانتینرها در حال اجرا را دنبال کنید. باید ببینید اکنون هر دو کانتینر در حال اجرا هستند.مرحله 11 - به پنجره مرورگر بروید و فروشگاه nopCommerce را بررسی کنید.به localhost بروید و Refresh را بزنید. تا صفحه اصلی nopCommerce لود شود.تبریک می‌گویم!  شما اولین فروشگاه nopCommerce خود را در Linux اجرا می‌کنید !!ممنون از همه خوانندگان.منبع: https://www.c-sharpcorner.com/article/how-to-run-nopcommerce-on-linux-using-docker/ </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Wed, 07 Apr 2021 06:26:17 +0430</pubDate></item><item><title>چگونه برای ناپ‌کامرس پلاگین بنویسیم؟</title><link>https://virgool.ir/@minoo.a/چگونه-برای-ناپ-کامرس-پلاگین-بنویسیم-uj62g3kidhpg</link><description>ساختن پلاگین برای ناپ‌کامرسپلاگین‌ها برای گسترش عملکرد ناپ‌کامرس ورژن 4.3 استفاده می‌شود، این پلاگین‌ها انواع مختلفی دارند به عنوان مثال روش پرداخت (مثل پی‌پال، درگاه‌های پرداخت بانکی)، سیستم مالیات، روش محاسبه حمل و نقل و دیگر ابزارهای مثل گفتگوی زنده و موارد دیگر. برای ناپ‌کامرس پلاگین‌های مختلفی توزیع شده که می‌توانید آن‌ها را در سایت رسمی آن جستجو کنید تا اگر کسی متناسب با نیاز شما پلاگینی ایجاد کرده از آن استفاده نمایید، اگر نه که این مقاله این روند را توضیح می‌دهد.ساختار پلاگین، فایل‌های مورد نیاز و مکان‌ها1. اولین کاری که باید انجام بدید ایجاد یک کلاس لایبراری در سولوشن است. بهتره که لوکیشن این کلاس لایبراری در پوشه plugins باشد. (نکته: با پوشه Plugins در زیر شاخه Nop.Web\ قاتی نکنید، پابلیش پلاگین‌ها در این پوشه قرار می‌گیرد). قرار دادن همه پلاگین‌ها در پوشه &#34;Plugins&#34; بهترین حالت است. نامگذاری پیشنهادی برای پروژه پلاگین شما به این شکل است:&#34;Nop.Plugin.{Group}.{Name}&#34;{Group}: گروه پلاگین شما رو مشخص می‌کند برای مثال( &#34;Payment&#34; or &#34;Shipping&#34;)یعنی پلاگین شما مربوط به پرداخت یا حمل و نقل و ... . برای مثال پلاگین (PayPalStandard) نام سولوشن آن (Nop.Plugin.Payments.PayPalStandard) است.اما این نکته را توجه داشته باشید که این اجباری نیست و هر نامی که دوست دارید را می‌توانید برای پلاگین خود انتخاب کنید.2. پس از ایجاد پروژه پلاگین، باید فایل csproj. آن را در ویرایشگر متنی باز کرده و محتوای آن را با مورد زیر جایگزین کنید: &lt;Project Sdk=&#34;Microsoft.NET.Sdk&#34;&gt;&#xA;    &lt;PropertyGroup&gt;&#xA;        &lt;TargetFramework&gt;netcoreapp3.1&lt;/TargetFramework&gt;&#xA;        &lt;Copyright&gt;SOME_COPYRIGHT&lt;/Copyright&gt;&#xA;        &lt;Company&gt;YOUR_COMPANY&lt;/Company&gt;&#xA;        &lt;Authors&gt;SOME_AUTHORS&lt;/Authors&gt;&#xA;        &lt;PackageLicenseUrl&gt;PACKAGE_LICENSE_URL&lt;/PackageLicenseUrl&gt;&#xA;        &lt;PackageProjectUrl&gt;PACKAGE_PROJECT_URL&lt;/PackageProjectUrl&gt;&#xA;        &lt;RepositoryUrl&gt;REPOSITORY_URL&lt;/RepositoryUrl&gt;&#xA;        &lt;RepositoryType&gt;Git&lt;/RepositoryType&gt;&#xA;        &lt;OutputPath&gt;..\..\Presentation\Nop.Web\Plugins\PLUGIN_OUTPUT_DIRECTORY&lt;/OutputPath&gt;&#xA;        &lt;OutDir&gt;$(OutputPath)&lt;/OutDir&gt;&#xA;        &lt;!--Set this parameter to true to get the dlls copied from the NuGet cache to the output of your    project. You need to set this parameter to true if your plugin has a nuget package to ensure that   the dlls copied from the NuGet cache to the output of your project--&gt;&#xA;        &lt;CopyLocalLockFileAssemblies&gt;true&lt;/CopyLocalLockFileAssemblies&gt;&#xA;    &lt;/PropertyGroup&gt;&#xA;    &lt;ItemGroup&gt;&#xA;        &lt;ProjectReference Include=&#34;..\..\Presentation\Nop.Web.Framework\Nop.Web.Framework.csproj&#34; /&gt;&#xA;        &lt;ClearPluginAssemblies Include=&#34;$(MSBuildProjectDirectory)\..\..\Build\ClearPluginAssemblies.proj&#34; /&gt;&#xA;    &lt;/ItemGroup&gt;&#xA;    &lt;!-- This target execute after &#34;Build&#34; target --&gt;&#xA;    &lt;Target Name=&#34;NopTarget&#34; AfterTargets=&#34;Build&#34;&gt;&#xA;        &lt;!-- Delete unnecessary libraries from plugins path --&gt;&#xA;        &lt;MSBuild Projects=&#34;@(ClearPluginAssemblies)&#34; Properties=&#34;PluginPath=$(MSBuildProjectDirectory)\$(OutDir)&#34; Targets=&#34;NopClear&#34; /&gt;&#xA;    &lt;/Target&gt;&#xA;&lt;/Project&gt;جای PLUGIN_OUTPUT_DIRECTORY را با نام پلاگین جایگزین شود، به عنوان مثال، Payments.PayPalStandardما از این روش برای اضافه کردن رفرنس‌های دات‌نت کور به پروژه‌مون استفاده می‌کنیم و به این صورت لایبراری‌های که رفرنسش را گذاشتیم در فایل بطور خودکار لود می‌شوند و بسیار راحت است اما این روش اجباری نیست.3. مرحله بعدی ایجاد یک فایل plugin.json مورد نیاز برای پلاگین است. این فایل شامل اطلاعات توصیف کننده پلاگین شما است. فقط کافی است این فایل را از هر پلاگین موجود دیگه کپی کرده و متناسب با نیاز خود اصلاح کنید. برای اطلاعات در مورد فایل plugin.json، لطفاً به فایل plugin.json در پروژه‌های دیگه پلاگین‌ها مراجعه کنید.4. آخرین مرحله ایجاد یک کلاسی است که اینترفیس IPlugin را پیاده‌سازی کند. ناپ‌کامرس یک کلاس BasePlugin دارد که برخی متدهای IPlugin را پیاده‌سازی کرده که از تکرار کد جلوگیری کرده است. ناپ‌کامرس برخی از اینترفیس‌های مشتق شده از IPlugin را در اختیار شما قرار داده است. به عنوان مثال، ما اینترفیس &#34;IPaymentMethod&#34; داریم که برای ایجاد پلاگین‌های پرداخت استفاده می‌شود که شامل برخی از متدهای است که فقط برای پرداخت استفاده می‌شود برای مثال ()ProcessPayment یا ()GetAdditionHandlingFee. در حال حاضر ناپ‌کامرس دارای اینترفیس‌های پلاگین زیر است:IExternalAuthenticationMethodبرای متدهای احراز هویت کاربر مانند Facebook ،Twitter ،OpenID و غیره استفاده می‌شود.IWidgetPluginبه شما امکان می‌دهد ابزار (ویجت) ایجاد کنید. ابزارها در برخی از قسمت‌های سایت شما ارائه می‌شوند. به عنوان مثال، می‌تواند یک بلوک &#34;چت زنده&#34; در ستون سمت چپ سایت شما باشد.IExchangeRateProviderبرای دریافت نرخ ارز استفاده می شود.IDiscountRequirementRuleبه شما امکان می‌دهد قوانین تخفیف جدید خود را ایجاد کنید.IPaymentMethodپلاگین‌هایی که برای پرداخت استفاده می‌شوند.IShippingRateComputationMethodاین پلاگین‌ها برای متدهای پرداخت و نرخ حمل و نقل استفاده می‌شود.ITaxProviderبرای گرفتن نرخ مالیات استفاده می‌شود.IMiscPluginاگر پلاگین شما با هیچ یک از اینترفیس‌های بالا در رابطه نیست از این استفاده کنید.نکته مهم: پس از ساخت پروژه قبل از هر تغییری پروژه را clean کنید. بعضی از رفرنس‌ها کش می‌شود و باعث خطا و دیوانه شدن دولوپر می‌شود!ممکنه بعد از اضافه کردن پروژه پلاگین به سلوشن، نیاز باشه که یکبار rebuild کنید. اگر شما Dll پلاگین خود را در Nop.Web\Plugins\PLUGIN_OUTPUT_DIRECTORY  ندیدید لازمه که یکبار دیگه سولوشن را rebuild کنید. اگر dll پلاگین شما در پوشه درست در Nop.Web نباشد ناپ‌کامرس پلاگین را در لیست خودش نمیاره.بررسی requests. Controllers ,models ,viewsاکنون می‌توانید پلاگین را با رفتن به Admin area → Configuration → Local Plugins مشاهده کنید. اما همانطور که حدس زدید پلاگین ما هیچ کاری نمی‌کند. برای تنظیمات آن حتی رابط کاربری وجود ندارد. بیایید یک صفحه برای پیکربندی پلاگین ایجاد کنیم.ایجاد یک مدل: یک فولدر به اسم models در پلاگین خودتون ایجاد کنید و کلاس مربوط به مدلتون تنظیم کنید.ایجاد یک ویو: یک فولدر در پلاگین خود به اسم views ایجاد کنید و فایل chtml به نام Configure.chtml ایجاد نمایید. پراپرتی Build Action روی Content و پراپرتی Copy to Output Directory روی copy always تنظیم کنید. توجه داشته باشید صفحه configuration باید از لی‌اوت (Layout)  &#34;ConfigurePlugin_&#34; استفاده کند.مطمئن شوید که فایل ViewImports.cshtml_ در پوشه ویو وجود داشته باشد در صورتی که وجود نداشت از پلاگین‌های دیگه ناپ‌کامرس کپی کنید.ایجاد کنترلر: فولدری به نام controllers در پلاگین خود ایجاد کنید و کنترلر جدید را ایجاد کنید.روش خوب این است که نام گذاری controllerها به این شکل باشد {Group}{Name}Controller.cs . برای مثال PaymentPayPalStandardControllerالبته که اجباری نیست برای این نوع نامگذاری و یک توصیه است.اکشن متد مناسب برای صفحه configuration ایجاد کنید (در area admin). نام متد را configure بزارید. کلاس مدل را برای متد ارسال کنید به ویو با آدرس فیزیکی زیر:~/Plugins/{PluginOutputDirectory}/Views/Configure.cshtml برای متد خود از attribute زیر استفاده کنید:[AuthorizeAdmin] //confirms access to the admin panel&#xA; [Area(AreaNames.Admin)] //specifies the area containing a controller or actionبرای نمونه پلاگین پرداخت PayPalStandard باز کنید و نحوه پیاده سازی کنترلرهای آن را ببینید.سپس برای هر پلاگین که یک صفحه پیکربندی یا configuration دارد باید url آن را مشخص کنید. کلاس  BasePlugin متدی به نام GetConfigurationPageUrl دارد که url آن را برمی‌گرداند.public override string GetConfigurationPageUrl()&#xA;  {&#xA;     return $&#34; {_webHelper.GetStoreLocation()}Admin/{CONTROLLER_NAME}/{ACTION_NAME}&#34;&#xA;  }وقتی که پلاگین نصب می‌شود و متد بالا رو هم اضافه کرده باشید لینک پیکربندی یا configure اضافه می‌شود در زیر Admin → Configuration → Local Pluginsنکته: راحترین کار برای انجام مراحل بالا باز کردن پلاگین‌های دیگه و کپی کردن این فایل‌ها در پروژه خودتون است و بعد از آن نام‌ها را تغییر بدید.برای مثال پلاگین PayPalStandard ساختار پروژه به این شکل است:متدهای Install,Uninstall,Updateاین مرحله اختیاری است. برخی از پلاگین‌ها می‌توانند در هنگام نصب منطق اضافی داشته باشند. به عنوان مثال، یک پلاگین می‌تواند ریسورس جدیدی را وارد کند. بنابراین پیاده‌سازی IPlugin خود را باز کنید (در بیشتر موارد از کلاس BasePlugin مشتق خواهد شد) و متدهای زیر را نادیده بگیرید:Installاین متد در زمان نصب فراخوانی می‌شود. می‌توانید تنظیمات اولیه پلاگین خود را انجام دهید مثلا اضافه کردن ریسورس جدید یا جدول در دیتابیس در صورتی که ضروری است.Uninstallاین متد زمانی که پلاگین را حذف نصب می‌کنید فراخوانی می‌شود مانند بالا اگر منابعی دارید که باید حذف شود می‌توانید اینجا تنظیم کنید.Updateاین متد در زمان آپدیت پلاگین فراخوانی می‌شود (وقتی که نسخه پلاگین در فایل Plugin.json تغییر کرده باشد).نکته مهم: اگر متدهای بالا را تغییر ندادید نباید پیاده‌سازیش را در کلاس حذف کنید. برای مثال در متد install باید ()base.install صدا زده شود. متد install پلاگین PayPalStandard به شکل زیر است:public override void Install()&#xA;{&#xA;    var settings = new PayPalStandardPaymentSettings()&#xA;    {&#xA;        UseSandbox = true&#xA;    };&#xA;    _settingService.SaveSetting(settings);&#xA;    ...&#xA;    base.Install();&#xA;}نکته: لیست پلاگین‌های نصب شده در این آدرس است، این لیست هنگام نصب ایجاد می‌شود\App_Data\plugins.jsonRoutesاینجا نگاهی داریم به نحوه ثبت مسیرهای پلاگین. ASP.NET Core Routing مسئول نگاشت درخواست‌ها از مرورگر به اکشن خاص آن می‌باشد.برای اطلاع بیشتر به این اینجا مراجعه کنید.در صورتی نیاز به تنظیم route یک فایل به نام RouteProvider.cs ایجاد کنید. به عنوان مثال، کلاس RouteProvider زیر، یک مسیر جدید اضافه می‌کند که با باز کردن مرورگر وب و رفتن به آن می‌توانید به آن دسترسی پیدا کنید.http://www.yourStore.com/Plugins/PaymentPayPalStandard/PDTHandlerpublic partial class RouteProvider : IRouteProvider&#xA; {&#xA;    public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)&#xA;    {&#xA;        //PDT&#xA; endpointRouteBuilder.MapControllerRoute(&#34;Plugin.Payments.PayPalStandard.PDTHandler&#34;, &#34;Plugins/PaymentPayPalStandard/PDTHandler&#34;,&#xA;                new { controller = &#34;PaymentPayPalStandard&#34;, action = &#34;PDTHandler&#34; });&#xA;    }&#xA;    public int Priority =&gt; -1;&#xA; }آپدیت ناپ‌کامرس ممکن است پلاگین را خراب کندبرخی از پلاگین‌ها ممکن است منسوخ شده و دیگر با نسخه جدید nopCommerce کار نکنند. اگر پس از ارتقا به نسخه جدید با مشکلی روبرو شدید، پلاگین را حذف کرده و به وب سایت رسمی nopCommerce مراجعه کنید تا ببینید نسخه جدیدتری در دسترس است یا خیر. بسیاری از نویسندگان پلاگین‌ها برای جایگزینی نسخه جدیدتر، پلاگین‌های خود را ارتقا می‌دهند، با این حال، برخی از آنها این کار را نمی‌کنند و با پیشرفت nopCommerce، پلاگین آنها منسوخ می‌شود. اما در بیشتر موارد، می‌توانید به سادگی فایل plugin.json را باز کرده و قسمت SupportedVersions را بروز کنید.نتیجه‌گیریامیدوارم این مقاله به شما کمک کرده باشه که کار با ناپ‌کامرس شروع کنید و شما را برای ساخت پلاگین‌های پیچیده‌تر آماده کند.پلاگین تمپلیتبرای پلاگین‌های جدید nopCommerce می‌توانید از  Visual Studio Template ما استفاده کنید. این مورد می‌تواند در زمان شما صرفه جویی کند، زیرا اکنون نیازی به انجام دستی تمام مراحل اولیه ندارید. مانند ایجاد پوشه‌ها (کنترلرها ، ویوها ، مدل‌ها و غیره)، سایر فایل‌های مورد نیاز (DependencyRegistrar.cs , _ViewImports.cshtml ، ObjectContex ، plugin.json و غیره)، پیکربندی، ریسورس پروژه و غیره). لطفاً آن را پیدا کنید و دستورالعمل نصب را اینجا پیدا کنید.منبع: https://docs.nopcommerce.com/en/developer/plugins/how-to-write-plugin-4.30.html#handling-requests-controllers-models-and-views </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Tue, 06 Apr 2021 02:10:44 +0430</pubDate></item><item><title>چگونه در ناپ کامرس 4.3، در تنظیمات ادمین، تب ایجاد کنیم</title><link>https://virgool.ir/wptips/چگونه-در-ناپ-کامرس-43-در-تنظیمات-ادمین-تب-ایجاد-کنیم-owkk2uh3rxtg</link><description>در این مقاله، می‌خواهیم با استفاده از پلاگین، در سمت مدیریت ناپ‌کامرس یک تب اضافه کنیم. سریع به قسمت پیاده‌سازی آن می‌پردازیم چون من معتقدم وقتی توسعه‌دهنده ناپ‌کامرس این نوع مقاله‌ها جستجو می‌کند که به دنبال راه‌حلی هستند که بهشون کمک کنه که یاد بگیرند و مشکلشون را خطایابی و حل کنند. پیداکردن WidgetZoneابتدا مشخص کنید که می‌خواهید در کدام صفحه سمت مدیریت برنامه یک تب اضافه کنید، در این مقاله من صفحه ویرایش سفارش را انتخاب کردم. بنابراین اول باید صفحه ویرایش سفارش را در سورس کد پیدا کنیم تا WidgetZone صفحه را بررسی نماییم. در این ویجت زون ویو تب جدید ما (return) برگردانده می‌شود.در این صفحه به آدرس (Presentation\Nop.Web\Areas\Admin\Views\Order\Edit.cshtml)ویجت زون ما (AdminWidgetZones.OrderDetailsBlock) می‌باشد.اضافه کردن ViewComponent و نام WidgetZoneدر اینجا ما از پلاگین موجود NivoSlider استفاده می‌کنیم، البته که می‌تونید پلاگین جدید خود را ایجاد کنید. ابتدا به فایل NivoSliderPlugin.cs رفته در این آدرس (Plugins\Nop.Plugin.Widgets.NivoSlider\NivoSliderPlugin.cs)اگر افزونه جدید ایجاد کردید مطمئن شوید که پلاگین شما از IWidgetPlugin ارث بری کرده باشد.در متد ()GetWidgetZones، ویجت زون مورد نظرمون را اضافه می‌کنیم./// &lt;summary&gt;&#xA;/// Gets widget zones where this widget should be rendered&#xA;/// &lt;/summary&gt;&#xA;/// &lt;returns&gt;Widget zones&lt;/returns&gt;&#xA;public IList &lt;string&gt; GetWidgetZones() {&#xA;   return new List &lt;string&gt; {&#xA;   PublicWidgetZones.HomepageTop,&#xA;   AdminWidgetZones.OrderDetailsBlock // this we added for custom order&#xA;  };&#xA;}در قدم بعدی، در متد GetWidgetViewComponentName ،ViewComponentname را اضافه می‌کنیم. ما ویو کامپوننتی با نام WidgetAdminOrderDetails اضافه می‌کنیم. هنگامی که صفحه ویرایش سفارش مدیر را مشاهده می‌کنیم، این viewcomponent صدا زده می‌شود. این viewcomponent لیستی از تب‌های که می‌خواهیم بهش اضافه کنیم را برمی‌گرداند./// &lt;summary&gt;&#xA;/// Gets a name of a view component for displaying widget&#xA;/// &lt;/summary&gt;&#xA;/// &lt;param name=&#34;widgetZone&#34;&gt;Name of the widget zone&lt;/param&gt;&#xA;/// &lt;returns&gt;View component name&lt;/returns&gt;&#xA;public string GetWidgetViewComponentName(string widgetZone) {&#xA;   if (widgetZone == AdminWidgetZones.OrderDetailsBlock)&#xA;            return &#34;WidgetsAdminOrderDetails&#34;&#xA;   return &#34;WidgetsNivoSlider&#34;&#xA;}ایجاد فایل ViewComponent و TabList و TabContentویو کامپوننت WidgetsAdminOrderDetailsViewComponent.cs ایجاد می‌کنیم در این آدرسNop.Plugin.Widgets.NivoSlider\Components\WidgetsAdminOrderDetailsViewComponent.csnamespace Nop.Plugin.Widgets.NivoSlider.Components {&#xA;                  [ViewComponent(Name = &#34;WidgetsAdminOrderDetails&#34;)]&#xA;                  public class WidgetsAdminOrderDetailsViewComponent: NopViewComponent {&#xA;                          public WidgetsAdminOrderDetailsViewComponent() {}&#xA;                          public IViewComponentResult Invoke(string widgetZone, object additionalData) {&#xA;                                 return View(&#34;~/Plugins/Widgets.NivoSlider/Views/WidgetsAdminOrderDetails/AdminOrderTabList.cshtml&#34;);&#xA;                            }&#xA;                   }&#xA;}فایل AdminOrderTabList.cshtml را ایجاد می‌کنیم، در این فایل لیستی از تب‌ها با فایل محتوای آنرا ارائه می‌دهیم.مکان ذخیره فایل در آدرس زیر می‌باشد.(Plugins\Nop.Plugin.Widgets.NivoSlider\Views\WidgetsAdminOrderDetails\AdminOrderTabList.cshtml)همانطور که مشاهده می‌کنین یک پوشه جدید در ویو ایجاد کردیم.@using Nop.Services.Common&#xA;@using Nop.Core&#xA;@* You can add above 2 namespace in _ViewImport.cshtml. This 2 namespace required for workcontext and generic attribute service.*@&#xA;@inject IWorkContext workContext&#xA;@inject IGenericAttributeService genericAttributeService&#xA;@{&#xA;      const string hideCustomBlockAttributeName = &#34;CustomOrderPage.HideCustomBlock&#34;&#xA;        var hideCustomBlock = genericAttributeService.GetAttribute&lt;bool&gt; (workContext.CurrentCustomer, hideCustomBlockAttributeName);&#xA;  }&#xA;&lt;nop-panel asp-name=&#34;custom-order-tab&#34; asp-icon=&#34;fa fa-th-list&#34;&#xA;     asp-title=&#34;CustomTabTitle&#34;&#xA;     asp-hide-block-attribute-name=&#34;@hideCustomBlockAttributeName&#34;&#xA;     asp-hide=&#34;@hideCustomBlock&#34; asp-advanced=&#34;true&#34;&gt;&#xA;                @await &#xA;Html.PartialAsync(&#34;/Plugins/Widgets.NivoSlider/Views/WidgetsAdminOrderDetails/_CustomTab.Order.cshtml&#34;)&#xA;&lt;/nop-panel&gt;اگر می‌خواهید چندین تب در صفحه ویرایش سفارش ایجاد کنین، این کد را در همان پوشه تکرار کنید و مکان مختلفی را برای محتوای تب (Content cshtml file)  ایجاد کنید.(نکته: من این کد را از فایل order/edit.cshtml ناپ‌کامرس کپی کردم)آدرس فایل محتوا تب (Plugins/Widgets.NivoSlider/Views/WidgetsAdminOrderDetails/_CustomTab.Order.cshtml&lt;div class=&#34;panel-body&#34;&gt;&#xA;    &lt;div class=&#34;panel panel-default sub-panel&#34;&gt;&#xA;         &lt;div class=&#34;panel-body&#34;&gt;&#xA;             Custom Body content&#xA;         &lt;/div&gt;&#xA;     &lt;/div&gt;&#xA;&lt;/div&gt;داتمطمئن شوید هر دو فایل مانند تصویر این تنظیم (کپی شدن فایل در زمان پابلیش)، انجام شده باشد. اگر از VSCode استفاده می‌کنید، به صورت دستی باید این مورد را در فایل plugin.csproject اضافه کنید.(Plugins\Nop.Plugin.Widgets.NivoSlider\Nop.Plugin.Widgets.NivoSlider.csproj)پلاگین را بیلد کنید و به صفحه ویرایش سفارش بروید و طبق تصویر زیر نتیجه را ببینید. تب با نام CustomTabTitle ایجاد شده است.در تصویر زیر فایل‌های که تغییر دادم یا اضافه کردم را می‌توانید مشاهده کنید.در این مقاله در مورد کدها توضیح داده نشده است چون هدف اصلی مقاله نشان دادن مراحل اضافه کردن تب از اول تا اخر بودش.خیلی ممنون از توجهتون. نظرات و پیشنهادتون رو برام بنویسید.منبع : https://dzone.com/articles/how-to-add-tab-on-admin-side-using-the-plugin-in-n </description><category>مینو علیمحمدی</category><author>مینو علیمحمدی</author><pubDate>Sat, 03 Apr 2021 23:57:22 +0430</pubDate></item></channel></rss>