nopStation: BlogBloghttps://www.nop-station.com/Fri, 29 Mar 2024 07:50:19 GMTurn:store:1:blog:post:37https://www.nop-station.com/nop-v460-improvements-in-detailExploring Advancements in nopCommerce version 4.60: A Comprehensive Breakdown<p><img src="/images/uploaded/Blog/nop_460_improvments_banner.png" alt="" /></p> <p>With the release of nopCommerce version 4.60, nopCommerce has brought some long-awaited new features, as well as some key performance improvements and bug fixes. Built on .NET 7, the latest version of nopCommerce has been out for quite a while and we at nopStation believe that it's about time to familiarize ourselves with some of the big changes in nopCommerce version 4.60. So, we have prepared a comprehensive breakdown of the new features present in nopCommerce 4.60 in our latest blog post.</p> <h4 style="text-align: left;">New features, improvements, and bug fixes in nopCommerce version 4.60:</h4> <p><strong>#7</strong> Products. Added support for video</p> <p>Admin site</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_1.png" alt="" /></p> <p>Public store</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_2.png" alt="" /></p> <p><strong>#1933 - </strong> Display all pictures on catalog pages</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_3.png" alt="" /></p> <p><strong>Public store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_4.png" alt="" /></p> <p><strong>#3997 - </strong> Added Instagram to default social media links</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_5.png" alt="" /></p> <p><strong>Public store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_6.png" alt="" /></p> <p><strong>#3075 - </strong> Support searching products by manufacturers' names and categories names</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_7.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_8.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_9.png" alt="" /></p> <p><strong>Public store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_10.png" alt="" /></p> <p><strong>#5947 - </strong> Search customers by last activity and registration dates</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_11.png" alt="" /></p> <p><strong>#5261 - </strong> Allowed a store owner to edit the <strong>robots.txt</strong> file in admin area</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_12.png" alt="" /></p> <p><strong>#3777 - </strong> New activity log types added. Some new activity type is added to nop v4.60. Those are the following :</p> <ul> <li>Categories were exported</li> <li>Customers were exported</li> <li>Manufacturers were exported</li> <li>Newsletter subscriptions were exported</li> <li>Newsletter subscriptions were imported</li> <li>Orders were exported</li> <li>Products were exported</li> </ul> <p><strong>#1961 - </strong> Allow VAT number to be entered in guest checkout</p> <p>It will only be considered when <strong>EuVatEnabled</strong> is enabled. If this new setting is disabled, then during anonymous checkout, a warning that the VAT number can be entered and used only after registration should be displayed. If it's enabled, then we add a new field on the billing address page to enter the VAT number. When saving the address, we check the validity of this number (<strong>GetVatNumberStatus </strong>method), if it's valid, then save the VAT number and its status for the customer (guest). When placing an order, this number will be saved in the order details.</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_13.png" alt="" /></p> <p><strong>Public store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_14.png" alt="" /></p> <p><strong>#6182</strong> reCAPTCHA added to guest checkout</p> <p><strong>Admin side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_15.png" alt="" /></p> <p><strong>Public Store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_16.png" alt="" /></p> <p><strong>#5705 - </strong> A way to enable/disable discounts: <strong>IsActive</strong> property added</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_17.png" alt="" /></p> <p><strong>#524 - </strong> Localized export/import for Products, Manufacturers and Categories When we have two or more languages, we should support multilanguage data (export/import to Excel/XML). Examples: SEO for product is exported only for standard variation - not for localized content... And other localized field of database too... (Product description ..., Category localized columns...) ... ... ...</p> <!--<p><img src="/images/uploaded/Blog/nop_460_improvments_18.png" alt="" /></p>--> <p>If we add any language,</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_19.png" alt="" /></p> <p>Then, it will show on Product form as well</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_20.png" alt="" /></p> <p>Next, if user export , then user will see new tab regarding localization</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_21.png" alt="" /></p> <p><strong>#5604 - </strong> Show product thumbnail on order details page Order Detail Page</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_22.png" alt="" /></p> <p><strong>Printed copy:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_23.png" alt="" /></p> <p><strong>#3511 - </strong> New products page pagination added</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_24.png" alt="" /></p> <p>Added pagination in this page</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_25.png" alt="" /></p> <p>Pagination configuration</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_26.png" alt="" /></p> <p><strong>#5802 - </strong> Adding header and footer custom HTML from the admin area</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_27.png" alt="" /></p> <p><strong>#5123 - </strong> Upload multiple product images at the same time.</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_28.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_29.png" alt="" /></p> <p>Please see the following link video regarding ‘How does it work’ in public store Video link: <a href="https://youtu.be/M9_SLdGmY0w">Multiple image import nop v4.60</a></p> <p><strong>#29 - </strong> Catalog pages. Display "From" prices for products with attributes with price adjustments</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_30.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_31.png" alt="" /></p> <p><strong>#5979 - </strong> For activating this feature-Initially, user needs to enable ‘Use Ajax products loading</p> <p><strong>Menu path: Admin area &gt; Configuration &gt; Settings &gt; Catalog Setting</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_32.png" alt="" /></p> <p>Please, see the mentioned video to see ‘How does it work in the public store” : <a href="https://www.youtube.com/watch?v=XXMYMYQ-2mY">Scroll page up on product load</a></p> <p><strong>#5313 - </strong> Order import from excel functionality added</p> <p>Now, the user can import orders through Excel file in nop V4.60</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_33.png" alt="" /></p> <p><strong>#508 - </strong> Added support for SVG images</p> <p><strong>Scalable Vector Graphics (SVG)</strong> is a web-friendly vector file format. As opposed to pixel-based raster files like JPEGs, vector files store images via mathematical formulas based on points and lines on a grid.</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_34.png" alt="" /></p> <p><strong>#5427 - </strong> Toggle button added for show/hide ajax filter on catalog page in mobile screen</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_35.png" alt="" /></p> <p><strong>#5809 - </strong> Added an automated way to delete inactive customers and their personal data</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_36.png" alt="" /></p> <p><strong>#6198 - </strong> Ignore canceled orders for discounts with N-Time use</p> <p>In Previous version, after a cancel order customer cannot use it again Steps of reproduce the problem in the previous version, Steps to reproduce the problem:</p> <ul> <li>Create a discount coupon with an N-Time limit with the value "1"</li> <li>As a customer, use this coupon.</li> <li>As admin, cancel this order.</li> <li>As a customer, try to use this coupon again, error message appears that this coupon already used and can't be used again.</li> </ul> <p>Here is the screenshots in the next page :</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_37.png" alt="" /></p> <p>But, now in v4.60, it can be use. User can try with reproduce the problem. Here is the screenshot:</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_38.png" alt="" /></p> <p><strong>#5241 - </strong> Added additional WidgetZones for Login, Register, Wishlist and other</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_39.png" alt="" /></p> <p><strong>#6062 - </strong> Successful message in account details</p> <p>Previously, no successful message display after any information update. But presently, in nop v4.60 After update info in the account detail in account page, successful message will be displayed</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_40.png" alt="" /></p> <p><strong>#5905 - </strong> Message template search by active status added</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_41.png" alt="" /></p> <p><strong>#6115 - </strong> Display product short description on catalog pages</p> <p><strong>Admin Side:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_42.png" alt="" /></p> <p><strong>Public Store:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_43.png" alt="" /></p> <p><strong>#6248 - </strong> Add ADA attributes to anchor tag</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_44.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_45.png" alt="" /></p> <p><strong>#6235 - </strong> Fixed height of the cookie notification dialog</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_46.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_48.png" alt="" /></p> <p><strong>#385 - </strong> Added support for product URLs with a category in path</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_49.png" alt="" /></p> <p><strong>#5120</strong> Sendinblue plugin - New attribute added for customer language</p> <p>For more details : <a href="https://github.com/nopSolutions/nopCommerce/issues/5120">Sendinblue plugin. Add an attribute for customer language · Issue #5120 · nopSolutions/nopCommerce · GitHub</a></p> <p><strong>#5627 - </strong> Added minification error logging</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_50.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_51.png" alt="" /></p> <p>Fix container path for app data</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_52.png" alt="" /></p> <p><strong>#1933 - </strong> Fixed default image display if product images are not set</p> <p>In nop v4.60, there is configuration where user can set default image. If there is no image on product configuration, this configured default image will view automatically. Detailed process flow is demonstrated in <strong>#5357</strong> improvement note</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_53.png" alt="" /></p> <p><strong>#5753 - </strong> Uploading default image from admin area</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_54.png" alt="" /></p> <p>A product has been created then, without any image:</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_55.png" alt="" /></p> <p>But we can see an image in the product page, which is coming from Default image:</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_56.png" alt="" /></p> <p><strong>#5226 - </strong> Facebook authentication plugin. Data deletion request handling</p> <p>For more details :<a href="https://github.com/nopSolutions/nopCommerce/issues/5226">Facebook Authentication plugin. User Data Deletion · Issue #5226 · nopSolutions/nopCommerce · GitHub</a> <a href="https://developers.facebook.com/docs/development/create-an-app/app-dashboard/data-deletion-callback">Data Deletion Callback - App Development (facebook.com)</a></p> <p><strong>#5607 - </strong> ACL rules for the multi-factor authentication</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_57.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_58.png" alt="" /></p> <p>Added a restriction on the format of the image (*.svg) that a vendor can upload in their personal account and on the 'Apply for vendor account' page</p> <p><strong>In nopCommerce 4.50 and 4.60:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_59.png" alt="" /></p> <p>&nbsp;</p> <p>Choosing file :</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_61.png" alt="" /></p> <p><strong>#4591 - </strong> Added a scheme-specific action to switch SSL setting.</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_62.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_63.png" alt="" /></p> <p>For more information : <a href="https://github.com/nopSolutions/nopCommerce/issues/4591">Two stages setting to enable SSL · Issue #4591 · nopSolutions/nopCommerce · GitHub</a></p> <p><strong>In nopCommerce 4.50 :</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_64.png" alt="" /></p> <p><strong>In nopCommerce 4.60 :</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_65.png" alt="" /></p> <p><strong>#6328 - </strong> Added the virtual keyword for <strong>DeleteDirectory</strong> and <strong>GetFileInfo</strong> methods in <strong>NopFileProvider</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_66.png" alt="" /></p> <p><strong>#6296 - </strong> Fixed sorting and filtering by date in the sales summary report</p> <p><strong>From Forum Post: </strong></p> <ul> <li>NOP Commerce version: 4.50.2</li> <li><strong>Expected behaviour:</strong> The numbers of orders listed in the two reports should match</li> <li><strong>Actual behaviour:</strong>Sales &gt; Orders and Reports reflects server time, whereas Reports &gt; Sales Summary uses UTC time (and also includes a line for the day before the selected start date if there were orders when the order date/time UTC was before midnight and server time was the next day.</li> </ul> <p><strong>Example: </strong></p> <p>In the UK we are now on summer time (UTC+1 hour) which is also the server time</p> <p>The <strong>CreatedOnUtc</strong> time on the Order table is UTC(+0) as expected.</p> <p>Sales &gt; Orders shows the summer time against each order, and when filtering on the Start and End dates, will include orders based on summer time.</p> <p>However, Reports &gt; Sales Summary uses the UTC time.</p> <p>Therefore, when there are orders placed between UTC 23:00:00 and 23:59:59, there is a discrepancy in order numbers between the above two facilities because the orders are included/counted on different days.</p> <p>In addition, in Reports &gt; Sales Summary, when selecting a date range, if on the day before the "Start date" there were orders placed between UTC 23:00:00 and 23:59:59, the report will include a line for that date including the totals only for any late-night orders, when that date was not required.</p> <p>E.g. in Reports &gt; Sales Summary I ran a report with date range 20/06/2022 to 22/06/2022, but it also shows 4 orders on 19/06/2022 (all 4 were raised UTC 23:00:00-23:59:59 on that date - it has not counted other orders from earlier that day, so that day's figures are also incorrect).</p> <p>Reports &gt; Sales Summary should base its results on the server time as the orders page does this.</p> <p>NB. In System &gt; System Information, our "Server time zone" is "GMT Standard Time", and the "Server local time" and "Current user time" correctly reflects this (i.e. UTC+1), and "Coordinated Universal Time (UTC)" correctly shows the UTC time. In Configuration &gt; Settings &gt; Customer Settings, we are on UTC+00:00</p> <!--<p><img src="/images/uploaded/Blog/nop_460_improvments_67.png" alt="" /></p>--> <p><strong>#6332 - </strong> Added UI filter by vendor for the Sales summary report</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_68.png" alt="" /></p> <p><strong>#385 - </strong> Fix some incorrect views location</p> <p>Its already demonstrated</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_69.png" alt="" /></p> <p>For more details, please go through the following link : <a href="https://github.com/nopSolutions/nopCommerce/issues/385">Add support for product URLs with a category in path (configurable) · Issue #385 ·</a></p> <p><strong>#6301 - </strong> Use name for specification attribute option as CustomValue when exporting products</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_70.png" alt="" /></p> <p>Now, user will see value in ‘Custom value’ column if there any specification attribute available :</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_71.png" alt="" /></p> <p><strong>#6353 - </strong> Display warning when admin enters the same discount coupon code</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_72.png" alt="" /></p> <p><strong>#6056 - </strong> Replace sample pictures</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_73.png" alt="" /></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_74.png" alt="" /></p> <p><strong>#196 - </strong> Updated some third-party packages</p> <p><a href="https://github.com/nopSolutions/nopCommerce/commit/cf98a5bf97e388d4ef822548ad6a138b38a971d1">#196 Update NuGet packages for .NET 7.0.1 · nopSolutions/nopCommerce@cf98a5b · GitHub</a></p> <p><strong>#6378 - </strong> Added "Allow SVG uploads in admin area" media setting</p> <p>In media setting, user can see the configuration. Disabled by default. When enabled, it should be applied to all methods in the admin area :</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_75.png" alt="" /></p> <p><strong>#6387 - </strong> PayPal Commerce. Added a link to our documentation :</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_76.png" alt="" /></p> <p><strong>#6418 - </strong> PayPal Standard plugin removed</p> <p>In nop 4.60, Paypal standard has been removed &amp; Cyber source has been added</p> <p><strong>nopCommerce 4.50 :</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_77.png" alt="" /></p> <p><strong>nopCommerce 4.60 :</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_78.png" alt="" /></p> <!--<p><strong>#6278 - </strong> ShipStation plugin removed</p> <p>For more info :<a href="https://github.com/nopSolutions/nopCommerce/issues/6278">Remove ShipStation · Issue#6278 · nopSolutions/nopCommerce · GitHub </a></p>--> <p>EasyPost shipping plugin removed Easypost shipping plugin has been removed in nop v4.6</p> <p><strong>nopCommerce 4.50 :</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_79.png" alt="" /></p> <p><strong>nopCommerce 4.60:</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_80.png" alt="" /></p> <p><strong>#6340 - </strong> Added some HTML attributes missed from <strong>Nivo Slider widget</strong></p> <p><img src="/images/uploaded/Blog/nop_460_improvments_81.png" alt="" /></p> <p>For more info : <a href="https://github.com/nopSolutions/nopCommerce/commit/a1a559292db7ffa819c92bb1f47de2bc034f2915">#6340 Added some HTML attributes missed from Nivo Slider widget · nopSolutions/nopCommerce@a1a5592 · GitHub</a></p> <!--<p><strong>#6372 - </strong> Don't display "first steps" wizard for vendors</p> <p>For more info: <a href="https://github.com/nopSolutions/nopCommerce/issues/6372">Don't display "first steps" wizard for vendors · Issue #6372 · nopSolutions/nopCommerce · GitHub</a></p>--> <p>&nbsp;</p> <!--<p><strong>#5250 - </strong> Moved display the order.CustomValuesXml on the Customer Order Details page to under the Payment Details</p> <p>More info : <a href="https://github.com/nopSolutions/nopCommerce/issues/5250">Order CustomValuesXml · Issue #5250 · nopSolutions/nopCommerce · GitHub</a></p>--> <p><strong>#6039 - </strong> Added possibility editing of billing and shipping addresses during checkout</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_82.png" alt="" /></p> <!--<p><strong>#4987 - </strong> Require a customer to re-login on all devices after password changing</p> <p><img src="/images/uploaded/Blog/nop_460_improvments_83.png" alt="" /></p> <p><strong>#43 - </strong> Localized main website keyword, meta title and meta description</p> <p>For more info: <a href="https://github.com/nopSolutions/nopCommerce/issues/43">Localize main website keyword, meta title and meta description · Issue #43 · nopSolutions/nopCommerce · GitHub</a></p>-->urn:store:1:blog:post:36https://www.nop-station.com/celebrating-10-years-of-nopstationCelebrating 10 Years of nopStation<p dir="ltr"><img src="/images/uploaded/Blog/nopStation-10th-anniversary-main-banner.png" alt="nopStation's 10 year anniversary " /></p> <p dir="ltr">2022 had been a memorable year for team nopStation. We have already shared a <a href="https://www.nop-station.com/nopstation-year-end-throwback-2022">2022 throwback blog</a> that recaps some of the amazing moments we had throughout the year. The year is made even more special as it marks our team’s 10-year anniversary. It's hard to believe that it's already been a decade, and while it has been a truly long time, nopStation has certainly grown and changed greatly in that period. We wanted to take the opportunity to reflect on our history and the journey so far.</p> <p dir="ltr" style="margin-bottom: 20px;">nopStation started its journey a decade ago as an eCommerce team of our parent company <a href="https://brainstation-23.com/?bc">Brain Station 23 Ltd, </a>a software company headquartered in Dhaka, Bangladesh, Brain Station 23 has now grown to be one of the top software companies in the region. At the time, eCommerce in Bangladesh was still in its infancy, and other players in the software industry in our region did not see exponential growth in the sector. Brain Station 23’s <strong>Founder &amp; CEO, Mr. Raisul Kabir</strong> however, saw things differently as he believed eCommerce development was a market primed for growth in the coming years and an eCommerce wing would be essential to the future of our company. Through this belief and foresight, Brain Station 23 formed its eCommerce wing, nopStation.</p> <p><img src="/images/uploaded/Blog/BS23-CEO-Raisul-Kabir-with-nopCommerce-founder.jpg" alt="BS23 CEO Raisul Kabir with nopCommerce founder" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">Brain Station 23 CEO Raisul Kabir with nopCommerce Founder &amp; CEO Andrei Mazulnitsyn</figure> <p dir="ltr" style="margin-bottom: 20px;">Aside from forecasting the importance of eCommerce development, nopStation also saw incredible potential in <a href="https://www.nopcommerce.com/en/features">nopCommerce</a> as a platform. nopCommerce’s open-source nature and pluggable architecture provided incredible versatility and had a growing development community around it. The platform provided great scope for custom eCommerce development and was gaining traction across multiple regions. Seeing this potential, our team chose nopCommerce as the basis of our eCommerce development and started its journey as a nopCommerce solution provider and even hosting nopCommerce day 2018 as a Silver sponsor. Back in 2018, we also arranged <a href="https://www.nop-station.com/nopcommerce-developers-meetup-dhaka-2018-2">the very first nopCommerce Developers meet-up in Dhaka</a>, with the presence of the <strong>nopCommerce platform founder and CEO, Andrei Mazulnitsyn</strong>.</p> <p><img src="/images/uploaded/Blog/nopCommerce-developer-meetup-dhaka-2018.jpg" alt="nopCommerce developer meetup Dhaka 2018" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">Team nopStation(2018) at nopCommerce Developer meetup 2018 in with nopCommerce Founder &amp; CEO Andrei Mazulnitsyn</figure> <p dir="ltr" style="margin-bottom: 20px;">The event marked an inspirational moment for team nopStation as spoken of by the person who would eventually become our <strong>SBU Head, Mr. Minul Islam Sohel</strong> at the time:</p> <p dir="ltr" style="margin-bottom: 20px;"><strong><em>“I had a dream that someday Andrei will visit Bangladesh and I will meet him, I knew he would come to Bangladesh one day but never imagined he will come this year. Meeting him was a big motivation.”</em></strong></p> <p><img src="/images/uploaded/Blog/quote-from-minul-islam-sohel.png" alt="quote from SBU head Minul Islam Sohel" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">nopStation SBU Head Minul Islam Sohel's reaction to meeting nopCommerce Founder &amp; CEO Andrei Mazulnitsyn</figure> <p dir="ltr" style="margin-bottom: 20px;">In the early years, nopStation was a much smaller team than it is today. Even as far back as 2018, nopStation was a team of just a couple dozen people but, what the nopStation team lacked in numbers, we made up for in dedication and effort. Throughout the early and mid-2010’s nopStation was able to establish itself as a leading eCommerce development brand within our region. What made nopStation unique was its diverse client base. nopStation helped develop solutions for local eCommerce giants such as Othoba.com and Priyoshop, as well as lifestyle brands such as Sailor, Ecstasy, Apex, and Perfume World to establish their businesses. However, what made nopStation unique was its global client base through the reach of the nopCommerce platform. nopStation served clients across 5 different continents and <a href="https://www.nop-station.com/our-clients">in over 150 countries</a>. This global client base is at the core of nopStation’s early success and growth then and now.</p> <p><img src="/images/uploaded/Blog/nopStation-clients.png" alt="nopStation's notable clients" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">nopStation's growing global client base</figure> <p dir="ltr" style="margin-bottom: 20px;">The start of 2020 coincided with the COVID-19 pandemic, which hit the entire world hard financially. The software industry had to adapt to isolation and remote work. nopStation, too, had to adapt to these changes while also maintaining the needs of our clients. Under the leadership of our SBU Head, Mr. Minul Islam Sohel, our team showed remarkable perseverance and work ethic during the pandemic. Our team collaborated around the clock to serve our existing clients and grow our client base further. During the pandemic, nopStation’s team expanded despite losing some valuable core team members due to others in our team stepping up and taking on larger leadership roles and challenges. Our team nearly doubled in size in that period, and we added an incredibly talented roster of Developers, UI/UX engineers, QAs, and Business Analysts. Under the leadership of our SBU Head and original core team members, nopStation was able to reorganize itself into an enigmatic unit of professionals dedicated to sustaining our growth in terms of revenue and technical excellence. Today <a href="https://www.nop-station.com/meet-our-team">our team</a> comprises 100+ talented individuals, all working towards maintaining that standard.</p> <p><img src="/images/uploaded/Blog/team-nopStation-10th-anniversary-celebration-2022.jpg" alt="team nopStation at 10th anniversary celebration" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">Team nopStation(2022-present) at our 10th-anniversary celebration tour at Cox's Bazar</figure> <p dir="ltr" style="margin-bottom: 20px;">Speaking of achievements nopStation has achieved a lot throughout our 10 years of existence. Our achievements start first and foremost on the nopCommerce platform. nopStation is the <strong><a href="https://www.nopcommerce.com/en/solution-partners">#1 Gold Solution partner</a></strong> on the nopCommerce platform. Being the #1 ranked Solution provider among such an active and diverse development community is something we hold in high regard, and we are constantly trying to retain our position among other great solution providers. Our presence on the nopCommerce platform has grown as well. To just give an example of nopStation’s presence on the nopCommerce platform:</p> <ul> <li>nopStation boasts 10,202+ nopCommerce solution partner points.</li> <li>We are 1st ever solution partner to break the 10,000 points milestones</li> <li>3 nop MVPs on our current roster</li> <li>63+ nopCommerce certified developers</li> <li><a href="https://www.nop-station.com/our-clients">165+ websites</a> developed using nopCommerce</li> <li><a href="https://www.nopcommerce.com/en/marketplace?vendor=106608">168+ plugins and themes</a> on the nopCommerce marketplace</li> <li>7+ Case studies published on the nopCommerce platform</li> <li>Only solution provider with <a href="https://www.nop-station.com/nopcommerce-mobile-app">nopCommerce mobile apps</a> for Android and iOS platforms developed using multiple tech stacks: Flutter, Native (Swift &amp; Kotlin), Ionic</li> <li>Official Silver sponsor for nopCommerce day 2018</li> <li>7+ years as a solution partner and counting</li> </ul> <p><img src="/images/uploaded/Blog/nopStations-achivements-on-nopCommerce.png" alt="nopStation achievements" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">nopStation's contributions &amp; achievements on the nopCommerce platform</figure> <p dir="ltr" style="margin-bottom: 20px;">nopStation has also garnered achievements along the way as well. With our parent company Brain Station 23, we have also added technological partnerships with multiple software giants. These partnerships are not only a showcase of our growth as a global company but our diverse technological proficiency. nopStation’s key technology partnerships include:</p> <ul> <li><a href="https://www.microsoft.com/en-us/solution-providers/partnerdetails/brain-station-23-ltd_4930e3b1-a0c5-46f8-84fe-b3b03553363e/30087b48-d90e-4d37-abef-d0467eb91672"> Microsoft Gold Partner </a></li> <li><a href="https://cloud.withgoogle.com/partners/detail/?id=brain-station-23-ltd&amp;hl=en-US"> Google Cloud Platform Partner </a></li> <li><a href="https://partners.amazonaws.com/partners/001E000001eO2vOIAS/Brainstation-23 Ltd"> Amazon AWS Partner </a></li> <li><a href="https://partner-finder.oracle.com/catalog/scr/Partner/SCPP-DAPAIXWM.html"> Oracle Gold Partner </a></li> <li><a href="https://moodle.com/partners/brain-station-23-ltd/"> Moodle certified services Partner </a></li> <li><a href="https://partnerdirectory.atlassian.com/?lang=en-us"> Atlassian Solution Partner </a></li> </ul> <p><img src="/images/uploaded/Blog/nopStation-technological-partnerships.jpg" alt="nopStation's global technological partnerships" /></p> <figure style="text-align: center; margin-bottom: 15px; font-size: 14px; margin-top: -15px;">nopStation's notable clients over the years</figure> <p dir="ltr" style="margin-bottom: 20px;">At the end of these 10 years, nopStation certainly has come a long way. But we wouldn’t be here without the contribution of all our valuable team members, both past and present. We cherish all of our teammates and their continued efforts and sacrifices. We always aim to repay those efforts and create more opportunities for each other. This sense of collaboration and purpose is at the core of team nopStation and the key to our sustained growth. We thank each and every one of our former and current team members wholeheartedly for making all of these great achievements possible.</p> <p dir="ltr" style="margin-bottom: 20px;">Looking forward to the next decade, the world is certainly filled with uncertainty amidst a global recession and an ever-changing business landscape transitioning to the 4th industrial revolution. Team nopStation is hopeful that we will adapt to these new paradigms and continue to grow with the nopCommerce platform and establish ourselves to even greater heights.</p> <p dir="ltr" style="margin-bottom: 20px;">Here's to the next 10 years!</p> <p dir="ltr" style="margin-bottom: 20px;"><strong><em>Team nopStation </em></strong></p>urn:store:1:blog:post:35https://www.nop-station.com/nopstation-year-end-throwback-2022nopStation Year-end Throwback 2022<p dir="ltr"><img src="/images/uploaded/Blog/throwback-2022-main-banner.png" alt="nopStation throwback 2022" /></p> <p dir="ltr">The year 2022 has been a year of change and transition for the world. The road to normalcy from a 2-year pandemic, growing speculation of a global recession, and inflation in the Bangladeshi economy have loomed heavily on all of us. Still, in spite of these challenges, the year 2022 has been quite a memorable for our team at nopStation, due to the collective efforts of our amazing team members. With the year coming to an end let's take a step back and observe some of the notable achievements of the team at nopStation through the year 2022.</p> <p>&nbsp;</p> <h3 dir="ltr">nopStation’s Journey of Website Migration and Renovation</h3> <p><img src="/images/uploaded/Blog/nopStation-website-migration-to-nop450.png" alt="nopStation's website migration" /></p> <p dir="ltr" style="margin-bottom: 20px;">With the release of nopCommerce version 4.50, which came with an abundance of new features along with security and performance improvements, nopStation felt that it was the right time to upgrade its website from nopCommerce version 4.30 to version 4.50. nopStation also decided to use this migration opportunity to completely renovate its website with a host of new improvements and optimizations.</p> <p dir="ltr" style="margin-bottom: 20px;">You can read all about in <a href="https://www.nopcommerce.com/en/a-website-renovation-and-migration-journey-from-nopcommerce-version-430-to-450">nopStation’s case study on its website migration and renovation journey</a> published on the nopCommerce platform. Implementing all of these new features and optimizations took significant development plans and efforts. Through the collective efforts of its team along with a concise and optimized development plan, nopStation was able to complete its migration in a matter of minutes and continue serving its customers.</p> <p dir="ltr" style="margin-bottom: 20px;">Our new website represents nopStation’s development expertise and brand presence as a nopCommerce solution provider. The incredible new features on our new website provide a seamless customer experience. As all of these features on our website are implemented using our own products for nopCommerce, it acts as a showcase of our products and the power of nopCommerce as a platform.</p> <p>&nbsp;</p> <h3 dir="ltr">Retaining Our Rank as the #1 Gold Solution Partner of nopCommerce</h3> <p><img src="/images/uploaded/Blog/retaining-number-one-gold-solution-partner-badge.png" alt="No. 1 Gold solution partner" /></p> <p dir="ltr" style="margin-bottom: 20px;">Undoubtedly one of nopStation’s proudest achievements is our rank as the <a href="https://www.nopcommerce.com/en/solution-partners">#1 Gold solution partner for nopCommerce</a> . Through 7 years of partnership as a solution partner, nopStation has come a long way in its journey. We have always strived for excellence and provided industry-leading customer support to our clients. We have added contributions towards the nopCommerce platform as well through our development and presence on the platform. Most notably we have published over 168 themes and plugins on the nopCommerce marketplace and added over 163 websites in 7+ years of our partnership. We also bolster over 9,850+ solution partner points, on track to becoming the 1st ever solution partner to break the 10,000 points milestone.</p> <p dir="ltr" style="margin-bottom: 20px;">Being the no. 1 Gold solution partner of nopCommerce is a reflection of our team’s hard work and tireless dedication. Being the leading nopCommerce solution provider in an increasingly growing and evolving eCommerce development space is inspiring for us and the nopCommerce community as a whole.</p> <p>&nbsp;</p> <h3 dir="ltr">Released Kingdom Megastore theme, nopStation’s Flagship Theme for nopCommerce Stores</h3> <p><img src="/images/uploaded/Blog/release-of-kingdom-theme.png" alt="Kingdom theme " /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation's biggest product announcement of the year was the release of its new flagship theme, the <a href="https://www.nop-station.com/kingdom-theme-for-nopcommerce">Kingdom Megastore theme</a> for nopCommerce. During the development plan for the Kingdom theme, nopStation set the goal of creating a megastore theme that was optimized for showcasing a wide range of products and adaptable to various types of online businesses. The Kingdom theme’s modern design layout and stylish typography help it stand out. This theme also comes with powerful customization options which allow our customers to fine-tune the look and feel of the Kingdom theme to match their brand identity and business needs.</p> <p dir="ltr" style="margin-bottom: 20px;">Our team of UI engineers worked to develop a theme that combined modern eCommerce design and functionality while retaining fast performance. The Kingdom theme was built using modern design principles. nopStation added several key features and plugins for the Kingdom theme such as Smart Product Box plugin, <a href="https://www.nop-station.com/one-page-checkout">One Page Checkout plugin</a>, and <a href="https://www.nop-station.com/smart-mega-menu">Smart Mega Menu plugin</a> that adds class-leading functionality to this theme. Kingdom theme also comes with class-leading performance as well which makes it the ideal choice for any nopCommerce mega store or super store.</p> <p>&nbsp;</p> <h3 dir="ltr">Resuming Work From the Office after the COVID-19 pandemic and Moving to Our Brand New Office at Mirpur DOHS, Dhaka</h3> <!--<p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" width="1200" height="630" /></p>--> <p dir="ltr" style="margin-bottom: 20px;">From early 2020 to early 2022, the entire world was consumed by the COVID-19 pandemic. Like millions of businesses around the world, nopStation had to adjust to the pandemic as well. Through our collective efforts. We successfully adopted work-from-home and we continued to serve our customers throughout the pandemic. However, nearly all of our team members were isolated in the home office which not only affected our productivity and teamwork but our mental health as well. In Mid 2022, nopStation along with the entire Brain Station 23 family slowly returned to the in-person office. Having the opportunity to see each other and working together side by side was a triumph for all of us as team members and as an organization.</p> <p dir="ltr" style="margin-bottom: 20px;">One of nopStation’s biggest transitions this year was moving a large part of our core team from Brain station 23’s Mohakhali office to the new branch in Mirpur DOHS. While leaving our hold home was quite difficult for us on many personal and professional aspects. We will always cherish our memories of Mohakhali office. Our new home in <a href="https://goo.gl/maps/nTz9QoQ9oarCKwq3A">Mirpur DOHS</a> represents a new beginning for our team with brand new opportunities and benefits. We are all excited to continue our journey and create wonderful new memories in our home in Mirpur.</p> <p>&nbsp;</p> <h3 dir="ltr">nopStation’s Black Friday &amp; Christmas sale</h3> <p><img src="/images/uploaded/Blog/christmas-offers.png" alt="nopStation's Holiday offers" /></p> <p dir="ltr" style="margin-bottom: 20px;">To celebrate nopStation’s new website launch and provide our loyal customers with an engaging new campaign, nopStation gave out its biggest sale of the year. On the event of Black Friday and Christmas, we gave out exciting Black Friday discount deals with up to 85% on all of our products including:</p> <p dir="ltr">&nbsp;</p> <ul> <li>Up to 68% off on <a href="https://www.nop-station.com/nopcommerce-themes">nopCommerce Themes</a></li> <li>Up to 85% off on <a href="https://www.nop-station.com/nopstation-plugins">nopCommerce Plugins</a></li> <li>Up to 82% off on <a href="https://www.nop-station.com/nopcommerce-mobile-app">Mobile Apps </a></li> </ul> <p>&nbsp;</p> <p dir="ltr" style="margin-bottom: 20px;">These discount offers started on 25th November and will end on 31st December 2022 UTC. We hope our new and long-time customers alike will enjoy this amazing Black Friday &amp; Christmas campaign and take the opportunity to power up their online business.</p> <p>&nbsp;</p> <h3 dir="ltr">Expanded Our Global Client Base</h3> <!--<p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" width="1200" height="630" /></p>--> <p dir="ltr" style="margin-bottom: 20px;">nopStation has always aimed to serve clients across various countries and to expand its customer base, this year was no different as nopStation made product sales to customers in over 50+ countries and 5 continents. Alongside new customers, nopStation, continues to serve its existing customers with new development requests and steady support.</p> <p dir="ltr" style="margin-bottom: 20px;">Our team is always looking to expand its global footprint and outreach. Till the end of this year, nopStation has served customers in 150+ countries which is a really meaningful milestone for us as an eCommerce development brand. Our team hopes to forge new partnerships and strengthen our existing business relationships.</p> <p>&nbsp;</p> <h3 dir="ltr">Released New Case Studies on the nopCommerce Platform about Our nopCommerce Client Journeys</h3> <!--<p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" /></p>--> <p dir="ltr" style="margin-bottom: 20px;">Throughout the years, nopStation has continued to grow its partnerships with clients across the world. Our team has created some truly splendid nopCommerce stores and business solutions to serve our client’s requirements. Among these many journeys, the nopStation team decided to showcase some of our notable client journeys and development stories through nopCommerce case studies. These case studies are a reflection of how nopStation’s team of talented developers create estimations of development challenges and formulate compelling solutions for the clients. Some of nopStation’s new case studies released in 2022 are:</p> <p dir="ltr">&nbsp;</p> <ul> <li><a href="https://www.nopcommerce.com/en/a-website-renovation-and-migration-journey-from-nopcommerce-version-430-to-450">nopStation: A website renovation and migration journey from nopCommerce version 4.30 to 4.50 </a></li> <li><a href="https://www.nopcommerce.com/en/yilmaz-feinkost-an-erp-integrated-ecommerce-website-and-mobile-app-development-journey">Yilmaz Feinkost: An ERP Integrated eCommerce Website and Mobile App Development Journey</a></li> <li><a href="https://www.nopcommerce.com/en/moto-mader-ags-motoshop24ch-a-nopcommerce-website-transformation-journey">Moto Mader AG’s motoshop24.ch: A nopCommerce Website Transformation Journey</a></li> <li><a href="https://www.nopcommerce.com/en/doors-direct-a-website-improvement-and-migration-journey-from-nopcommerce-43-to-44">Doors Direct: A Website Improvement and Migration Journey from nopCommerce 4.3 to 4.4 </a></li> </ul> <p>&nbsp;</p> <p dir="ltr" style="margin-bottom: 20px;">Our case studies are a testament to nopStation’s development expertise on the nopCommerce platform and our ability to build strong customer relationships. We believe in sharing powerful stories that showcase the relationships we have with our customers. Our case studies let us tell these stories and share them with the nopCommerce community to promote the growth and adoption of nopCommerce.</p> <p>&nbsp;</p> <h3 dir="ltr">Having a roster of 63+ nopCommerce Certified Developers and 3 nopCommerce MVPs</h3> <!--<p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" /></p>--> <p dir="ltr" style="margin-bottom: 20px;">The team at nopCommerce believes in self-growth and expertise as some of its core values. Our developers are not just focused on workplace productivity and client satisfaction. We believe in developing ourselves as well as skilled resources and human beings.</p> <p dir="ltr" style="margin-bottom: 20px;">With that being the case, we are extremely proud to see more of our team members achieve nopCommerce expertise through the <a href="https://www.nopcommerce.com/en/certified-developer-program">nopCommerce developer certification program</a>. Our team now boasts a roster of over 63+ nopCommerce certified developers and 3+ nopCommerce MVPs. Most notably <strong>Mr. Rashed Khan Menon</strong> became our newest nop MVP due to his valued contributions to the nopCommerce platform and community forums.</p> <p dir="ltr" style="margin-bottom: 20px;">We are extremely proud of the achievement of our team members and enthusiastic to see how they will continue their growth as nopCommerce developers.</p> <p>&nbsp;</p> <h3 dir="ltr">Added New Faces to Our Team</h3> <!--<p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" width="1200" height="630" /></p>--> <p dir="ltr" style="margin-bottom: 20px;">nopStation continues to grow not only as a brand but as a team as well. Just this year nopStation added <a href="https://www.nop-station.com/meet-our-team">20+ new members to its team</a>. Our team added new software developers, QAs, BAs, and Database Administrators to the team.</p> <p dir="ltr" style="margin-bottom: 20px;">Aside from recruiting &amp; acquiring some of the most talented people in the industry, nopStation also believes in developing talent and building toward the future. This year nopStation added 10+ new trainees to its roster. After going through a tough recruiting process, these youngsters joined nopStation and formally started their journey in the industry. We believe they will help us grow stronger as a team and become talented resources.</p> <p dir="ltr" style="margin-bottom: 20px;">Our talented new team members have already started to contribute to nopStation and we hope they will help us become a stronger unit as a whole.</p> <p>&nbsp;</p> <h3 dir="ltr">nopStation's 10-Year Anniversary Tour to Cox’s Bazar</h3> <p><img src="/images/uploaded/Topics/our-team-2.jpg" alt="nopStation's 10 year anniversary tour" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation not only believes in the value of hard work, but we also believe in celebrating it. Throughout the year our team experienced many notable achievements as individuals and as a team. But our most precious celebration of the year was our 10-year anniversary celebration of nopStation. To celebrate our anniversary, our team organized a tour to Cox’s Bazar under the leadership of our beloved Project Manager, <strong>Mr. Adnan Bin Faiz</strong>.</p> <p dir="ltr" style="margin-bottom: 20px;">The event's highlight was undoubtedly the incredible Gala dinner organized at the Sea Mount Restaurant. The dinner started off with an inspirational speech by our <strong>SBU head Mr. Minul Islam Sohel</strong>. His speech told the story of our 10-year journey along with all of the pitfalls and achievements our team had throughout. He expressed how much nopStation has grown thanks to the hard work of all of its members and how we will only grow further in the future. The inspirational speech was followed by a wonderful dinner service at the restaurant. The dinner included fun and games and socializing with all of our team members and their loved ones.</p> <p dir="ltr" style="margin-bottom: 20px;">The tour as a whole was filled with great experiences and give us much-needed quality time with our loved ones. Seeing a different side to everyone in a setting outside work helped tighten our bonds and learn more about each other.</p> <p>&nbsp;</p> <p dir="ltr" style="margin-bottom: 20px;">That’s a short summary of some of the key events for nopStation in 2022. While this year has presented all of us with new challenges. Our team has also had to say goodbye to some of our most cherished team members as they have started a new chapter in their lives. We as a team have been fortunate to come together and persevere in nopStation. We are proud of the achievements throughout the year and our growth as both teams and as individuals. As we close the chapter of 2022, we are optimistic about the future. We can’t wait to see what 2023 will bring and how we as a unit can climb higher.</p> <p>&nbsp;</p> <p dir="ltr">That’s our throwback of 2022. Thank you all for reading and a most special thanks to all of our incredible teammates.</p>urn:store:1:blog:post:34https://www.nop-station.com/nopcommerce-host-in-awsnopCommerce hosting with AWS<h3>AWS Services</h3> <ol> <li><strong>CloudFront</strong>: Provides CDN caching for media content</li> <li><strong>Internet Gateway: </strong>A VPC component that allows connection between internet and VPC</li> <li><strong>NAT Gateway:</strong> A internet gateway inside VPC, services in private subnet uses NAT gateway to access internet.</li> <li><strong>S3 Bucket:</strong> A Cloud Storage Service of AWS</li> <li><strong>VPC:</strong> A virtual private cloud system, used to containerized AWS services</li> <li><strong>Subnet: </strong>A component of VPC includes a range of IP Address inside VPC for accessibility</li> <li><strong>EC2:</strong> A virtual machine on which a Operating System can be installed</li> <li><strong>Availability Zone: </strong>These are isolated locations within a data center</li> <li><strong>Load Balancer: </strong>A load balancer is responsible for managing load / traffic across servers</li> <li><strong>Auto Scaling: </strong>This methodology is used to scale up instances dynamically under different metrics and constraints for better load distribution.</li> <li><strong>RDS: </strong>A relational database management system service from AWS, provides wide verities of Database system to pick from.</li> <li><strong>AWS CloudTrail</strong>: This is&nbsp;an AWS service that helps you enable governance, compliance, and operational and risk auditing of your AWS account.</li> <li><strong>AWS CloudWatch:</strong> this is&nbsp;a monitoring and management service that provides data and actionable insights for AWS, hybrid, and on-premises applications and infrastructure resources</li> <li><strong>Amazon Simple Notification Service:</strong> (Amazon SNS) is a fully managed messaging service for both application-to-application (A2A) and application-to-person (A2P) communication.</li> </ol> <p>&nbsp;</p> <h3>How cloud architecture works</h3> <p><img src="/images/uploaded/Blog/AWS-architecture-diagram-for-nopCommerce.webp" alt="AWS architecture diagram for nopCommerce" width="999" height="590" /></p> <p style="text-align: center;"><em>Figure : AWS Architecture Diagram for NopCommerce</em></p> <ul> <li><strong>DNS: </strong>Users will request to DNS server.</li> </ul> <ul> <li><strong>VPC:</strong> a vpc is responsible for managing a private cloud for the aws services we used, every service we use that communicates with the internet is assigned under a default vpc. A VPC is connected to the internet through an internet gateway. When users request to the dns server, the request is managed through the internet gateway and forwarded to specific services in the VPC. A vpc can consist of private and public subnets, services in public subnet can be accessible via the internet where services in private subnet are only accessible through the local network.</li> </ul> <ol> <li><strong>Public Subnet: </strong>in our public subnet we have kept the EC2 Master node and NAT Gateway, Both Services in private subnet will use the NAT Gateway to communicate to the internet</li> <li><strong>Private Subnet (EC2):</strong> for autoscaling purposes we have placed the scalable EC2 inside a private subnet</li> <li><strong>Private Subnet (RDS):</strong> For security purpose we have placed the RDS inside another private subnet, nodes only inside the vpc will be able to communicate to it.</li> </ol> <ul> <li><strong>Scheduled Tasks ( EC2 ) :</strong> A Nopcommerce application may have many scheduled tasks , a instance handles its own scheduled task periodically after a fixed interval or manually from a system admin . Since the ec2 machine is the host for the system it will handle the schedule task in it’s own environment .</li> </ul> <ul> <li><strong>Load Balancer</strong>: An application Load Balancer is directly associated with the EC2 Master node, EC2 in the private subnet are configured to be auto scaled when certain metrics are met.</li> </ul> <ul> <li><strong>Auto Scaling:</strong> Autoscaling configuration is connected with the load balancer template. When autoscaling conditions are met, Instances are scaled out from the private subnet (EC2) using the AMI images.</li> </ul> <ul> <li><strong>S3: </strong>S3 is a cloud storage service of aws , We have used S3 bucket to keep and serve static media assets. Also, the plugins folder is synced with S3 via Corn Jobs with all EC2’s keeps syncing the Plugins Directory via this corn job</li> </ul> <ul> <li><strong>Availability zones: &nbsp;</strong>High availability requires at least two availability zones. The idea is that only one zone will go down at a time: the&nbsp;proverbial backhoe cutting power and network cables. Since Amazon isolates the data centers for each availability zone. There fore using multiple availability zone will replicate used aws services also.</li> </ul> <ul> <li><strong>CloudFront:</strong> amazon CloudFront works as a cdn service for media contents. So, after a user request to the dns server, cloud front, before a request is redirected to the application server for our case EC2 machines, the request is first intercepted at an edge location cdn server, the CDN server checks that the response for this request is already cached or not.<br />if not cached then the request is forwarded to the main server and the response from that main server is cached at the edge location and then the user is served from that edge location cached response. If another request is made and a cache is found then the cached is served. An internet gateway is used to manage the requests between our cloud services and CloudFront.</li> </ul> <ul> <li><strong>AWS CloudTrail: </strong>Sometimes we need to monitor or check which types of aws users has taken which types of services what amount of resources for this types of scenarios we use aws cloud trail, as actions taken by a user, role, or an AWS service are recorded as events in CloudTrail.</li> </ul> <ul> <li><strong>AWS</strong> <strong>CloudWatch: </strong>This enables us to monitor our complete stack (applications, infrastructure, and services)&nbsp;and leverage alarms, logs, and events data to take automated actions and reduce Mean Time to Resolution (MTTR). This frees up important resources and allows us to focus on building applications and business value.</li> </ul> <ul> <li><strong>Amazon Simple Notification Service: </strong>Amazon SNS&nbsp;helps us to simplify our application architecture and reduce costs. With message batching, publisher systems can send up to 10 messages in a single API request. With message filtering, subscriber systems receive only the messages that they are interested in.</li> </ul> <p>&nbsp;</p>urn:store:1:blog:post:25https://www.nop-station.com/nopdms-app-real-time-delivery-tracking-systemnopDMS App- Real Time Delivery Tracking System<p dir="ltr"><img src="/images/uploaded/Blog/nopDMS-banner.webp" alt="nopDMS Delivery Management System from nopStation" width="815" height="315" /></p> <p dir="ltr">nopStation presents another miscellaneous app&nbsp;<a href="https://nop-station.com/nopdms">nopDMS</a> (nopCommerce delivery Management system), an easy and smart way for&nbsp;<a href="https://www.nopcommerce.com/">nopCommerce</a> store owners to manage their local delivery operation without having the trouble to invest in numerous logistics dispatch software, courier apps and real-time delivery tracking technology.</p> <p dir="ltr">DMS (Delivery Management System) is an integrated delivery management app which will track and store every detail of your shipping status. Its a combination of an Android app &amp; a NopCommerce plugin, which can easily be integrated with your business.</p> <p dir="ltr">So, now we can focus more onto your business.</p> <p dir="ltr">Just install the plugin and rest of the work will become smoother by nopDMS app.</p> <h2 dir="ltr">Supported versions:</h2> <p dir="ltr">nopDMS app will work with any custom store built with nopCommerce platform. Right now the app supports &nbsp;<strong>nopcommerce 3.9</strong> version.</p> <h3>Features:</h3> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Login &amp; Logout:</li> </ul> <p dir="ltr">User can now easily log in just by entering username and password. No further authentication steps needed. Logout option is also very user friendly, just a matter of clicking for the logout option is there.</p> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Customized Order status:</li> </ul> <p dir="ltr">User can customize the background color of an order for different shipping status. For example, yellow can be used for "returned order", red &nbsp;for "Refused order", gray for "In-transit" order, blue is for "Scanned but not in-transit yet" order etc. By using a car icon on the very right row of an order, user can also change the status "return/refused" to "in transit".&nbsp; &nbsp;</p> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Smart Searching options:</li> </ul> <p dir="ltr">User can search order by order id, phone number or address to see the details of the order. On bonus, user can search an order by scanning barcode.</p> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Feedback option for returned/refused order:</li> </ul> <p dir="ltr">In Order detail page, there are two shipping status buttons</p> <p dir="ltr">1. Make as return and</p> <p dir="ltr">2. Make as refused.</p> <p dir="ltr">A delivery man can change this status. Before dispatching an order, it will take feedback from the customer of the reason for returning/ refusing via a notepad built into the app. The note will save with the shipping status of the product.</p> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Find Way Path Find in Map:</li> </ul> <p dir="ltr">User can find any valid address on the map of DMS app. It will save the time of dispatching an order.</p> <ul> <li dir="ltr" style="font-size: 18px; font-weight: 600;">Digital Signature capture:</li> </ul> <p dir="ltr">User/deliveryman can collect the signature from the customer before closing the order status. Delivery time and signature will be saved on the server side. This digital order verified system will restrict the scope of any miscommunication after receiving the product from clients end.</p> <h3 dir="ltr">Advantages for Businesses</h3> <ol> <li dir="ltr">Faster delivery and time management through the map of the app</li> <li dir="ltr">Proof of delivery via digital signature capture system</li> <li dir="ltr">Time saving dispatching and routing decisions</li> <li dir="ltr">Reduction in customer complaints for full tracked shipping status</li> <li dir="ltr">Raise in average order sizes</li> <li dir="ltr">Increment in repetitive orders</li> </ol> <p>&nbsp;</p>urn:store:1:blog:post:33https://www.nop-station.com/upgrading-plugins-from-nopcommerce-43-to-44Upgrading Plugins from nopCommerce 4.3 to 4.4<p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4.webp" alt="Upgrading nopCommerce plugins from version 4.30 to 4.40" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">1. To start off, the </span><strong>latest update</strong><span style="font-weight: 400;"> of Visual Studio (VS), version 2019, 16.9 needs to be downloaded. Here is a link for convenience:</span><a style="background: white; color: blue; padding: 0;" href="https://visualstudio.microsoft.com/downloads/"> <span style="font-weight: 400;">https://visualstudio.microsoft.com/downloads/</span></a><span style="font-weight: 400;">. If the visual studio is </span><strong>already installed</strong><span style="font-weight: 400;">, then it is needed to open the visual studio installer and </span><strong>update the 2019 version only</strong><span style="font-weight: 400;">.</span></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">2. After that, project files for </span><strong>NopCommerce 4.4 </strong><span style="font-weight: 400;">needs to be downloaded. It can be downloaded from the given link:</span><a style="background: white; color: blue; padding: 0;" href="https://github.com/nopSolutions/nopCommerce/releases/tag/release-4.40.3"> <span style="font-weight: 400;">https://github.com/nopSolutions/nopCommerce/releases/tag/release-4.40.3</span></a></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">3. After the project has been downloaded, the </span><strong>NopCommerce.sln</strong><span style="font-weight: 400;"> file needs to be opened from the </span><strong>src</strong><span style="font-weight: 400;"> folder.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_02.webp" alt="nopCommerce plugin upgrade part 2" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">4. Now the plugins need to be added to the project from the </span><strong>plugin</strong><span style="font-weight: 400;"> folder. The required plugin folder must be inside the same project folder. It is the best practice to add the plugins one by one and debug them for </span><strong>NopCommerce 4.4.</strong></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">5. First of all, the target plugin’s project folder needs to be placed in the “</span><strong>src/Plugins</strong><span style="font-weight: 400;">” directory. Then from the solution explorer of the Visual Studio, the </span><strong>Plugins</strong><span style="font-weight: 400;"> folder needs to be right clicked, an existing project needs to be added and the Plugin moved that has just been moved should be chosen. Here, an in-house plugin of Nop Station named </span><strong>NopStation-Ocarosels</strong><span style="font-weight: 400;"> has been used as an example.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_03.webp" alt="nopCommerce plugin upgrade part 3" /> <img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_04.webp " alt="nopCommerce plugin upgrade part 4" /> <img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_05.webp" alt="nopCommerce plugin upgrade part 5" /> <img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_06.webp" alt="nopCommerce plugin upgrade part 6" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">6. After the Project has been loaded, open the </span><strong>“.csproj”</strong><span style="font-weight: 400;"> file of the project by double clicking on the project. Here the Target Framework must be changed to “</span><strong>net5.0</strong><span style="font-weight: 400;">”. Inside the Plugin folder, there should be a </span><strong>plugin.json</strong><span style="font-weight: 400;"> file. The file should be opened and the Supported Version field must be </span><strong>updated to 4.40</strong><span style="font-weight: 400;">.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_07.webp" alt="nopCommerce plugin upgrade part 7" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_08.webp" alt="nopCommerce plugin upgrade part 8" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_09.webp" alt="nopCommerce plugin upgrade part 9" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_10.webp" alt="nopCommerce plugin upgrade part 10" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">7. After changing the Target Framework and building the plugin, there should be errors in the </span><strong>“.cs”</strong><span style="font-weight: 400;"> files. Each of the </span><strong>“.cs”</strong><span style="font-weight: 400;"> files can be opened and the errors can be fixed one by on. Or another way to list all the errors is to build the Project and let the IDE detect all the error. The errors should be showing up at the output box below, click on each of them and go directly to the file and line containing the errors. A folder for the required plugin should appear in the shown directory after building the plugin.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_11.webp" alt="nopCommerce plugin upgrade part 11" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_12.webp" alt="nopCommerce plugin upgrade part 12" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_13.webp" alt="nopCommerce plugin upgrade part 13" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">8. Most of the errors we will be because of missing methods. Many of the functions existing in </span><strong>NopCommerce 4.3</strong><span style="font-weight: 400;"> do not exist in the core library anymore. It’s because, on its core, the </span><strong>NopCommerce</strong><span style="font-weight: 400;"> Platform uses the </span><strong>Nop.Core, Nop.Services and Nop.Data</strong><span style="font-weight: 400;">. The libraries have been upgraded to use </span><strong>net5.0</strong><span style="font-weight: 400;"> as target framework and as a result, many of the functions that existed before had been changed to </span><strong>asynchronous</strong><span style="font-weight: 400;"> functions. To indicate that the functions are asynchronous, the name of the functions now end with the word “Async.” As the name of the methods have been changed, the definition of the old functions no longer exists in the library. So, in order to develop plugins for NC 4.4, the functions used must be changed. In most cases, adding the word “Async” at the end of the missing functions will be able to detect the new ones.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_14.webp" alt="nopCommerce plugin upgrade part 14" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">9. Now that Asynchronous methods are being used, “</span><strong>System.Threading.Tasks</strong><span style="font-weight: 400;">'' must be imported and from there the </span><strong>Task&lt;&gt;</strong><span style="font-weight: 400;"> class to use with the asynchronous methods should be found. The Asynchronous functions return a </span><strong>Task&lt;T&gt;</strong><span style="font-weight: 400;"> and the methods are waitable. By using the “</span><strong>await</strong><span style="font-weight: 400;">” keyword in front of a method that returns a </span><strong>Task&lt;T&gt;,</strong><span style="font-weight: 400;"> the desired object </span><strong>T</strong><span style="font-weight: 400;"> returned should be found.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_15.webp" alt="nopCommerce plugin upgrade part 15" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">10. The advantages of the </span><strong>Task asynchronous programming model (TAP)</strong><span style="font-weight: 400;"> and when and why to use it can be found here at MS docs:</span><a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/"> <span style="font-weight: 400;">https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/</span></a></li> </ul> <p><span style="font-weight: 400;">This programming method enables us to read the program as a sequence of statements like before, but the compiler executes these codes in a much more complicated manner. Asynchronous tasks are running in a concurrent manner using parallel-processing, so they are utilizing the CPU more efficiently and, in many times, these programs are executed faster than synchronous programs. By using Tasks, we are actually executing multiple instructions parallelly. But it is required to use the result of the Tasks in a synchronous manner and this is where the </span><strong>“await”</strong><span style="font-weight: 400;"> keyword comes in. By using </span><strong>await</strong><span style="font-weight: 400;"> we allow the Task to start without blocking a single thread and then wait for the execution to complete to get the result.&nbsp;</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">12. To use the </span><strong>await</strong><span style="font-weight: 400;"> keyword inside a function or lambda expression, the </span><strong>async</strong><span style="font-weight: 400;"> keyword before the name of the function or the parameter of the lambda expression should be used.</span></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">13. In Plugin’s services folder, existing services of type </span><strong>Task&lt;&gt;</strong><span style="font-weight: 400;"> should be used and debug the code again to fix the methods that use these services.</span></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">14. Some of the old existing </span><strong>Classes</strong><span style="font-weight: 400;"> and </span><strong>Interfaces </strong><span style="font-weight: 400;">no longer exist in the Nop libraries. In that case, look around in the other places to check if the Class or Interface looking for has been moved to other libraries or not. If yes then import the new namespace and remove the old one.</span></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">15. The implementation of the </span><strong>IDependencyRegistrar</strong><span style="font-weight: 400;"> interface has been changed significantly. So, if the plugin has a </span><strong>DependencyRegistrar </strong><span style="font-weight: 400;">inside the </span><strong>Infrastructure</strong><span style="font-weight: 400;"> folder, update the </span><strong>register </strong><span style="font-weight: 400;">function. Here the </span><strong>Autofac </strong><span style="font-weight: 400;">library used before are no longer used, </span><strong>Microsoft.Extensions.DependencyInjection</strong><span style="font-weight: 400;"> for the </span><strong>IServiceCollection</strong><span style="font-weight: 400;"> needs to be imported and remove the Autofac import. Inside the method body of register, the old ones should be changed as follows:</span></li> </ul> <p><strong>services.AddScoped&lt;InterfaceName, ClassName&gt;();</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">16. As the </span><strong>NopCommerce 4.4</strong><span style="font-weight: 400;"> is still new, there aren’t many resources available on the internet on new plugin development methods. So, it is necessary to look into the implementation of the plugins provided by the </span><strong>NopCommerce Team</strong><span style="font-weight: 400;"> which comes with the NopCommerce 4.4 in the Plugins folder. Many of the implementations of those Plugins will guide us on coding the new functions in </span><strong>net5.0</strong><span style="font-weight: 400;">.</span></li> </ul> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">17. Finally, the Plugin should be built and run the Visual Studio Project when there are no errors. After the </span><strong>NopCommerce Platform</strong><span style="font-weight: 400;"> loads, go to the </span><strong>administration</strong><span style="font-weight: 400;"> and enable the </span><strong>required plugin</strong><span style="font-weight: 400;"> and </span><strong>restart</strong><span style="font-weight: 400;"> the application.</span></li> </ul> <p><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_16.webp" alt="nopCommerce plugin upgrade part 16" /><img src="/images/uploaded/Blog/upgrading-plugins-from-nopCommerce-4.3-to-4.4_17.webp" alt="nopCommerce plugin upgrade part 17" /></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">18. After restarting, the site may break and some errors will show up on the browser and indicating the .cshtml files have some errors. Then it is necessary to go to the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file and the errors which are almost always caused by missing functions are needed to be fixed. Changing the functions name to end with </span><strong>Async</strong><span style="font-weight: 400;"> and adding an </span><strong>await</strong><span style="font-weight: 400;"> keyword before the return value will solve this error.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">19. If no further errors exist, the website should load up nicely with our newly added plugin. Now move on to the next plugin and repeat the steps.&nbsp;</span></li> </ul> <p>&nbsp;</p>urn:store:1:blog:post:31https://www.nop-station.com/welcome-to-nopcommerce-theme-developmentWelcome to NopCommerce Theme Development<p><img src="/images/uploaded/Blog/welcome-to-nopCommerce-theme-development.webp" alt="Welcome to nopCommerce Theme development" width="100%" /></p> <p id="starting-paragraph">To get started with your business website right away, choosing the correct theme that suits your business needs should be at the top of your check list. Knowing how to create a theme to suit your version of website needs could be a top-notch approach. And with the help of this simple step by step guide of creating a <strong>NopCommerce</strong> theme from scratch, you will be one step closer into achieving the perfect website that properly represents your business goals.</p> <p>Let the force be with you.</p> <p>Sincerely,</p> <p><strong style="font-style: italic;">NopStation</strong></p> <h3 id="contents-table">Table of contents</h3> <table class="table-hover" style="height: auto;" width="100%"> <tbody> <tr> <td><a href="#get-started"> How to get started with NopCommerce Theme </a></td> </tr> <tr> <td><a href="#set-theme-id"> Setting the theme identity </a></td> </tr> <tr> <td><a href="#designs-file-check"> Getting the design files in check </a></td> </tr> <tr> <td><a href="#to-the-point"> Getting right to the point </a></td> </tr> <tr> <td><a href="#top-header"> The Top Header </a></td> </tr> <tr> <td><a href="#content-mcw"> The content of master-column-wrapper </a></td> </tr> <tr> <td><a href="#homepage-order"> Getting your Homepage in order </a></td> </tr> <tr> <td><a href="#easy-way"> A easier way </a></td> </tr> <tr> <td><a href="#double-trouble"> The double trouble </a></td> </tr> <tr> <td><a href="#everything-order"> Getting everything in order </a></td> </tr> </tbody> </table> <div id="get-started" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="get-started" style="color: #fff; text-align: center; display: block;" href="#"> How to get started with NopCommerce Theme </a></h4> <p>NopCommerce is a fully customizable platform where various themes can be created and NopCommerce even gives customers the option to change the look and feel of the site. A theme can be created for the NopCommerce platform following the below mentioned procedures:</p> <p>&nbsp;</p> </div> <div id="set-theme-id" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="set-theme-id" style="text-align: center; color: #fff; display: block;" href="#"> Setting the theme identity </a></h4> <p>First, to create a new theme, create a new folder with the name of the theme at src &gt; Presentation &gt; Nop.Web &gt; Themes folder. There should already be a ‘DefaultClean’ folder in the specified directory and the contents of that folder can just be copied to the newly created folder to have the basic files needed for a theme. Remember! DefaultClean should never be modified as that is the basis. The necessary changes should be made in the newly created theme.</p> <p>After copying over the contents of DefaultClean to the new theme folder, there should be a ‘theme. json’ file with the following contents:</p> <p style="text-align: center;"><img src="/images/uploaded/Blog/setting-the-theme-identity.webp" alt="Setting theme identity" /></p> <p>‘DeafaultClean’ needs to be replaced with the new theme name and then build the project and run it.</p> <p>After setting up the NopCommerce website, go to the admin panel’s Configuration &gt; Settings &gt; General Settings section and the newly created theme can be seen in the default store theme section. Set the theme to the newly created theme and then save the settings.</p> <p>Now go to the public store and start inspecting the HTML and CSS elements of each of the pages and sections that would be modified.</p> <p>&nbsp;</p> </div> <div id="design-files-check" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="designs-file-check" style="color: #fff; text-align: center; display: block;" href="#">Getting the design files in check</a></h4> <p><span style="font-weight: 400;">To modify the </span><strong>CSS,</strong><span style="font-weight: 400;"> changes needed to be made in the </span><strong>‘styles.css’ </strong><span style="font-weight: 400;">file located inside the </span><strong>Content &gt; css </strong><span style="font-weight: 400;">directory inside the </span><strong>new theme</strong><span style="font-weight: 400;"> folder.</span></p> <p><span style="font-weight: 400;">If the </span><strong>HTML</strong><span style="font-weight: 400;"> needs to be modified, copy over the corresponding </span><strong>.cshtml</strong><span style="font-weight: 400;"> file from the </span><strong>src &gt; Presentation &gt; Nop.Web &gt; Views </strong><span style="font-weight: 400;">folder into the </span><strong>new theme</strong><span style="font-weight: 400;"> folder and maintain the same folder structure of that </span><strong>.cshtml</strong><span style="font-weight: 400;"> file. For example, if the </span><strong>‘list.cshtml’</strong><span style="font-weight: 400;"> file needs to be copied from the </span><strong>Blog</strong><span style="font-weight: 400;"> folder, a </span><strong>Blog</strong><span style="font-weight: 400;"> folder inside the </span><strong>new themes</strong><span style="font-weight: 400;"> ‘</span><strong>Views’</strong><span style="font-weight: 400;"> directory must be created first and then paste the </span><strong>‘list.cshtml’</strong><span style="font-weight: 400;"> file inside it.</span></p> <p><span style="font-weight: 400;">Third-party </span><strong>CSS</strong><span style="font-weight: 400;"> and </span><strong>JS</strong><span style="font-weight: 400;"> libraries such as </span><strong><em>Bootstrap</em></strong><span style="font-weight: 400;">, </span><strong><em>FontAwesome</em></strong><span style="font-weight: 400;"> etc. can also be used in the </span><strong>new theme</strong><span style="font-weight: 400;">. To add third-party libraries:</span></p> <ol> <li><span style="font-weight: 400;"> First download the </span><strong>CSS</strong><span style="font-weight: 400;"> or </span><strong>JS</strong><span style="font-weight: 400;"> libraries and place the folders or files inside the theme’s </span><strong>Content</strong><span style="font-weight: 400;"> folder.</span></li> <li><span style="font-weight: 400;"> In order to add a new </span><strong>CSS</strong><span style="font-weight: 400;"> file into the </span><strong>new theme</strong><span style="font-weight: 400;">, go to the </span><strong>‘Head.cshtml‘ </strong><span style="font-weight: 400;">file located in the </span><strong>Views &gt; Shared</strong><span style="font-weight: 400;"> folder and include the </span><strong>new theme’s CSS</strong><span style="font-weight: 400;"> file with the </span><strong>Html.AppendCssFileParts()</strong><span style="font-weight: 400;"> function. For example, </span><strong><em>Bootstrap</em></strong><span style="font-weight: 400;"> and </span><strong><em>FontAwesome</em></strong> <strong>CSS</strong><span style="font-weight: 400;"> can be included through the following way:</span> <p style="text-align: center;"><img src="/images/uploaded/Blog/getting-the-design-files-in-check.webp" alt="Adding BootStrap and FontAwesome" width="692" height="316" /></p> <p style="text-align: center;"><strong>Figure: Adding Bootstrap and FontAwesome to the Theme</strong></p> </li> <li><span style="font-weight: 400;"> In order to add a new </span><strong>js</strong><span style="font-weight: 400;"> file into the new theme, we have to go to the </span><strong>‘_Root.Head.cshtml‘</strong><span style="font-weight: 400;"> file located in the </span><strong>Views &gt; Shared</strong><span style="font-weight: 400;"> folder and include the necessary </span><strong>js</strong><span style="font-weight: 400;"> file with the </span><strong>Html.AppendScriptParts()</strong><span style="font-weight: 400;"> function. For example, </span><strong><em>Bootstrap</em></strong><strong> js</strong><span style="font-weight: 400;"> can be included in the following way:</span></li> </ol> <p style="text-align: center;"><img src="/images/uploaded/Blog/bootstrap-js-can-be-included.webp" alt="Adding JS files to the theme" width="100%" /></p> <p style="text-align: center;"><strong>Figure: Adding JS file to the Theme</strong></p> <p><span style="font-weight: 400;">Following the exact same process of adding third-party </span><strong>CSS</strong><span style="font-weight: 400;"> and </span><strong>JS</strong><span style="font-weight: 400;">, custom </span><strong>CSS</strong><span style="font-weight: 400;"> or </span><strong>JS </strong><span style="font-weight: 400;">files can be created and include them in the </span><strong>new theme</strong><span style="font-weight: 400;">.&nbsp;</span></p> <p><span style="font-weight: 400;">After including </span><strong>JS</strong><span style="font-weight: 400;"> or </span><strong>CSS</strong><span style="font-weight: 400;"> files, </span><strong>run </strong><span style="font-weight: 400;">the project and inspect the website. Check the console for errors first, if there are none the console should just show the following line: </span><strong>JQMIGRATE: Migrate is installed.</strong></p> <p><span style="font-weight: 400;">Check the elements section of the website to check if they are loaded correctly or not. The </span><strong>CSS</strong><span style="font-weight: 400;"> files can be found inside the </span><strong>&lt;head&gt;</strong><span style="font-weight: 400;"> tag and </span><strong>js</strong><span style="font-weight: 400;"> files should be found at the very end of the </span><strong>&lt;body&gt;</strong><span style="font-weight: 400;"> tag. Here’s the example files added before:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/adding-JS-file-to-the-theme.webp" alt="Adding JS files part 1" width="702" height="246" /></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/adding-JS-file-to-the-theme-part2.webp" alt="Adding JS Files part 2" width="693" height="252" /></p> <p><span style="font-weight: 400;">&nbsp;</span></p> </div> <div id="to-the-point" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="to-the-point" style="color: #fff; text-align: center; display: block;" href="#">Getting right to the point</a></h4> <p><span style="font-weight: 400;">Now in order to start making changes to the theme, inspect the sections that need to be changed first. For example, if </span><strong>the Footer</strong><span style="font-weight: 400;"> needs to be changed, inspect the page to find the </span><strong>HTML</strong><span style="font-weight: 400;"> and </span><strong>CSS </strong><span style="font-weight: 400;">elements for </span><strong>the Footer</strong><span style="font-weight: 400;">. The </span><strong>CSS</strong><span style="font-weight: 400;"> for </span><strong>the footer</strong><span style="font-weight: 400;"> with line number will show up at the right of the inspection tool. In this case, if </span><strong>the footer</strong><span style="font-weight: 400;"> is inspected, it shows that the </span><strong>CSS</strong><span style="font-weight: 400;"> of the footer is located in the stylesheet named ‘</span><strong>styles.css</strong><span style="font-weight: 400;">’ at line number 1168. Open up the </span><strong>‘styles.css’</strong><span style="font-weight: 400;"> located inside the </span><strong>Content &gt; css </strong><span style="font-weight: 400;">directory inside </span><strong>the new theme</strong><span style="font-weight: 400;"> folder and make the necessary changes.</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/CSS-for-footer.webp" alt="CSS based web footer" width="638" height="168" /></p> <p style="text-align: center;"><strong>Figure: CSS for Footer</strong></p> <p><span style="font-weight: 400;">The contents inside the &lt;body&gt; tag of the </span><strong>nopCommerce website</strong><span style="font-weight: 400;"> loads up from the </span><strong>“_Root.cshtml”</strong><span style="font-weight: 400;"> file located inside the </span><strong>Views &gt; Shared </strong><span style="font-weight: 400;">folder. Following is the partial structure of the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/partial-structure-of-root.webp" alt="Partial structure of root" width="693" height="321" /></p> <p style="text-align: center;"><strong>Figure: Partial structure of the _root.cshtml file</strong></p> <p><span style="font-weight: 400;">This </span><strong>.cshtml</strong><span style="font-weight: 400;"> file invokes the </span><strong>AdminHeaderLinks</strong><span style="font-weight: 400;">, </span><strong>_Header</strong><span style="font-weight: 400;">, </span><strong>TopMenu</strong><span style="font-weight: 400;">, </span><strong>Footer</strong><span style="font-weight: 400;"> and </span><strong>some other widgets</strong><span style="font-weight: 400;">. Also, inside the </span><strong>master-column-wrapper</strong><span style="font-weight: 400;"> div, the body of the page is </span><strong>rendered</strong><span style="font-weight: 400;">. The contents inside the </span><strong>master-column-wrapper</strong><span style="font-weight: 400;"> changes as we go to different pages of the site but </span><strong>all the pages</strong><span style="font-weight: 400;"> of the website share the </span><strong>headers</strong><span style="font-weight: 400;">, the </span><strong>top menu</strong><span style="font-weight: 400;"> and the </span><strong>footer</strong><span style="font-weight: 400;">. Any page on the website can be divided into </span><strong>three primary groups</strong><span style="font-weight: 400;">:</span></p> <p><span style="font-weight: 400;">(i) </span><strong>The Top Header</strong><span style="font-weight: 400;"> which includes the </span><strong>AdminHeaderLinks</strong><span style="font-weight: 400;">, </span><strong>_Header</strong><span style="font-weight: 400;"> and </span><strong>TopMenu</strong></p> <p><span style="font-weight: 400;">(ii) The content of the </span><strong>current page</strong><span style="font-weight: 400;"> rendered inside the </span><strong>master-column-wrapper</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">(iii)&nbsp; </span><strong>The footer</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">&nbsp;</span></p> </div> <div id="top-header" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="top-header" style="color: #fff; text-align: center; display: block;" href="#">The Top Header</a></h4> <p style="text-align: center;"><img src="/images/uploaded/Blog/top-header-of-cleantheme.webp" alt="Top header of the DefaultClean theme" width="658" height="170" /></p> <p style="text-align: center;"><strong>Figure: Top Header of the nopCommerce DefaultClean Theme</strong></p> <p><span style="font-weight: 400;">In the above figure, the </span><strong>Black </strong><span style="font-weight: 400;">area is the </span><strong>AdminHeaderLinks</strong><span style="font-weight: 400;"> sections, the </span><strong>Red</strong><span style="font-weight: 400;"> area is the </span><strong>_Header section</strong><span style="font-weight: 400;"> and the </span><strong>purple </strong><span style="font-weight: 400;">area is the </span><strong>TopMenu</strong><span style="font-weight: 400;"> section.</span></p> <p><span style="font-weight: 400;">All the </span><strong>.cshtml</strong><span style="font-weight: 400;"> files for the </span><strong>AdminHeaderLinks</strong><span style="font-weight: 400;">, </span><strong>_Header</strong><span style="font-weight: 400;"> and </span><strong>TopMenu</strong><span style="font-weight: 400;"> and the </span><strong>.cshtml</strong><span style="font-weight: 400;"> files invoked by these files are located inside the </span><strong>Views &gt; Shared</strong><span style="font-weight: 400;"> folder.</span></p> <p><strong>AdminHeaderLinks:</strong> <span style="font-weight: 400;">To modify the </span><strong>AdminHeaderLinks.cshtml</strong><span style="font-weight: 400;">, copying over the </span><strong>Default.cs</strong><span style="font-weight: 400;">html file inside the </span><strong>Views &gt; Shared &gt; Components &gt; AdminHeaderLinks</strong><span style="font-weight: 400;"> folder maintaining the folder structure should be enough as it does not invoke any other </span><strong>.cshtml</strong><span style="font-weight: 400;"> files.</span></p> <p><strong>_Header:</strong><span style="font-weight: 400;"> The </span><strong>_Header.cshtml</strong><span style="font-weight: 400;"> file contains the contents of the </span><strong>red </strong><span style="font-weight: 400;">area from the above figure. This area is also divided into </span><strong>two sections</strong><span style="font-weight: 400;">: </span><strong>header-upper</strong><span style="font-weight: 400;"> (</span><strong>yellow</strong><span style="font-weight: 400;"> area) and </span><strong>header-lower</strong><span style="font-weight: 400;"> (</span><strong>orange</strong><span style="font-weight: 400;"> area). The </span><strong>upper part</strong><span style="font-weight: 400;"> Invokes the </span><strong>TaxTypeSelector</strong><span style="font-weight: 400;">, </span><strong>CurrencySelector</strong><span style="font-weight: 400;"> and </span><strong>LanguageSelector</strong><span style="font-weight: 400;"> as well as The </span><strong>HeaderLinks </strong><span style="font-weight: 400;">(includes the </span><strong>Login</strong><span style="font-weight: 400;">, </span><strong>Logout</strong><span style="font-weight: 400;">, </span><strong>Registration/My Account</strong><span style="font-weight: 400;">, </span><strong>Inbox</strong><span style="font-weight: 400;">, </span><strong>Wishlist</strong><span style="font-weight: 400;"> and </span><strong>Shopping Cart</strong><span style="font-weight: 400;">) and </span><strong>FlyoutShoppingCart</strong><span style="font-weight: 400;">. The </span><strong>lower</strong><span style="font-weight: 400;"> Part invokes the </span><strong>Logo</strong><span style="font-weight: 400;"> and the </span><strong>SearchBox</strong><span style="font-weight: 400;">. All these </span><strong>.cshtml</strong><span style="font-weight: 400;"> files are located inside the </span><strong>Views &gt; Shared &gt; Components</strong><span style="font-weight: 400;"> folder and if changes are necessary to any of these components, copy over the contents to </span><strong>the new theme</strong><span style="font-weight: 400;"> folder </span><strong>maintaining the folder structure</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">If </span><strong>modifying</strong><span style="font-weight: 400;"> the position or the order of the</span><strong> selectors</strong><span style="font-weight: 400;"> or the </span><strong>header links</strong><span style="font-weight: 400;"> is necessary, changes needed to be made in the </span><strong>_Header.cshtml</strong><span style="font-weight: 400;"> file. If changes are required in the order of the </span><strong>HeaderLinks</strong><span style="font-weight: 400;">, modify the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file of the </span><strong>HeaderLinks</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">Suppose,</span><strong> My account</strong><span style="font-weight: 400;"> needs to be </span><strong>modified</strong><span style="font-weight: 400;"> and make it show the </span><strong>currently logged</strong><span style="font-weight: 400;"> in </span><strong>user name</strong><span style="font-weight: 400;">.</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/right-side-bar.webp" alt="Right side bar" width="618" height="81" /></p> <p style="text-align: center;"><strong>Figure: Right Side Menu Bar&nbsp;</strong></p> <p><span style="font-weight: 400;">In order to achieve this, go to the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file for this. As this is a part of the </span><strong>HeaderLinks</strong><span style="font-weight: 400;"> which is being invoked from the _</span><strong>Header.cshtml</strong><span style="font-weight: 400;"> file, navigate to the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file of the </span><strong>HeaderLinks</strong><span style="font-weight: 400;"> located inside the </span><strong>Views &gt; Shared &gt; Contents &gt; HeaderLinks</strong><span style="font-weight: 400;"> folder.</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/headerlinks-folder.webp" alt="Headlinks footer" width="693" height="113" /></p> <p><span style="font-weight: 400;">Here, comment out the </span><strong>“@T(“Account.MyAccount”)”</strong><span style="font-weight: 400;"> and uncomment the </span><strong>@Model.CustomerName</strong></p> <p><span style="font-weight: 400;">The results are as follows:</span></p> <p><span style="font-weight: 400;">Following the above procedure, any </span><strong>.cshtml</strong><span style="font-weight: 400;"> file can be tracked down and make changes to it according to </span><strong>the new theme</strong><span style="font-weight: 400;"> design.</span></p> <p><strong>TopMenu:</strong><span style="font-weight: 400;"> To modify the </span><strong>TopMenu</strong><span style="font-weight: 400;">, the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file located inside the </span><strong>Views &gt; Shared &gt; Components &gt; TopMenu</strong><span style="font-weight: 400;"> folder needs to be copied inside the </span><strong>theme</strong><span style="font-weight: 400;"> folder.</span></p> <p><span style="font-weight: 400;">The </span><strong>TopMenu </strong><span style="font-weight: 400;">can be modified to </span><strong>add</strong><span style="font-weight: 400;"> or</span><strong> remove </strong><span style="font-weight: 400;">categories or show something different such as manufacturers or any other links for the customers to navigate the website from any pages in a breeze.</span></p> <p>&nbsp;</p> </div> <div id="content-mcw" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="content-mcw" style="color: #fff; text-align: center; display: block;" href="#">The content of master-column-wrapper</a></h4> <p><span style="font-weight: 400;">The contents of each page are rendered inside the </span><strong>master-column-wrapper</strong><span style="font-weight: 400;"> of </span><strong>_root.cshtml</strong><span style="font-weight: 400;">. For the</span><strong> homepage</strong><span style="font-weight: 400;">, the </span><strong>Index.cshtml</strong><span style="font-weight: 400;"> file loads the content here. The </span><strong>DefaultClean</strong><span style="font-weight: 400;"> theme uses a </span><strong>single column layout</strong><span style="font-weight: 400;"> by using the </span><strong>‘_ColumnsOne.cshtml’ </strong><span style="font-weight: 400;">as it’s layout:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/column-one-layout.webp" alt="Column one layout" width="702" height="334" /></p> <p><span style="font-weight: 400;">Now let’s suppose the </span><strong>home page</strong><span style="font-weight: 400;"> needs to be a </span><strong>double column page</strong><span style="font-weight: 400;"> like the rest of the </span><strong>double column pages</strong><span style="font-weight: 400;">. In that case, just change the Layout to </span><strong>‘_ColumnsTwo’</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">The </span><strong>_ColumnsTwo</strong><span style="font-weight: 400;"> layout has the </span><strong>side-2</strong><span style="font-weight: 400;"> div which includes </span><strong>all</strong><span style="font-weight: 400;"> the blocks on the </span><strong>side navigation panel</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">Look at code for the </span><strong>_ColumnsTwo.cshtml</strong><span style="font-weight: 400;">, all the components that are being invoked for the side panel can be found here:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/ide-navigation-panel.webp" alt="IDE navigation" width="668" height="170" /></p> <p style="text-align: center;"><strong>Figure: Side Nav of a Theme</strong></p> <p><span style="font-weight: 400;">If any changes are necessary to any of the blocks of the </span><strong>side nav</strong><span style="font-weight: 400;">, it can be done so by going to the </span><strong>.cshtml </strong><span style="font-weight: 400;">file being invoked from here.</span></p> <p><span style="font-weight: 400;">Suppose the following design is to be followed and add a caret to the left of the category names:</span></p> <p><span style="font-weight: 400;">The </span><strong>.cshtml</strong><span style="font-weight: 400;"> file responsible for this block is the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> located inside </span><strong>Views &gt; Shared &gt; Components &gt; CategoryNavigation</strong><span style="font-weight: 400;">; so, we need to go to that file included a </span><strong><em>FontAwesome </em></strong><strong>icon</strong><span style="font-weight: 400;"> to achieve this:</span></p> <p><span style="font-weight: 400;">On the </span><strong>_ColumnsTwo</strong><span style="font-weight: 400;"> layout, the </span><strong>side nav</strong><span style="font-weight: 400;"> is loaded inside the </span><strong>side-2</strong><span style="font-weight: 400;"> div and the contents of the page are loaded inside the </span><strong>center-2</strong><span style="font-weight: 400;"> div. Now using the </span><strong>center-2</strong><span style="font-weight: 400;"> div for the </span><strong>homepage</strong><span style="font-weight: 400;"> will result in the </span><strong>Nivo Slider</strong><span style="font-weight: 400;"> being loaded on the right like the image on the left, it is needed for the slider to take up full width like the image on the </span><strong>right</strong><span style="font-weight: 400;">.</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/two-columns.webp" alt="Two columns view" width="704" height="246" /></p> <p><span style="font-weight: 400;">To achieve this, take this following line out of the </span><strong>Index.cshtml</strong><span style="font-weight: 400;"> file of the </span><strong>Home</strong><span style="font-weight: 400;"> and put it before the </span><strong>side-2</strong><span style="font-weight: 400;"> and </span><strong>center-2</strong><span style="font-weight: 400;"> divs inside the </span><strong>_ColumnsTwo.cshtml</strong><span style="font-weight: 400;"> file.</span></p> <p><strong>But wait a minute!&nbsp;</strong></p> <p><span style="font-weight: 400;">Won’t it start loading the Slider on every other page that uses the </span><strong>_ColumnsTwo</strong><span style="font-weight: 400;"> layout instead of just the </span><strong>home page</strong><span style="font-weight: 400;">? Yes, guessed it right. To solve this issue, create a separate </span><strong>_ColumnsTwo.cshtml</strong><span style="font-weight: 400;"> file for the home page and let’s call it </span><strong>_ColumnsTwoHome.cshtml</strong><span style="font-weight: 400;"> file. The newly created file must be located in the same folder which is the </span><strong>Views &gt; Shared</strong><span style="font-weight: 400;"> folder. The </span><strong>_ColumnsTwoHome.cshtml</strong><span style="font-weight: 400;"> file will have the </span><strong>Nivo Slider</strong><span style="font-weight: 400;"> widget but the </span><strong>_ColumnsTwo.cshtml</strong><span style="font-weight: 400;"> file will not. Finally, set the layout in the </span><strong>Index.cshtml</strong><span style="font-weight: 400;"> file to the newly created layout.</span></p> <p><span style="font-weight: 400;">This way the </span><strong>Nivo Slider</strong><span style="font-weight: 400;"> shows up only on the </span><strong>home page</strong><span style="font-weight: 400;"> and the rest of the pages remain as they were.</span></p> <p><span style="font-weight: 400;">The </span><strong>home page</strong><span style="font-weight: 400;"> shows the following components:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/category-names.webp" alt="Category names" width="631" height="228" /></p> <p style="text-align: center;"><strong>Figure: HomepageCategories, HomepageProducts, HomepageNews, homepagePolls of Home Page in DefaultClean Theme</strong></p> <p>&nbsp;</p> </div> <div id="homepage-order" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="homepage-order" style="color: #fff; text-align: center; display: block;" href="#">Getting your Homepage in order</a></h4> <p><span style="font-weight: 400;">In the picture </span><strong>below</strong><span style="font-weight: 400;">, the </span><strong>Red</strong><span style="font-weight: 400;"> section is the </span><strong>TopicBlock</strong><span style="font-weight: 400;">, the </span><strong>Orange</strong><span style="font-weight: 400;"> section is the </span><strong>HomepageCategories</strong><span style="font-weight: 400;">, the </span><strong>Yellow</strong><span style="font-weight: 400;"> section is the </span><strong>HomepageProducts</strong><span style="font-weight: 400;">, </span><strong>Blue</strong><span style="font-weight: 400;"> section is </span><strong>HomepageNews</strong><span style="font-weight: 400;"> and </span><strong>Purple</strong><span style="font-weight: 400;"> section is </span><strong>homepagePolls</strong><span style="font-weight: 400;">. All the corresponding </span><strong>.cshtml</strong><span style="font-weight: 400;"> files are located inside </span><strong>Views &gt; Shared &gt; Components</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">Now let’s say we want to change the </span><strong>HomepageProducts</strong><span style="font-weight: 400;"> and include a slider. Let’s use </span><strong><em>Slick-Slider</em></strong><span style="font-weight: 400;"> for this purpose. So, changes needed to be made in the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file to include the </span><strong><em>Slick-Slider</em></strong><span style="font-weight: 400;">. Now say we want to make further changes and change the look of the </span><strong>product box</strong><span style="font-weight: 400;">. Inside the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file for </span><strong>HomepageProducts</strong><span style="font-weight: 400;">, we will see that it invokes the </span><strong>_ProductBox</strong><span style="font-weight: 400;">. The </span><strong>_ProductBox.cshtml</strong><span style="font-weight: 400;"> file is located inside </span><strong>Views &gt; Shared</strong><span style="font-weight: 400;"> and by modifying this file, we can include or remove contents from the </span><strong>_ProductBox</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">Following a similar process, we can make changes to the other components of the </span><strong>Homepage</strong><span style="font-weight: 400;">.</span></p> <p><span style="font-weight: 400;">The other pages can also be modified by modifying the </span><strong>.cshtml</strong><span style="font-weight: 400;"> files that are invoked in the pages that need to be modified.</span></p> <p>&nbsp;</p> </div> <div id="footer-right" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="docs-internal-guid-87120552-7fff-01a6-89ee-a04f999ae00c" style="color: #fff; text-align: center; display: block;" href="#">Getting your Footer just right</a></h4> <p><span style="font-weight: 400;">It is also included in all the pages of the site, which have two sections, </span><strong>footer-upper </strong><span style="font-weight: 400;">(</span><strong>blue</strong><span style="font-weight: 400;"> area) and </span><strong>footer-lower</strong><span style="font-weight: 400;"> (</span><strong>brown </strong><span style="font-weight: 400;">area):</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/getting-your-footer-just-right.webp" alt="Getting footer right" width="633" height="182" /></p> <p><span style="font-weight: 400;">The </span><strong>upper section</strong><span style="font-weight: 400;"> has </span><strong>four</strong><span style="font-weight: 400;"> blocks, the last block Invokes </span><strong>two</strong><span style="font-weight: 400;"> other </span><strong>.cshtml</strong><span style="font-weight: 400;"> files, </span><strong>SocialButtons</strong><span style="font-weight: 400;"> and </span><strong>NewletterBox</strong><span style="font-weight: 400;">. Inside the</span><strong> lower </strong><span style="font-weight: 400;">section, the </span><strong>theme</strong><span style="font-weight: 400;"> selector is invoked.</span></p> <p><span style="font-weight: 400;">Other than making visual changes to the </span><strong>CSS</strong><span style="font-weight: 400;"> of the footer, we can modify the contents of the</span><strong> footer</strong><span style="font-weight: 400;"> by copying over the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file from </span><strong>Views &gt; Shared &gt; Components &gt; Footer</strong><span style="font-weight: 400;"> and make necessary changes to it.</span></p> <p><span style="font-weight: 400;">Suppose we need to move the </span><strong>NewsletterBox</strong><span style="font-weight: 400;"> at top of the </span><strong>footer</strong><span style="font-weight: 400;">:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/newsletter-box.webp" alt="Newsletter box" width="644" height="70" /></p> <p style="text-align: center;"><strong>Figure: Changed footer in the homepage of a different theme</strong></p> <p><span style="font-weight: 400;">In that case we need to make changes inside the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file of the </span><strong>Footer</strong><span style="font-weight: 400;">. Now to match the above example, it is needed to modify the </span><strong>subscribe</strong><span style="font-weight: 400;"> button and have to include the </span><strong>icon</strong><span style="font-weight: 400;"> for the </span><strong>button</strong><span style="font-weight: 400;"> inside the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file. It is done so in the following example:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/modifying-icons.webp" alt="Modifying icons" width="630" height="193" /></p> <p><span style="font-weight: 400;">Similarly, any items can be </span><strong>reordered</strong><span style="font-weight: 400;">,</span><strong> added </strong><span style="font-weight: 400;">or </span><strong>removed</strong><span style="font-weight: 400;"> in the </span><strong>footer</strong><span style="font-weight: 400;"> inside the </span><strong>Default.cshtml</strong><span style="font-weight: 400;"> file of the </span><strong>footer </strong><span style="font-weight: 400;">and if we need to modify the </span><strong>SocialButtons</strong><span style="font-weight: 400;">, we can do it following the same procedure we followed for the </span><strong>NewsletterBox</strong><span style="font-weight: 400;">.</span></p> <p>&nbsp;</p> </div> <div id="easy-way" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="easy-way" style="color: #fff; text-align: center; display: block;" href="#">An easier way</a></h4> <p><span style="font-weight: 400;">In order to make changes to the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file, there’s another way. For example, for the </span><strong>footer</strong><span style="font-weight: 400;">, first find out which </span><strong>.cshtml</strong><span style="font-weight: 400;"> file contains the code for </span><strong>the footer</strong><span style="font-weight: 400;">. To do that, inspect the elements first. Let’s say changes needed to be made to the </span><strong>footer-upper div</strong><span style="font-weight: 400;">:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/an-easier-way.webp" alt="Easier way" width="627" height="212" /></p> <p><span style="font-weight: 400;">To do that first find out which </span><strong>.cshtml</strong><span style="font-weight: 400;"> file contains this div. Go to Visual Studio and press ctrl + shift + F to bring up the Find and Replace.&nbsp;</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/find-and-replace.webp" alt="Find &amp; replace" width="634" height="545" /></p> <p><span style="font-weight: 400;">Here look in the ‘Entire solution’, leave File types as it is, and type in </span><strong>‘footer-upper’</strong><span style="font-weight: 400;"> keyword in the search bar and then click on Find All.</span></p> <p><span style="font-weight: 400;">There might be more than one match but keep eyes out for a </span><strong>.cshtml</strong><span style="font-weight: 400;"> file. The following file is a </span><strong>.cshtml</strong><span style="font-weight: 400;"> file that has the div that was searched for.</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/searched.webp" alt="Searching" width="642" height="121" /></p> <p><span style="font-weight: 400;">So, open up the file and match the </span><strong>CSS</strong><span style="font-weight: 400;"> with the inspect element section. If they are the same, this is the required </span><strong>.cshtml</strong><span style="font-weight: 400;"> file.&nbsp;</span></p> <p><span style="font-weight: 400;">After changes are made to </span><strong>HTML</strong><span style="font-weight: 400;"> or </span><strong>CSS</strong><span style="font-weight: 400;"> files, they might not show up immediately even if the website is reloaded. That’s because the browser is </span><strong>caching</strong><span style="font-weight: 400;"> the website and keeping the </span><strong>old files</strong><span style="font-weight: 400;"> for </span><strong>fast reload</strong><span style="font-weight: 400;">. Always </span><strong>clear the cache of browser</strong><span style="font-weight: 400;"> after making changes to </span><strong>HTML</strong><span style="font-weight: 400;"> or </span><strong>CSS</strong><span style="font-weight: 400;"> and before reloading the webpage. This way the changes made will show up in the browser.</span></p> <p>&nbsp;</p> </div> <div id="double-trouble" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="double-trouble" style="color: #fff; text-align: center; display: block;" href="#">The double trouble</a></h4> <p><span style="font-weight: 400;">Now what if it is needed to create two different </span><strong>double column layouts</strong><span style="font-weight: 400;">? For example, in this theme, the product page has the breadcrumbs outside the </span><strong>‘center-2’</strong><span style="font-weight: 400;"> div:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/double-trouble.webp" alt="Double trouble" width="656" height="211" /></p> <p><span style="font-weight: 400;">But in the category page, the breadcrumb is inside the </span><strong>‘center-2’</strong><span style="font-weight: 400;"> div:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/center.webp" alt="Center" width="659" height="272" /></p> <p><span style="font-weight: 400;">In scenarios like this, it might be required to have two different </span><strong>‘_ColumnsTwo’</strong><span style="font-weight: 400;"> layouts. In that case, create a </span><strong>copy</strong><span style="font-weight: 400;"> of the </span><strong>‘_ColumnsTwo.cshtml’</strong><span style="font-weight: 400;"> file and rename it as per choice. In one of the </span><strong>‘_ColumnsTwo.cshtml’ </strong><span style="font-weight: 400;">files, the breadcrumb can be left outside, but in the other </span><strong>‘_ColumnsTwo.cshtml’</strong><span style="font-weight: 400;"> file, bring the breadcrumb code inside the ‘</span><strong>center-2’</strong><span style="font-weight: 400;"> div.&nbsp;</span></p> <p><span style="font-weight: 400;">Then change the </span><strong>Layout </strong><span style="font-weight: 400;">from inside of those pages and set the </span><strong>newly created layout file</strong><span style="font-weight: 400;"> to load.&nbsp;</span></p> <p><span style="font-weight: 400;">If any </span><strong>jQuery</strong><span style="font-weight: 400;"> or </span><strong>Javascript</strong><span style="font-weight: 400;"> needs to be included, it can be done by adding them inside the </span><strong>.cshtml</strong><span style="font-weight: 400;"> file containing the </span><strong>HTML</strong><span style="font-weight: 400;"> tag on which is going to be applied for the script. But if the script applies to multiple pages or all pages, the script tag can just be added at the end of the </span><strong>Footer’s</strong> <strong>‘Default.cshtml’</strong><span style="font-weight: 400;"> file with </span><strong>asp-location</strong><strong>="</strong><strong>Footer</strong><strong>"</strong><strong>.</strong><span style="font-weight: 400;"> For example, the </span><strong>NopCommerce</strong><span style="font-weight: 400;"> default clean theme has collapsible side nav items in the mobile view. For that, the </span><strong>script</strong><span style="font-weight: 400;"> is defined at the end of </span><strong>the Footer’s</strong> <strong>‘Default.cshtml’</strong><span style="font-weight: 400;"> file as:</span></p> <p style="text-align: center;"><img src="/images/uploaded/Blog/footer.webp" alt="Footer" width="640" height="274" /></p> </div> <div id="everything-order" style="padding-top: 70px; margin-top: -70px;"> <h4 style="padding: 5px 0; background: #0098e3;"><a id="everything-order" style="color: #fff; text-align: center; display: block;" href="#">Getting everything in order</a></h4> <p><span style="font-weight: 400;">After going through your codes and assessing its effects on the website, don’t be afraid to experiment and try out new things. </span><strong><em>NopCommerce</em></strong><span style="font-weight: 400;"> provides an open ended platform that promotes experimentation and new ideas.</span></p> <p><span style="font-weight: 400;">We hope with this brief tutorial, you are now clear on the basics of how to create a theme. But if you are not, please feel free to contact us through our support. And hopefully, with the right words and the right codes, we will be able to help with the theme that truly translates your thoughts into a solid website suitable for your business needs.</span></p> </div>urn:store:1:blog:post:30https://www.nop-station.com/e-commerce-business-scenario-in-bangladesh-from-2006-to-2018E-commerce Business Scenario in Bangladesh from 2006 to 2018<p><img src="/images/uploaded/Blog/eCommerce-business-scenarios-in-bangladesh.webp" alt="eCommerce business scenarios in Bangladesh" width="1300" height="768" /></p> <p>E-commerce business is booming in Bangladesh recently. With better access, inclusion and a consistently developing web population, the prospect for e-Commerce is splendidly growing for the last couple of years.</p> <p>Presently utilization of technology in every single part has been exceptionally common. In this time of globalization, we can barely discover any part working without utilizing technology. A new horizon has been opened up for business, to be specific electronic commerce (E-commerce) by none other than one and only internet. E-commerce business involves the utilization of the Internet in the marketing, identification, payment, and delivery of product and services all are finished by e-commerce utilizing the web. In Bangladesh a population of 165 million with 33% mobile internet user, the E-commerce market is by all means considerably potential in up and coming days. Close by, e-commerce is being largely aligned to the Mobile Financial Service (MFS) as it’s mode of payment, which complements each other and demonstrates incredible guarantee to develop.</p> <h3 class="elementor-heading-title elementor-size-default">Current E-commerce Industry Scenario in Bangladesh</h3> <p>The buyers and sellers both have much power nowadays as a result of the massive utilization of ground-breaking technologies just as the internet. A large portion of the business at present is working under the e-commerce criteria over digital networks. The web connects the general population with companies. The E-commerce market in Bangladesh, made a quantum jump in 2017; developing at an incredible 70% from 2016. In 2017, the B2C E-commerce business market measure adds up to&nbsp;USD 110-115 million (around BDT 900 crore)&nbsp;against the 133,571 crores total retail market. On the contrary, the measure of the Indian mega e-commerce business market remains at USD 17 billion. As indicated by the specialists, Bangladesh E-commerce business is at a phase where the Indian market was most likely 5-7 years prior. The extent of the E-commerce business market crossed the&nbsp;Tk 17.0 billion-stamp in 2017 from Tk&nbsp;4.0 billion&nbsp;in 2016, as indicated by the information accessible with the e-Commerce Association of Bangladesh (e-CAB). The market measure is relied upon to reach Tk 70 billion (Tk 7,000 crore) by 2021.</p> <p>E-commerce business in the Asia-Pacific overall is blasting with&nbsp;71 percent&nbsp;of APAC buyers making an online buy. Bangladesh is a noteworthy player in this region. Starting in 2016, a sum of&nbsp;$50&nbsp;million was invested in this sector. Of the total,&nbsp;$10 million&nbsp;came as Foreign Direct Investment. Be that as it may, the sum would be a lot higher as Chinese e-commerce giant Alibaba had recently acquired leading online marketplace Daraz. The Retail E-commerce is developing at&nbsp;72 percent&nbsp;a month in Bangladesh. Currently,&nbsp;35,000 individuals&nbsp;and&nbsp;25,000 little and medium enterprises (SMEs)&nbsp;are included with this division. The quantities of e-commerce business sites and E-commerce pages are&nbsp;2,500 and 150,000&nbsp;respectively. The quantity of delivery is assessed at&nbsp;15,000 to 20,000&nbsp;at the retail level every day.</p> <p><img class="attachment-large size-large" src="/images/uploaded/Blog/eCommerce-platforms-in-bangladesh.webp" alt="eCommerce platforms in Bangladesh" width="542" height="474" /></p> <p style="text-align: center;">E-commerce platforms of Bangladesh</p> <p>Of them, the market share of&nbsp;<a href="https://www.daraz.com.bd/" target="_blank" rel="noopener">Daraz</a>&nbsp;is estimated to be&nbsp;40 percent.</p> <h3 class="elementor-heading-title elementor-size-default">Government Playing a Vital Role to Encourage E-commerce Business</h3> <p>International Finance Corporation, the private division loaning and investment arm of the World Bank, has been following Bangladesh’s entrepreneurial ecosystem the past few years. In its shortlisted 43 new companies which they are effectively observing, Chaldal tops the rundown as a potential investee organization which happens to be an E-commerce platform. Not only foreign investors but our government also playing a vital role to boom the e-commerce sector of Bangladesh. To support the home-developed investors, the government rolled out the long-awaited National Digital Commerce Policy. The new policy does not enable outside foreign investors to hold a stake of over&nbsp;49%&nbsp;in any E-commerce business in Bangladesh. This approach was taken to protect and boost the local investors. The policy also mandated that the e-commerce entities clearly highlight the details of the products they sell online, which include the product’s quality along with its return policy- in a bid to prevent fraudulence and protect customer rights.E-commerce companies will have to also sign deals with the products’ suppliers, delivery channels and payment gateways to ensure that customers’ rights are protected properly- an attempt to make the supply chain transparent. The draft of the e-commerce policy is now ready. It will be sent to the cabinet for its final approval.</p> <h3 class="elementor-heading-title elementor-size-default">Bangladesh leading Towards a Bright Future in E-commerce Sector</h3> <p>As indicated by market analysts, Bangladesh’s E-commerce business market will flood to&nbsp;USD 20 billion by 2020, by when, as per Goldman Sachs, India’s online retail market is expected to reach&nbsp;USD 69 billion. Worldwide financial investors who are heading to India are starting to make a stopover at Bangladesh. The business potentials in Bangladesh prompted Delhi-based digital marketing company MoMagic Technologies to start e-commerce platform&nbsp;<a href="https://www.pickaboo.com/" target="_blank" rel="noopener">Pickaboo</a>, which is timing month to month income of&nbsp;USD 600,000. Big investors like IFC and Alibaba has just got engaged with the Bangladesh E-commerce environment and a lot more big investors like them are probably going to put resources into this e-commerce space understanding its potential.</p> <p>E-commerce business has changed numerous conventional habits of the transaction and got a progressive change to the economy. Bangladeshi people are currently upgrading their way of life utilizing the internet. Suppliers can now get the orders from consumers from the internet and also can save much of their time by doing online trade.&nbsp;A significant number of commercial activities of large corporations as well as supermarkets are using the website to receive orders from consumers and sending particular goods to them. Last few years statistics says that this sector has good growth rate. In order to make it sustainable both government and entrepreneurs need to be more conscious and take proper steps.&nbsp;<a href="https://www.brainstation-23.com/business-intelligence-for-e-commerce/" target="_blank" rel="noopener">Usage of business intelligence is also helping the E-commerce businesses</a>&nbsp;to dive deep in to the needs to customers.&nbsp; If E-commerce companies can ensure security and provide the best service to their customer the industry will grow immensely fast.</p> <p>Originally Published on&nbsp;<a href="https://www.brainstation-23.com/e-commerce-business-scenario-in-bangladesh-2006-to-2018/">Brain Station 23</a></p>urn:store:1:blog:post:29https://www.nop-station.com/throwback-2018-for-nopstationThrowback 2018 for nopStation<p dir="ltr"><img src="/images/uploaded/Blog/2018-year-in-review-nopStation.webp" alt="nopStation's year in review" width="815" height="315" /></p> <p dir="ltr">With 2018 quickly fading in the rearview mirror as we drive ahead into 2019, this makes a great time to take a look at some of the big achievements of nopStation in 2018, from serving local and global clients around the world to building the nopCommerce community of Bangladesh that propelled nopStation forward. 2018 was a banner year for nopStation in many ways, and it’s expectant that 2019 will continue the pace without slowing.</p> <p>&nbsp;</p> <p dir="ltr"><strong>nopStation's team-</strong></p> <p dir="ltr">1. Has grown bigger with new faces added to the team</p> <p dir="ltr">2. Served a good number of local and global clients</p> <p dir="ltr">3. Joined hand with renowned brands of Bangladesh</p> <p dir="ltr">4. Added a good number of nopCommerce products</p> <p dir="ltr">5. Launched new website</p> <p dir="ltr">6. Became number one Gold solution partner</p> <p dir="ltr">7. Powered up with 16 new Certified developers &nbsp;</p> <p dir="ltr">8. Become the silver sponsor of nopCommerce Day 2018</p> <p dir="ltr">9. Continued recreational activities throughout the year to celebrate each small or big achievement</p> <p dir="ltr" style="margin-bottom: 20px;">10. Arranged the first nopCommerce developers &nbsp;meetup in bangladesh at the presence of Andrei, the founder of nopCommerce</p> <h3 dir="ltr">1. Has grown bigger with new faces added to the team</h3> <p><img src="/images/uploaded/Blog/1-team-growth.webp" alt="nopStation's team growth" width="1200" height="630" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation has not only got bigger by its size over the year but also manage to employ the best quality developers. Our experienced nopCommerce developers repeatedly adding value to our organization with their dedication &amp; passion.</p> <h3 dir="ltr">2. &nbsp;Served a good number of local and global client</h3> <p><img src="/images/uploaded/Blog/2-served-customers.webp" alt="Served new customers" width="1200" height="630" /></p> <p dir="ltr" style="margin-bottom: 20px;">Originated from Bangladesh, nopStation has spread its wings over the globe. Already has served clients from USA, Canada, Australia, Germany, Turkey, Iran etc. And particularly in Bangladesh, can proudly say that nopStation come&nbsp;<a href="http://www.brainstation-23.com/">Brain Station 23</a> is the number one nopCommerce solution provider right now. The client list crossed 150+ recently and we are humbled to gain such trust among ecommerce business owners. &nbsp;</p> <h3 dir="ltr">3. Joined hand with renowned brands of Bangladesh</h3> <p><img src="/images/uploaded/Blog/3-renowned-brands.webp" alt="Worked with renowned brands" width="1200" height="630" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation has become one of the decisive e-commerce providers that many renowned brands of Bangladesh have trusted throughout the course and we are truly happy to serve them.&nbsp;<a href="https://ecstasybd.com/">Ecstasy</a> is one of the most famous clothing brands of Bangladesh and nopStation provided them a full-fledged e-commerce site with cloud hosting for a more faster and customer friendly website. Another name to add the glory is <a href="https://www.othoba.com/">Othoba.com</a>. nopStation built their e-commerce website along with a responsive mobile app and cloud hosting. Have done BI integration for&nbsp;<a href="https://priyoshop.com/">Priyoshop</a> and did many upgradation for them. Apex, Sailor, Pran-RFL are also some significant names of 2018's served brands.</p> <h3 dir="ltr">4. Added a good number of nopCommerce products</h3> <p><img src="/images/uploaded/Blog/4-new-products.webp" alt="Developed new products" width="1200" height="628" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation is always one step ahead to make this platform all in one and to help the community, thus, we are continuously adding new products to the bucket. 2018 was the year to name so many good products to help nopCommerce platform users. Bkash advance, Shipstation, Algoria search are few names and rest of them you can find from here.</p> <h3 dir="ltr">5. Launched new website</h3> <p><img src="/images/uploaded/Blog/5-launched-new-websites.webp" alt="Launched new websites" width="1000" height="600" /></p> <p dir="ltr" style="margin-bottom: 20px;">This year we launched a brand new website of nopStation. The new UI also has a good hook than the previous one. To make it customer friendly and super responsive, a live chat option to the website has been installed. nopStation not only just response to their potential customers but also reply to the queries of any nopCommerce related problem. Their MVP's and nopCommerce Certified Developers always up to help besides their regular tasks.</p> <h3 dir="ltr">6. Became number one Gold solution partner</h3> <p><img src="/images/uploaded/Blog/6-celebration.webp" alt="Team celebrations" width="900" height="540" /></p> <p dir="ltr" style="margin-bottom: 20px;">One of nopStations biggest achievement this year, which they can proudly name was- become the number one gold solution partner of the nopCommerce community for a pretty good pause of time. Unfortunately, they no longer behold that place but they are looking forward to achieving the honor again.</p> <h3 dir="ltr">7. Powered up with 16 new Certified developers</h3> <p><img src="/images/uploaded/Blog/7-nop-certified.webp" alt="nopCommerce certified developers" width="1200" height="628" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation team had 16 new Certified nopCommerce Developers this year!!! This was really amazing that the team has become more experienced to serve the best in the coming days.</p> <h3 dir="ltr">8. Become the silver sponsor of nopCommerce Day 2018</h3> <p><img src="/images/uploaded/Blog/8-nopCommerce-silver-sponsor.webp" alt="nopCommerce silver partner" width="1000" height="600" /></p> <p dir="ltr" style="margin-bottom: 20px;">This year, the 4th nopCommerce Days 2018 had taken place in Shining Las Vegas at Hard Rock Hotel &amp; Casino, 8-9 of November and nopStation was one of the silver sponsors of that memorable event. To celebrate this event, nopStation announced an 18% discount on every nopCommerce product on our website.</p> <h3 dir="ltr">9. Continued recreational activities throughout the year to celebrate each small or big achievement</h3> <p><img src="/images/uploaded/Blog/9-recreation.webp" alt="Recreational activities" width="1000" height="563" /></p> <p dir="ltr" style="margin-bottom: 20px;">nopStation not only care for their customer but also its valuable employees cause they believe that, without them, nopStation is nothing. nopStation has a cool team of developers and other responsible co-workers and they make the workplace charming with varieties of amusements like- picnic, birthday celebrations, pizza party's project success celebrations etc. This warms up the monotonous work routine with the new spirit for good work as a great team.</p> <h3 dir="ltr">10. Arranged the first nopCommerce developers &nbsp;meetup in bangladesh at the presence of Andrei, the founder of nopCommerce</h3> <p><img src="/images/uploaded/Blog/10-meetup.webp" alt="nopCommerce meet-up" width="2016" height="1512" /></p> <p dir="ltr"><a href="https://www.nop-station.com/nopcommerce-developers-meetup-dhaka-2018-2">The most happening incident of nopStation</a>&nbsp;history just happened on 10th December of this year. nopStation formed a wing of the&nbsp;<a href="https://www.facebook.com/groups/497371190759383/">nopCommerce community</a> for Bangladeshi nopCommerce developers and users and arranged their first meetup at the presence of nopCommerce CEO and Founder Andrei Mazulnitsyn. It's a big dignity for nopStation to have him among them. They also create a facebook group to stay connected to the nopCommerce community of Bangladesh which they hope to share this platform related knowledge among the people.</p> <p dir="ltr">So here are few flashbacks of nopStations remarkable events from 2018. We can say that 2018 was really a big year for nopStation and we're looking forward to &nbsp;2019 with even more big news and services on the horizon. Here are some of the areas that nopStaion want to concur in 2019</p> <p>1. Be the number one nopCommerce development company in Asia.</p> <p>2. Serve more global clients with more hand on experience.</p> <p>3. Make the Bangladeshi nopCommerce Community more strong and united.</p> <p>4. Hope to add more MVPs from the nopStation team to make it more robust.</p> <p dir="ltr">nopStation cordially thank you for supporting them and they want you to be with them in the upcoming days. Stay tuned and Happy new year!!</p>urn:store:1:blog:post:28https://www.nop-station.com/nopcommerce-developers-meetup-dhaka-2018-2nopCommerce Developers Meetup Dhaka 2018<p><img src="/images/uploaded/Blog/nopCommerce-developers-meetup-dhaka.webp" alt="nopCommerce developer meetup in Dhaka 2018" width="815" height="315" /></p> <p><a href="https://nop-station.com/">nopStation</a>, the eCommerce entity of&nbsp;<a href="http://www.brainstation-23.com/">Brain Station 23</a>&nbsp;organized the very first meetup for the nopCommerce developers of Bangladesh which recently took place in Dhaka on 10th December 2018. The event was very special not only because it was the first of its kind but the event was glorified by the presence of the&nbsp;<a href="https://www.nopcommerce.com/">nopCommerce</a>&nbsp;platform founder and CEO &nbsp;Andrei Mazulnitsyn.</p> <p>nopCommerce is one of the most powerful and popular E-commerce platforms in the .net platform to serve all kind of E-Commerce services. Founded by Andrei Mazulnitsyn in &nbsp;2008, now the platform has served over&nbsp;<strong>17000+ clients&nbsp;</strong>worldwide with<strong>&nbsp;50000+ websites</strong>,&nbsp;has&nbsp;<strong>130+ solution partners,10 hosting partners&nbsp;</strong>and more than<strong>&nbsp;20 technology partners&nbsp;</strong>in<strong>&nbsp;40+ countries.</strong></p> <p>Andrei Mazulnitsyn was invited to Dhaka by Brain Station 23, a top Bangladeshi software development company and Gold partner of nopCommerce. He was invited to attend the first ever nopCommerce developers meetup of Bangladesh and inaugurate the event for the nopCommerce community of Bangladesh. The event took place at the Head office of Brain Station 23. More than 50 nopCommerce developers and nopCommere MVP’s from different organizations were invited to attend the meetup and share their experiences with Andrei.</p> <p>&nbsp;</p> <p>To know more about this meet up, <a href="http://www.brainstation-23.com/nopcommerce-developers-meetup-dhaka-2018/">click here</a>.&nbsp;</p>urn:store:1:blog:post:26https://www.nop-station.com/develop-and-understand-widget-plugin-in-nopcommerce-410-with-real-time-communicationDevelop And Understand  Widget plugin in nopCommerce 4.10 with Real-time Communication<h4 dir="ltr"><img src="/images/uploaded/Blog/widget-plugin-tutorial-in-nopCommerce.webp" alt="Widget plugin tuorial in nopCommerce by nopStation" width="815" height="315" /></h4> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">In this tutorial, our experienced nopCommerce developer <strong>Abu Sina</strong> has inscribed the nopcommerce widget plugin on the 4.10 version along with the concept of SignalR.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Widget plugin is a special kind of nopcommerce plugin which provides some feature(s) to one or many widget zones.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">The plugin that we are going to develop is very simple. But it will cover more or less most of the feature that a real-life plugin should have, like -Services, DomainClass, ModelClass, Component, View, DI, database access (creating simple table), general CRUD operation, adding menu to the admin panel from the plugin, showing specific output to the desire public widget zone etc.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Let's consider a situation where a shop-owner needs to broadcast an announcement to all the customer who is currently present at the shop. The shop-owner wants it dynamic having complete control over this announcement. So we think it will be good to make a widget plugin which will take announcement related data and broadcast this data to the public site and for real-time communication, we decided to go with SignalR.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">So let’s jump into the code for creating this widget plugin.</span></p> <p dir="ltr" style="text-align: left;"><span style="font-family: georgia, palatino; font-size: 12pt;">First, we have to create a class library with the name <span style="font-family: tahoma, arial, helvetica, sans-serif;">“Nop.Plugin.Widget.LiveAnnouncement”</span> under Plugins folder. It is good to follow the conventional system &nbsp;like <span style="font-family: tahoma, arial, helvetica, sans-serif;">Nop.Plugin.TypeOfPlugin.YourDesireNameOfPlugin.</span></span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Now we have to change the name Class1 to <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementPlugin</span>. One of the major task to make any type of plugin of nopcommerce is to inherit “BasePlugin” abstract base class. Because it contains methods and property which are common for all plugins. It has only one property which contains the low-level information of a plugin. All methods and property of this base class are virtual so anyone can override any of them or all.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Let’s override Install and Uninstall methods. Here, we want to override these two methods because we need to create a table at the install time of this plugin and some resource-string and other related work like <span style="font-family: tahoma, arial, helvetica, sans-serif;">MarkPluginAsInstalled</span>. To make the plugin as installed, we need to call the base class install method. Also at uninstall time we want to delete the table and the resource-string and <span style="font-family: tahoma, arial, helvetica, sans-serif;">MarkPluginAsUninstalled</span>. </span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">To add menu item at the admin panel we need to implement <span style="font-family: tahoma, arial, helvetica, sans-serif;">IAdminMenuPlugin</span> interface. As we are going to develop a Widget plugin so we need to implement the widget plugin interface. How the Widget will work, will be described later. All Widgetzone name is listed at the infrastructure of <span style="font-family: tahoma, arial, helvetica, sans-serif;">Nop.Web.Framework.</span></span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">The LiveAnnouncementPlugin class</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Microsoft.AspNetCore.Routing;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Core.Plugins;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Data;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Services.Cms;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Services.Configuration;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Services.Localization;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Web.Framework.Menu;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using System;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using System.Collections.Generic;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using System.Linq;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">using Nop.Web.Framework.Infrastructure;</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">public class LiveAnnouncementPlugin : BasePlugin, IWidgetPlugin,IAdminMenuPlugin</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Fields</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;private readonly LiveAnnouncementObjectContext _context;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;private readonly ILocalizationService _localizationService;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;private readonly ISettingService _settingContext;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Ctr</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public LiveAnnouncementPlugin(LiveAnnouncementObjectContext context, ILocalizationService localizationService, ISettingService settingContext)</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_context = context;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_localizationService = localizationService;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_settingContext = settingContext;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Install / Uninstall</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public override void Install()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_localizationService.AddOrUpdatePluginLocaleResource("Misc.Announcement", "Announcement Create");</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_localizationService.AddOrUpdatePluginLocaleResource("Misc.AnnouncementList", "Announcement List");</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_context.InstallSchema();</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Install();</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// Uninstall plugin</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public override void Uninstall()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//settings</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//data</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_context.Uninstall();</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_localizationService.DeletePluginLocaleResource("Misc.Announcement");</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_localizationService.DeletePluginLocaleResource("Misc.AnnouncementList");</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Uninstall();</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void ManageSiteMap(SiteMapNode rootNode)</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var liveAnnouncementPluginNode = rootNode.ChildNodes.FirstOrDefault(x =&gt; x.SystemName == "LiveAnnouncement");</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (liveAnnouncementPluginNode == null)</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;liveAnnouncementPluginNode = new SiteMapNode()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SystemName = "Live Announcement",</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Title = "Live Announcement",</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visible = true,</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IconClass = "fa-gear"</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootNode.ChildNodes.Add(liveAnnouncementPluginNode);</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;liveAnnouncementPluginNode.ChildNodes.Add(new SiteMapNode()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Title = &nbsp;_localizationService.GetResource("Misc.Announcement"),</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visible = true,</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IconClass = "fa-dot-circle-o",</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Url = "~/Admin/LiveAnnouncement/Announcement"</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;liveAnnouncementPluginNode.ChildNodes.Add(new SiteMapNode()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Title = _localizationService.GetResource("Misc.AnnouncementList"),</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visible = true,</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IconClass = "fa-dot-circle-o",</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Url = "~/Admin/LiveAnnouncement/AnnouncementList"</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IList&lt;string&gt; GetWidgetZones()</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new List&lt;string&gt;</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PublicWidgetZones.HeaderAfter</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;public string GetWidgetViewComponentName(string widgetZone)</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &nbsp;"LiveAnnouncementView";</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">}</span></span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco;"><span style="font-size: 12pt;">}</span></span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Note: <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span> is not created yet. But after finishing the domain class and map class we will create and then <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span>. For now, keep it as it is. You can add reference of other but it will over-write after changing the .csproj file later of the tutorial.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">To keep announcement related data, we need to create a table first. To do that we need to add a domain class. Let’s add a class named <span style="font-family: tahoma, arial, helvetica, sans-serif;">Announcement under Domain folder</span>. Now, we need to inherit BaseEntity abstract base class. Because nopcommerce use fluent API for configuring entity and generic repository pattern for database operation and the nopcommerce team added the constraint in the type which will be passed to the <span style="font-family: tahoma, arial, helvetica, sans-serif;">IRepository</span> interface must be inherited from the <span style="font-family: tahoma, arial, helvetica, sans-serif;">BaseEntity</span> abstract base class. There are many generic and extension method which also has the same constraint. Another reason is, this base class has a property which will be the primary key of the table when we will create a map class for configuring our entity.</span></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">The Domain class</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">using System;</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">using Nop.Core;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">namespace Nop.Plugin.Widget.LiveAnnouncement.Domain</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">{</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">public class Announcement : BaseEntity</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">{</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">&nbsp;&nbsp;&nbsp;public string Name { get; set; }</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">&nbsp;&nbsp;&nbsp;public string Body { get; set; }</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">&nbsp;&nbsp;&nbsp;public bool IsActive { get; set; }</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">&nbsp;&nbsp;&nbsp;public DateTime CreateDate { get; set; }</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">}</span></code></p> <p dir="ltr"><code><span style="font-size: 12pt; font-family: terminal, monaco;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Now we need to create an Announcement map class under the Data folder to configure the domain class with basic information. We are inheriting the <span style="font-family: tahoma, arial, helvetica, sans-serif;">NopEntityTypeConfiguration</span> class because the configuration is generalizing in this class. You can implement <span style="font-family: tahoma, arial, helvetica, sans-serif;">IEntityTypeConfiguration</span> at your plugin directly if you want.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The mapping class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.EntityFrameworkCore;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.EntityFrameworkCore.Metadata.Builders;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Data.Mapping;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Domain;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Data</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class AnnouncementMap : NopEntityTypeConfiguration&lt;Announcement&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public override void Configure(EntityTypeBuilder&lt;Announcement&gt; builder)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.ToTable("Announcement");</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.HasKey(x =&gt; x.Id);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Property(x =&gt; x.Name);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Property(x =&gt; x.Body).IsRequired();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Property(x =&gt; x.IsActive);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.Property(x =&gt; x.CreateDate);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">At this class(<span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span>) we need to pass our option to the base class constructor. We implement the<span style="font-family: tahoma, arial, helvetica, sans-serif;"> IDbContext interface</span> because we need to pass the create table sql script through the <span style="font-family: tahoma, arial, helvetica, sans-serif;">ExecuteSqlScript</span> extension method whenever the <span style="font-family: tahoma, arial, helvetica, sans-serif;">InstallSchema</span> method invoke. To drop the plugin table we need to call the Uninstall method. There is a extension method DropPluginTable which generate the drop dbscript. So the basic setup for database related work for the plugin is done.</span></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The LiveAnnouncementObjectContext class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.EntityFrameworkCore;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Data.Extensions;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Collections.Generic;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Data.Common;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Linq;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Data</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public partial class LiveAnnouncementObjectContext : DbContext, IDbContext</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Ctr</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public LiveAnnouncementObjectContext(DbContextOptions&lt;LiveAnnouncementObjectContext&gt; options)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: base(options)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Entity</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public virtual new DbSet&lt;TEntity&gt; Set&lt;TEntity&gt;() where TEntity : BaseEntity</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return base.Set&lt;TEntity&gt;();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Utility</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;protected override void OnModelCreating(ModelBuilder modelBuilder)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modelBuilder.ApplyConfiguration(new AnnouncementMap());</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.OnModelCreating(modelBuilder);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void InstallSchema()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.ExecuteSqlScript(this.GenerateCreateScript());</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// Uninstall</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Uninstall()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//drop the table</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.DropPluginTable("Announcement");</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public string GenerateCreateScript()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Database.GenerateCreateScript();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IQueryable&lt;TQuery&gt; QueryFromSql&lt;TQuery&gt;(string sql) where TQuery : class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.Query&lt;TQuery&gt;().FromSql(sql);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IQueryable&lt;TEntity&gt; EntityFromSql&lt;TEntity&gt;(string sql, params object[] parameters) where TEntity : BaseEntity</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.Set&lt;TEntity&gt;().FromSql(CreateSqlWithParameters(sql, parameters), parameters);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;protected string CreateSqlWithParameters(string sql, params object[] parameters)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//add parameters to sql</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt;= (parameters?.Length ?? 0) - 1; i++)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!(parameters[i] is DbParameter parameter))</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql = $"{sql}{(i &gt; 0 ? "," : string.Empty)} @{parameter.ParameterName}";</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//whether parameter is output</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Output)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql = $"{sql} output";</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return sql;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public virtual void Detach&lt;TEntity&gt;(TEntity entity) where TEntity : BaseEntity</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (entity == null)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentNullException(nameof(entity));</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var entityEntry = this.Entry(entity);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (entityEntry == null)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set the entity is not being tracked by the context</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entityEntry.State = EntityState.Detached;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public int ExecuteSqlCommand(RawSqlString sql, bool doNotEnsureTransaction = false, int? timeout = null, params object[] parameters)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using (var transaction = this.Database.BeginTransaction())</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var result = this.Database.ExecuteSqlCommand(sql, parameters);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.Commit();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Now <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span> will be available from the <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementPlugin</span> class. Let's call the <span style="font-family: tahoma, arial, helvetica, sans-serif;">InstallSchema</span> of the <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span> class from the <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementPlugin</span> Install method. To do that, we will need to register the dependence of the <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementObjectContext</span> class. We will take <span style="font-family: tahoma, arial, helvetica, sans-serif;">DependencyRegister</span> class in the Infrastructure folder. Where we will implement the <span style="font-family: tahoma, arial, helvetica, sans-serif;">IDependencyRegistrar</span> interface.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">If you go to the <span style="font-family: tahoma, arial, helvetica, sans-serif;">LibrariesèNop.CoreèInfrastructureè&nbsp;</span> <span style="font-family: tahoma, arial, helvetica, sans-serif;">NopEngine.cs</span> class, will see that there is a method <span style="font-family: tahoma, arial, helvetica, sans-serif;">RegisterDependencies</span> which is called at the startup time. So at the very beginning, the compiler knows the dependencies of this interface. To register PluginDataContext we will need to call the RegisterPluginDataContext extension method with context name.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">So, the setup is done for the plugin to install. Before that, we need to add the plugin.json file and also need to change the .csprj according to the nopcommerce core team suggestion. In plugin.json file, we need to add some property according to the <span style="font-family: tahoma, arial, helvetica, sans-serif;">PluginDescriptor</span> class or you can copy this file from other plugin and edit it likes bellow.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">The json file look like bellow.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"Group": "Widgets",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"FriendlyName": "LiveAnnouncement",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"SystemName": "LiveAnnouncement",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"Version": "1.0",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"SupportedVersions": ["4.10"],</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"Author": "Sina",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"DisplayOrder": 1,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"FileName": "Nop.Plugin.Widget.LiveAnnouncement.dll",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;"Description": "This plugin allows admins to broadcust any update"</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Do not forget to make the plugin.json file copylocal true.</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">And the project file needs to be like bellow. Please take the bellow section and past it to the .csproj at edit mode.</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;Project Sdk="Microsoft.NET.Sdk"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;PropertyGroup&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;TargetFramework&gt;netcoreapp2.1&lt;/TargetFramework&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/PropertyGroup&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;OutputPath&gt;..\..\Presentation\Nop.Web\Plugins\Widget.LiveAnnouncement&lt;/OutputPath&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;OutDir&gt;$(OutputPath)&lt;/OutDir&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/PropertyGroup&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;OutputPath&gt;..\..\Presentation\Nop.Web\Plugins\Widget.LiveAnnouncement&lt;/OutputPath&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;OutDir&gt;$(OutputPath)&lt;/OutDir&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/PropertyGroup&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;ItemGroup&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;ProjectReference Include="..\..\Presentation\Nop.Web.Framework\Nop.Web.Framework.csproj" /&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;ProjectReference Include="..\..\Presentation\Nop.Web\Nop.Web.csproj" /&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/ItemGroup&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;ItemGroup&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;None Update="plugin.json"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;CopyToOutputDirectory&gt;Always&lt;/CopyToOutputDirectory&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/None&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/ItemGroup&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;!-- This target execute after "Build" target --&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;Target Name="NopTarget" AfterTargets="Build"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;!-- Delete unnecessary libraries from plugins path --&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;MSBuild Projects="$(MSBuildProjectDirectory)\..\..\Build\ClearPluginAssemblies.proj" Properties="PluginPath=$(MSBuildProjectDirectory)\$(OutDir)" Targets="NopClear" /&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&lt;/Target&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/Project&gt;</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Now let’s try to understand why I implement the <span style="font-family: tahoma, arial, helvetica, sans-serif;">IWidgetPlugin interface.</span> <span style="font-family: tahoma, arial, helvetica, sans-serif;">IWidgetPlugin</span> is fully substitute of IPlugin with two extra methods. It is a good example of interface segregation. These two methods have important role for the widgetplugin. Whenever a widget viewcomponent invoke at the public site/ admin site, the solution checks whether any plugin wants to use this zone by <span style="font-family: tahoma, arial, helvetica, sans-serif;">GetWidgetZones</span> method if so then <span style="font-family: tahoma, arial, helvetica, sans-serif;">GetWidgetViewComponentName</span> method call for rendering that plugin’s viewcomponent.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Create a <span style="font-family: tahoma, arial, helvetica, sans-serif;">LiveAnnouncementView</span> <span style="font-family: tahoma, arial, helvetica, sans-serif;">viewcomponent</span> at plugin under Components folder and related <span style="font-family: tahoma, arial, helvetica, sans-serif;">view(LiveAnnouncement.cshtml</span>) under<span style="font-family: tahoma, arial, helvetica, sans-serif;"> Viewsè LiveAnnouncementView</span> folder.</span></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The LiveAnnouncementView</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.Mvc;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Components;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Collections.Generic;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Linq;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Text;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Threading.Tasks;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Components</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;[ViewComponent(Name = "LiveAnnouncementView")]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class AnnouncementViewComponent: NopViewComponent</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IViewComponentResult Invoke(string widgetZone, object additionalData)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">return View("~/Plugins/Widget.LiveAnnouncement/Views/LiveAnnouncementView/LiveAnnouncement.cshtml");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The view of the LiveAnnouncement ViewComponent</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Core;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Core.Domain.Seo;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Core.Infrastructure;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Web.Framework;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Web.Framework.UI;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Services.Configuration;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@{</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">ISettingService _settingContext = EngineContext.Current.Resolve&lt;ISettingService&gt;();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">IStoreContext _storeContext = EngineContext.Current.Resolve&lt;IStoreContext&gt;();</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Html.AddScriptParts("~/Plugins/Widget.LiveAnnouncement/Scripts/signalr.js");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Html.AddScriptParts("~/Plugins/Widget.LiveAnnouncement/Scripts/LiveAnnouncement.js");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;Html.AddCssFileParts("~/Plugins/Widget.LiveAnnouncement/Content/toastr.min.css");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Html.AddScriptParts("~/Plugins/Widget.LiveAnnouncement/Scripts/toastr.js");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="announcementPage"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/div&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">All related js and css will be added later of the tutorial.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">The WidgetPlugin development is done. We need to add two user-interface from where admin can broadcast their notification. It is a general <strong>CRUD</strong> operation. We need to write service for plugin. To do that, we will take an interface<span style="font-family: tahoma, arial, helvetica, sans-serif;"> IAnnouncementService</span> and class <span style="font-family: tahoma, arial, helvetica, sans-serif;">AnnouncementService</span> under Services folder. The <span style="font-family: tahoma, arial, helvetica, sans-serif;">AnnouncementService</span> will implement the <span style="font-family: tahoma, arial, helvetica, sans-serif;">IAnnouncementService</span> interface. We will use this service from controller and inject it at the controller constructor. To do this, we need to register the dependency of the interface. The service has the dependency on the repository so we need to register the repository with domain class with contextname. Let’s create <span style="font-family: tahoma, arial, helvetica, sans-serif;">DependencyRegister</span> class under Infrastructure.</span></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The DependencyRegister class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Autofac;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Autofac.Core;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Configuration;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Infrastructure;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Infrastructure.DependencyManagement;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Domain;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Services;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Infrastructure.Extensions;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Infrastructure</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public partial class DependencyRegister : IDependencyRegistrar</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Field</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;private const string ContextName = "nop_object_context_live_announcement";</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Register</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.RegisterType&lt;AnnouncementService&gt;().As&lt;IAnnouncementService&gt;().InstancePerLifetimeScope();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.RegisterPluginDataContext&lt;LiveAnnouncementObjectContext&gt;(ContextName);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.RegisterType&lt;EfRepository&lt;Announcement&gt;&gt;().As&lt;IRepository&lt;Announcement&gt;&gt;().WithParameter(ResolvedParameter.ForNamed&lt;IDbContext&gt;(ContextName)).InstancePerLifetimeScope();</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region DB</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public int Order</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get { return 0; }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">The service interface and class are bellow.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Domain;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Collections.Generic;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Services</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public interface IAnnouncementService</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;void Delete(Announcement AnnouncementDomain);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;void Insert(Announcement item);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;bool Update(Announcement AnnouncementDomain);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;IPagedList&lt;Announcement&gt; GetAnnouncementDomain(int pageIndex = 0, int pageSize = int.MaxValue);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;Announcement GetAnnouncementDesignFirst();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;Announcement GetAnnouncementById(int Id);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">And concrete class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Linq;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Domain.Catalog;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Domain;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Collections.Generic;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Services.Events;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Services</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class AnnouncementService : IAnnouncementService</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Field</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;private readonly IRepository&lt;Announcement&gt; _announcementRepository;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Ctr</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public AnnouncementService(IRepository&lt;Announcement&gt; announcementRepository)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementRepository = announcementRepository;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Methods</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Delete(Announcement AnnouncementDomain)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementRepository.Delete(AnnouncementDomain);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public bool Update(Announcement AnnouncementDomain)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (AnnouncementDomain == null)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentNullException("customer");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementRepository.Update(AnnouncementDomain);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Insert(Announcement item)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementRepository.Insert(item);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IPagedList&lt;Announcement&gt; GetAnnouncementDomain(int pageIndex = 0, int pageSize = int.MaxValue)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var query = from c in _announcementRepository.Table</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select c;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query = query.OrderBy(b =&gt; b.IsActive);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var liveAnnouncementDomain = new PagedList&lt;Announcement&gt;(query, pageIndex, pageSize);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return liveAnnouncementDomain;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public Announcement GetAnnouncementDesignFirst()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var query = from c in _announcementRepository.Table</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where c.IsActive==true</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderby c.CreateDate descending</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select c;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var LatestAnnouncement = query.ToList().FirstOrDefault();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return LatestAnnouncement;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public Announcement GetAnnouncementById(int Id)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _announcementRepository.GetById(Id);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Now we need to add a controller for CRUD operation of the announcement under the Controllers folder and related views at <span style="font-family: tahoma, arial, helvetica, sans-serif;">Viewsè LiveAnnouncementView</span>. But before that, we need to create a model and integrate the signalR core at our plugin because a notification will show whenever admin creates an announcement and the announcement will show at the real time. To do that I need to create <span style="font-family: tahoma, arial, helvetica, sans-serif;">AnnouncementHub</span> which will inherit Hub abstract class of <span style="font-family: tahoma, arial, helvetica, sans-serif;">Microsoft.AspNetCore.SignalR</span>. We will take <span style="font-family: tahoma, arial, helvetica, sans-serif;">AnnouncementHub</span> class at the root of the plugin project. But before that, We need to take ViewModel class under Models folder.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The AnnouncementModel viewmodel class.</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Models;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Mvc.ModelBinding;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Models</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public partial class AnnouncementModel : BaseNopEntityModel</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;[NopResourceDisplayName("Name")]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public string Name { get; set; }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;[NopResourceDisplayName("Body")]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public string Body { get; set; }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public bool IsActive { get; set; }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The AnnouncementHub</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.SignalR;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Threading.Tasks;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.LiveAnnouncement</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class AnnouncementHub : Hub</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public Task Send(string announcement)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Clients.All.SendAsync("Send", announcement);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">At the startup of the application, we need to add SignalR request execution pipeline and configuration of signalR. We also take it at the root of the plugin.</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The AnnouncementHubAtStartUp class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.Builder;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.Extensions.Configuration;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.Extensions.DependencyInjection;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Infrastructure;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.LiveAnnouncement;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class AnnouncementHubAtStartUp : INopStartup</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public int Order =&gt; 999;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void ConfigureServices(IServiceCollection services, IConfiguration configuration)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;services.AddSignalR(hubOptions =&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Configure(IApplicationBuilder application)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application.UseSignalR(routes =&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.MapHub&lt;AnnouncementHub&gt;("/announcement");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">It is important to keep the Order less than 1000. Because it need to execute before <span style="font-family: tahoma, arial, helvetica, sans-serif;">NopMvcStartup</span>.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The Controller</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.Mvc;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.SignalR;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.LiveAnnouncement;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Domain;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Models;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Services;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Areas.Admin.Controllers;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Kendoui;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Mvc;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using System.Linq;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement.Controllers</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class LiveAnnouncementController : BaseAdminController</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Field</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;private readonly IAnnouncementService _announcementService;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;private IHubContext&lt;AnnouncementHub&gt; _announcementHubContext;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Ctr</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public LiveAnnouncementController(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IAnnouncementService announcementService,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IHubContext&lt;AnnouncementHub&gt; announcementHubContext)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementService = announcementService;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementHubContext = announcementHubContext;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#region Methods&nbsp; &nbsp;&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult Announcement()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var model = new AnnouncementModel();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return View("~/Plugins/Widget.LiveAnnouncement/Views/LiveAnnouncementView/Announcement.cshtml", model);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;[HttpPost]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp; public IActionResult Announcement(AnnouncementModel model)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement objOfAnnouncementDomain = new Announcement();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objOfAnnouncementDomain.Name=model.Name;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objOfAnnouncementDomain.Body=model.Body;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;objOfAnnouncementDomain.IsActive=model.IsActive;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objOfAnnouncementDomain.CreateDate = DateTime.UtcNow;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementService.Insert(objOfAnnouncementDomain);</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (model.IsActive == true)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementHubContext.Clients.All.SendAsync("send", model.Body.ToString());</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return RedirectToAction("AnnouncementList");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;[HttpPost]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult Edit(AnnouncementModel model)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var entity = _announcementService.GetAnnouncementById(model.Id);</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entity.Name = model.Name;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entity.Body = model.Body;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entity.IsActive = model.IsActive;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entity.CreateDate = DateTime.UtcNow;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementService.Update(entity);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (model.IsActive == true)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementHubContext.Clients.All.SendAsync("send", model.Body.ToString());</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return RedirectToAction("AnnouncementList");</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult Edit(int Id)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var singleAnnouncement = _announcementService.GetAnnouncementById(Id);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var model = new AnnouncementModel();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.Id = singleAnnouncement.Id;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.Name = singleAnnouncement.Name;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.Body = singleAnnouncement.Body;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.IsActive = singleAnnouncement.IsActive;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return View("~/Plugins/Widget.LiveAnnouncement/Views/LiveAnnouncementView/Announcement.cshtml", model);</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult Delete(int Id)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var singleAnnouncement = _announcementService.GetAnnouncementById(Id);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_announcementService.Delete(singleAnnouncement);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new NullJsonResult();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult AnnouncementList()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var model = new AnnouncementModel();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return View("~/Plugins/Widget.LiveAnnouncement/Views/LiveAnnouncementView/AnnouncementList.cshtml", model);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;[HttpPost]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public IActionResult AnnouncementList(DataSourceRequest command, AnnouncementModel model)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var announcementPagedList = _announcementService.GetAnnouncementDomain(pageIndex: command.Page - 1, pageSize: command.PageSize);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var gridModel = new DataSourceResult();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridModel.Data = announcementPagedList.Select(x =&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new AnnouncementModel()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Id = x.Id,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = x.Name,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Body = x.Body,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsActive = x.IsActive</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridModel.Total = announcementPagedList.TotalCount;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Json(gridModel);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;#endregion</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The create view of announcement(Announcement.cshtml)</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@model Nop.Plugin.Widget.LiveAnnouncement.Models.AnnouncementModel</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Core.Infrastructure</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Web.Framework</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">var defaultGridPageSize = EngineContext.Current.Resolve&lt;Nop.Core.Domain.Common.AdminAreaSettings&gt;().DefaultGridPageSize;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">var gridPageSizes = EngineContext.Current.Resolve&lt;Nop.Core.Domain.Common.AdminAreaSettings&gt;().GridPageSizes;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Layout = "_AdminLayout";</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">//page title</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">ViewBag.Title = T("Admin.Plugins.HomePageProduct").Text;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using (Html.BeginForm())</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="content-header clearfix"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;h1 class="pull-left"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create Announcement</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;/h1&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;div class="pull-right"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button type="submit" class="btn bg-purple"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;i class="fa fa-file-pdf-o"&gt;&lt;/i&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create Announcement</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="/Admin/LiveAnnouncement/AnnouncementList" class="btn bg-olive"&gt;LiveAnnouncement&lt;/a&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/div&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="content"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;div class="form-horizontal"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="panel-group"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="panel panel-default panel-search"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="panel-body"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="row"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="form-group"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-3" style="text-align:center;"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Html.LabelFor(model =&gt; model.Name)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-8"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Html.EditorFor(model =&gt; model.Name)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-1"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="form-group"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-3" style="text-align:center;"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Html.LabelFor(model =&gt; model.Body)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-8"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;nop-editor asp-for="@Model.Body" asp-template="RichEditor" /&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-1"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="form-group"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-3" style="text-align:center;"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Html.LabelFor(model =&gt; model.IsActive)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-8"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Html.EditorFor(model =&gt; model.IsActive)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="col-md-1"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The List of created view(AnnouncementList.cshtml)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@model Nop.Plugin.Widget.LiveAnnouncement.Models.AnnouncementModel</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Core.Infrastructure</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@using Nop.Web.Framework</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">@{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">var defaultGridPageSize = EngineContext.Current.Resolve&lt;Nop.Core.Domain.Common.AdminAreaSettings&gt;().DefaultGridPageSize;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">var gridPageSizes = EngineContext.Current.Resolve&lt;Nop.Core.Domain.Common.AdminAreaSettings&gt;().GridPageSizes;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">Layout = "_AdminLayout";</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">//page title</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">ViewBag.Title = T("Admin.Plugins.HomePageProduct").Text;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="content-header clearfix"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="pull-right"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;a href="../LiveAnnouncement/Announcement" class="btn bg-blue"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;i class="fa fa-floppy-o"&gt;&lt;/i&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;/a&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="content"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&lt;div class="form-horizontal"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&lt;div class="panel-group"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="panel panel-default"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="panel-body"&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="Announcement-grid"&gt;&lt;/div&gt;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">$(document).ready(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;$("#Announcement-grid").kendoGrid({</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: "json",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: &nbsp;"@Html.Raw(Url.Action("AnnouncementList", "LiveAnnouncement"))",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: "POST",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType: "json",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data: addAntiForgeryToken</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destroy: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: "@Html.Raw(Url.Action("Delete", "LiveAnnouncement"))",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: "POST",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType: "json",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data: addAntiForgeryToken</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;schema: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data: "Data",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total: "Total",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors: "Errors",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id: "Id"</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error: function(e) {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display_kendoui_grid_error(e);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Cancel the changes</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.cancelChanges();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageSize: @(defaultGridPageSize),</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serverPaging: true,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverFiltering: true,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverSorting: true</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageable: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh: true,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageSizes: [@(gridPageSizes)]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editable: {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;confirmation: false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode: "inline"</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollable: false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columns: [{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field: "Name",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: "Name",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: 100</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field: "Body",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: "Body",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: 100,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerAttributes: { style: "text-align:center" },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributes: { style: "text-align:center" }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field: "IsActive",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: "IsActive",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: 100,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerAttributes: { style: "text-align:center" },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributes: { style: "text-align:center" }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: "Edite",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: 100,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template: '&lt;a href="Edit/#=Id#"&gt;@T("Admin.Common.Edit")&lt;/a&gt;'</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: { name: "destroy", text: "@T("Admin.Common.Delete")" },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: "@T("Admin.Common.Delete")",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: 100,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerAttributes: { style: "text-align:center" },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributes: { style: "text-align:center" }</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}]</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;"><span style="font-family: tahoma, arial, helvetica, sans-serif;">Add _ViewImports.cshtml</span> to the<span style="font-family: tahoma, arial, helvetica, sans-serif;"> ViewsèLiveAnnouncementView</span> folder. I take from other plugin. It is important to copy local true for all 3 views and also <span style="font-family: tahoma, arial, helvetica, sans-serif;">_ViewImports.cshtml.</span></span></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The content of the LiveAnnouncement.js</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">$(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;var connection = new signalR.HubConnectionBuilder()</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.withUrl('/announcement')</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.build();</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;connection.on('send', data =&gt; {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showannouncement(data);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;});</span></code></p> <p><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;function start() {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.start().catch(function (err) {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, 100000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;connection.onclose(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;start();</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">});</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">function showannouncement(announcemant) {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;if (announcemant) {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toastr.options = {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"closeButton": true,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"debug": false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"newestOnTop": false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"progressBar": false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"positionClass": "toast-bottom-right",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"preventDuplicates": false,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"onclick": null,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"showDuration": 300,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"hideDuration": 10000,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"timeOut": 100000,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"extendedTimeOut": 20000,</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"showEasing": "swing",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"hideEasing": "linear",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"showMethod": "fadeIn",</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"hideMethod": "fadeOut"</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tostView = '&lt;div class="item announcemantToast"&gt;' + announcemant + '&lt;/div&gt;'</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toastr["info"](tostView);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('.toast-info').css("background-color", "#008080");</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toastr.options.onclick = function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("html, body").animate(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ scrollTop: 0 },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(".toast").click(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("html, body").animate(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ scrollTop: 0 },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(".toast-info").click(function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("html, body").animate(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ scrollTop: 0 },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toastr.options = {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onclick: function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("html, body").animate(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ scrollTop: 0 },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></code></p> <p>&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(".announcemantToast").on("click", function () {</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("html, body").animate(</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ scrollTop: 0 },</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">Please download signalr.js from NPM and toastr from<a href="https://github.com/CodeSeven/toastr"> https://github.com/CodeSeven/toastr</a> . Add these 3 scripts under Scripts folder and do not forget to change “Do not copy” to “Copy always” of key “Copy to Output Directory” and also add a logo also change “Do not copy” to “Copy always”.</span></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">For enable Lazyloding we need to add a class PluginDbStartup at the root of the plugin.</span></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">The PluginDbStartup class</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.AspNetCore.Builder;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.Extensions.Configuration;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Microsoft.Extensions.DependencyInjection;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Core.Infrastructure;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Plugin.Widget.LiveAnnouncement.Data;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">using Nop.Web.Framework.Infrastructure.Extensions;</span></code></p> <p dir="ltr">&nbsp;</p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">namespace Nop.Plugin.Widget.LiveAnnouncement</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">/// &lt;summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">/// Represents object for the configuring plugin DB context on application startup</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">/// &lt;/summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">public class PluginDbStartup : INopStartup</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// Add and configure any of the middleware</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;param name="services"&gt;Collection of service descriptors&lt;/param&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;param name="configuration"&gt;Configuration of the application&lt;/param&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void ConfigureServices(IServiceCollection services, IConfiguration configuration)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//add object context</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;services.AddDbContext&lt;LiveAnnouncementObjectContext&gt;(optionsBuilder =&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optionsBuilder.UseSqlServerWithLazyLoading(services);</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// Configure the using of added middleware</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;param name="application"&gt;Builder for configuring an application's request pipeline&lt;/param&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public void Configure(IApplicationBuilder application)</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;{</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// Gets order of this startup configuration implementation</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">&nbsp;&nbsp;&nbsp;public int Order =&gt; 12;</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><code><span style="font-family: terminal, monaco; font-size: 12pt;">}</span></code></p> <p dir="ltr"><span style="font-family: georgia, palatino; font-size: 12pt;">For this project, we do not use automapper to convert viewmodel to domainmodel or vice versa. Because domain/entity model don’t have large property set.</span></p> <p dir="ltr">&nbsp;</p>urn:store:1:blog:post:24https://www.nop-station.com/throwback-nopstation-2017Throwback nopStation 2017<p dir="ltr"><img src="/images/uploaded/Blog/nopStation-throwback-2017.webp" alt="nopStation throwback for 2017" width="1000" height="590" /></p> <p dir="ltr"><a href="http://www.nop-station.com">nopStation</a> started its journey in 2011 as an ecommerce service provider in nopCommerce platform. 2017 is about to end &nbsp;within few days, and after serving the customers for last 5 years we can now claim ourselves as one of the most extended nopCommerce service providing company in the world, which we have achieved with devotion and responsibility. We are also the gold partner of nopCommerce and has been the cocktail sponsor of nopCommerce Days this year.</p> <p dir="ltr">Our journey started with an amazing theme "nopRoot" which till today has been <a href="https://www.nopcommerce.com/p/1381/noproot-bootstrap-theme-free.aspx">downloaded</a> over 21053 times. We have bagged &nbsp;a wide number of quality products and services whinin last 5 years. Plus our client base got stronger with times and more than 30 nopCommerce websites was built by us. Besides Bangladesh, we have customers from the United Kingdom, USA, Germany, Turkey, Libya etc. Obeezi, <a href="https://www.kidsfoni.com/">Kids Foni</a>, <a href="http://caputomarkets.com/blog">Caputo Market</a>, <a href="http://www.priscosfamilymarket.com/">Priscos Family Market</a>, <a href="https://www.brookhavenmarket.com/">Brookheaven Market place</a>, <a href="http://www.priyoshop.com/">Priyoshop</a> etc are some of our renowned domestic and international websites.</p> <p dir="ltr">We have brought 15 ready to go plugins for our customers which are absolutely free. Our plugin <a href="http://www.nop-station.com/shipstation-pluginwithout-source-code">Shipstation</a> and <a href="http://www.nop-station.com/shipstation-pluginwithout-source-code">API</a> have been the most appreciated plugins among all our clients and nopCommerce users. Our API plugin got more than 1k download within a week right after it was released. Our two prominent <a href="http://www.nop-station.com/nopcommerce-themes">theme</a>s "nopRoot" and "E-Shopper" still scoring top downloaded themes in nopCommerce marketplace for its unique features. Additionally, our most hyped product, nopCommerce native iOS and Android <a href="http://www.nop-station.com/nopcommerce-mobile-app">mobile app</a> has created a standard among all the applications out there in nopCommerce platform. These full-fledged mobile apps are not only helping our clients to multiply their sales revenue also making it easier for their customers to grab their services faster and smoother than before.&nbsp;&nbsp;</p> <p dir="ltr">We desire to give our clients the best services in nopCommerce platform as we know nopCommerce will triumph among all the ecommerce platforms available in the coming days. We already have a talented development team which is getting even stronger with times. &nbsp;Therefore, to rejoice our journey this year, we have brought an exciting discount offer &nbsp;for our customers as a new year gift. nopStation team wishes everyone a Happy New Year and wish your business a grand success in the coming years.</p> <p dir="ltr">Grab our offer by clicking on the link below:</p> <p dir="ltr"><a href="http://www.nop-station.com/nopcommerce-mobile-app">Link for 17% off offer<br class="kix-line-break" /><br class="kix-line-break" /></a>Happy New Year once again! Cheers!&nbsp;&nbsp;</p> <p>&nbsp;</p>urn:store:1:blog:post:23https://www.nop-station.com/shipstation-plugin-turning-your-online-business-more-convenient-for-your-customers-and-store-managerShipStation Plugin: Turning Your Online Business More Convenient for Your Customers and Store Manager<p dir="ltr"><img src="/images/uploaded/Blog/nopStation-shipstation-shipping-plugin-for-nopCommerce.webp" alt="nopStation's shipstation plugin for shipping and delivery on nopCommerce" width="1000" height="590" /></p> <p dir="ltr">After receiving huge responses for our responsive designs, unique plug-ins and native nopCommerce apps, nopStation presents another beautiful plugin which makes shipment for the ecommerce stores more easy through online.</p> <p dir="ltr">ShipStation is a multi-carrier, multi-channel shipping solution which is designed to facilitate the shipping and fulfillment process for online retailers. Powering thousands of online stores and processing millions of shipping orders per month, ShipStation is able to save merchants time and money by maximizing their shipping efficiencies. To accomplish this, ShipStation automatically retrieves and consolidates necessary information from sales channels, applies a preconfigured set shipping preferences to each order based on what store owners have specified, automatically updates each store with shipping status by tracking information of delivered products, return portals etc. It also manages multiple warehouses/locations by maintaining security issues as the endpoint of this plugin is auto-generated. Besides, store owners can also Customize their email confirmations.</p> <p dir="ltr">So, focusing only on business couldn't be more easy than before! NopStation.ShipStation takes all your responsibilities of shipment and help you to gain loyal customers. You just have to install the plugin and rest of the work will be done &nbsp;with ShipStation plugin.</p> <h2 dir="ltr">Supported Versions</h2> <p dir="ltr">ShipStation will work with custom store of the ShipStation. The supported version of the plugin is nopcommerce <strong>3.9</strong> and <strong>3.7</strong> also <strong>4.0</strong> will be on the list shortly.</p> <h2 dir="ltr">Features you’ll get through ShipStation</h2> <p dir="ltr">ShipStation is expertly blended with both common and more advanced features of shipping plugins and customized user interface which made it an unique one in the market. The features are-</p> <p>-The plugin will update the order status of any product “delivered” when the carrier delivers that product to its customer. There are some schedule tasks like- knock to the carrier (FedEx, USPS, and UPS) side, update the order status delivered when the carrier makes it delivered etc.</p> <p dir="ltr">-The endpoint of the shipstation is auto-generated. So store owners can feel relax about any &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;security issues.</p> <p dir="ltr">-The store owner can check the order status of the plugin.</p> <p dir="ltr">-The store owner can change the carrier key API key from the configuration page of the plugin for USPS and UPS. No credentials needed for FedEx.</p> <p dir="ltr">-When store owner updates the store from the ShipStation, 500 orders will be appearing at ShipStation at a time. We keep the amount of the order fixed to 500 &nbsp;because of some performance issue but it can be increased on store owners request.</p> <p dir="ltr">-Admin can enable or disable by clicking “Include Customer Order Notes” from the configuration page to keep the customer order note in the shipstation log.</p> <p dir="ltr">-Admin can enable or disable by clicking “Send Shipping Email” from the configuration page.</p> <p dir="ltr">-Admin can enable or disable by clicking “Order Requests To Log” from the configuration page.</p> <p dir="ltr">-Admin can enable or disable by clicking “Order XML To Log” from the configuration page.</p> <p dir="ltr">-Admin can enable or disable by clicking “Shipping Notification XML To Log” from the configuration page.</p> <p dir="ltr">-Admin can enable or disable by clicking “Include Paypal Info In Notes” from the configuration page</p> <p dir="ltr">nopStation always ensures to give their customers all the best nopCommerce based services under one hood and this new plugin confirms a hassel free shipping system for the online store owners.</p> <p dir="ltr">You can download the plugin from here:&nbsp;<a href="https://www.nopcommerce.com/p/2117/shipstation-plugin.aspx">http://www.nop-station.com/shipstation-pluginwithout-source-code</a></p> <p dir="ltr">Feel free to <a href="http://sina.bs23">ping us</a> anytime for the installation manual guide. Our experienced developers will help you for further customization if needed.</p> <p dir="ltr">Visit our <a href="http://www.nop-station.com/">website</a> to know more about our services.</p> <p dir="ltr">Contact info</p> <p dir="ltr">Email: sales@nop_station.com</p> <p dir="ltr">Phn: 01736633303</p> <p dir="ltr">Skype: sina.bs23</p>urn:store:1:blog:post:22https://www.nop-station.com/nopstation-become-the-gold-partner-of-nopcommerce-solutionnopStation has Become the Gold Partner of nopCommerce Solution<p><img src="/images/uploaded/Blog/nopStation-become-gold-partner.webp" alt="nopStation is now a Gold Solution partner of nopCommerce" width="1000" height="590" /></p> <p>&nbsp;nopCommerce is ruling as one of the best open source ASP.Net 4.0 &nbsp;&nbsp;ecommerce platform for different business needs. The flexibility and scalability of nopCommerce platform has made it a very popular e-commerce solution development framework for developers. As one of the leading nopCommerce development company (having team of &nbsp;<a href="http://www.nop-station.com/nopcommerce-mvpnopstation">MVPs and certified developers</a> on board) nopStation has created a strong position in the nopCommerce community.</p> <p>&nbsp;nopStation has been working on the nopCommerce platform since 2010, throughout the journey our company has achieved a deeper understanding on all the ins and outs of this technological platform which enables our developers to utilize this platform to its best expansion. Now we are happily announcing that we have been upgraded our partnership and become the gold partner of nopcommerce which validates and reflects our abilities to customize and develop special products and features for typical business requirements.</p> <p>Therefore to get your very own tailored ecommerce apps, themes and plugins from nopCommerce you can reach us anytime . We will ease your pain with &nbsp;the integration of custom designs, shopping carts and others for nopCommerce solutions.</p> <p><br />Contact info</p> <p dir="ltr">Email: sales@nop_station.com</p> <p dir="ltr">Phn: 01736633303</p> <p dir="ltr">Skype: live:nafiz.khan_1</p> <p>&nbsp;</p>urn:store:1:blog:post:21https://www.nop-station.com/40-discount-on-native-nop-apps-for-nopcommerce-day-201740% Discount on Native nop Apps for nopCommerce Day 2017<p dir="ltr" style="text-align: left;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-day-2017-offer.webp" alt="nopStation's 40% offer on nopCommerce day 2017" width="815" height="315" /></p> <p dir="ltr">e-commerce industry faces the fastest change in trends and technology and everyone strives to be more competitive in the long run, fresh ways of doing e-commerce will arise. From the very beginning, nopCommerce serve the latest features and facilities of an e-commerce platform that cope up with every possible user demand. This ASP.NET based e-commerce platform giving good competition to other leading PHP-based solutions since it has spread its wings in the e-commerce market. &nbsp;A statistics show that there are 30,950 nopCommerce built websites which are live and doing e-commerce businesses successfully. So, being a pro in this sector added an extra value to any software development company for sure, and thus, we- nopStation has been known as one of the prominent company to serve all kind of nopCommerce based services under one hood since 2010. From API plugins to mobile app- our talented developers were remarkably interested in the nopCommerce platform that they started working with their passion for developing all kind of nopCommerce products. let's see our products at a glance:</p> <h2 dir="ltr">Our Services</h2> <p dir="ltr">As one of the best nopCommerce development and service providing company, we have come up with customized services that our clients could ask for-</p> <p dir="ltr">1. Free Themes</p> <p dir="ltr">2. Free Plugins</p> <p dir="ltr">3. Native mobile apps (iOS, Android Platform)</p> <p dir="ltr">4. nopCommerce installation</p> <p dir="ltr">5. PSD to nopCommerce theme design and implementation nopCommerce responsive (All devices compatible) theme Design.</p> <p dir="ltr">6. Customization</p> <p dir="ltr">7. Shipping and payment gateway integration</p> <p dir="ltr">8. Custom shipping and tax rules implementation</p> <p dir="ltr">9. Customized report implementation for MIS.</p> <p dir="ltr">10. Store migration from other shopping cart to nopCommerce</p> <p dir="ltr">11. Migration from any version to the newest version.</p> <p dir="ltr">For more details of our products- read: <a href="http://www.nop-station.com/nopcommerce-development-company-in-bangladesh">nopCommerce Development Company in Bangladesh</a></p> <h2 dir="ltr">First to bring the native apps to the nopCommerce community</h2> <p dir="ltr">We are the first to bring the native nopCommerce app on both Android and iOS platform for the nopCommerce community. We offer the apps with source code so that you can easily modify the app according to your need also can resell the app if you want.</p> <p dir="ltr">Exclusive Features for your effortless business management nopStation mobile app:</p> <p dir="ltr">1. DashBoard/Homepage</p> <p dir="ltr">2. Navigation bar</p> <p dir="ltr">3. Categories</p> <p dir="ltr">5. Product details</p> <p dir="ltr">6. Wish List</p> <p dir="ltr">7. Address</p> <p dir="ltr">8. My Order</p> <p dir="ltr">9. My Account</p> <p dir="ltr">10. Smart Shopping Cart</p> <p dir="ltr">To know more about nopStation mobile app; read: <a href="http://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-website">Why NopStation Mobile App Is The Best For nopCommerce Website</a></p> <h2 dir="ltr">Recognition Among the nopCommerce Community</h2> <p dir="ltr">The gigantic reason of the popularity of nopCommerce platform is it has a huge community base and countless active participants. As one of the best nopCommerce development company (having team of &nbsp;MVPs and certified developers on board) nopStation has created a strong position in the nop community. With time and experience in excellence, our service got recognized globally as our CEO Mr. Raisul Kabir has actively participated for the nopCommerce days in Amsterdam during last October 2016. He was invited as one of the speakers to share our nopCommerce journey at the conference. &nbsp;&nbsp;Hence, we grew to be the best service standard provider of nopCommerce inside and outside the country.</p> <p dir="ltr">Read more to know about <a href="http://www.nop-station.com/nopcommerce-day-2017expectation-to-grow-bigger-better">The upcoming nopCommerce day 2017</a></p> <h2 dir="ltr">Happy Clients Are Our Strength</h2> <p dir="ltr">Apparently, we hailed to be the best nopCommerce service providing company in Bangladesh as well as a favorite name among the global nopCommerce community. But success is what you cannot achieve in a day! We started working on an e-commerce project with one of our US clients even before nopStation was born. Then after our two prosperous plugins-<a href="http://www.nop-station.com/nopcommerce-plugins">nopRoot &amp; Eshopper</a> has received global recognition, we got our Turkish Client which widened up our service as an e-commerce service providing company. Now our clients are spread throughout Europe specially in Germany, Netherland, middle east and the USA.&nbsp;&nbsp;</p> <h2 dir="ltr">What's Special from nopStation for nopDay 2017?</h2> <p dir="ltr">We are happy to announce that we are going to be one of the cocktail sponsor of nopCommerce day 2017 and are spreading our happiness among our customers by special offers and discounts!! We are offering 40% discount on our mobile (Starting from $720) apps for a whole month only to keep the community spirit high for the celebration of nopCommerce day 2017. You can have your discount offer using our special promo codes “<strong>NOPSTATION40</strong>” and ‘’<strong>nopday17</strong>” from this <a href="http://www.nop-station.com/nopcommerce-mobile-app">link</a>.</p> <p dir="ltr">Alongside, you can download plugins and themes from nopStation absolutely free of cost. We offer such privileges to our customers to give them the best possible products.</p> <p dir="ltr">So, grab your offer and <a href="https://www.messenger.com/login.php?next=https%3A%2F%2Fwww.messenger.com%2Ft%2Fnopstation.bs23%2F">ping us</a> anytime and let us help you to grow your business. We’ll be happy to be a part of your journey!</p> <p dir="ltr">Keep an eye on our <a href="http://www.nop-station.com">website</a> to know more about our upcoming theme ”<strong>nopDhaka</strong>” which will be launched and added to our website this month keeping upcoming nopCommerce day 2017 in mind. So be ready for another surprise!!!</p>urn:store:1:blog:post:20https://www.nop-station.com/nopcommerce-day-2017expectation-to-grow-bigger-betternopCommerce Day 2017|(Expectation to Grow Bigger & Better)<p dir="ltr"><img src="/images/uploaded/Blog/nopCommerce-day-2017.webp" alt="nopCommerce day 2017" width="815" height="315" /></p> <p dir="ltr">Being one of the leading e-commerce platforms- nopCommerce has been adopted by more than millions of store owners. There are 30,950 nopCommerce built websites which are live and doing ecommerce businesses according to the statistics of December 2016. To gather all of the talented developers and rising business tycoons, this year nopcommerce day is going to take place in New York, USA from 16th to 17th November. The mission of this conference is to strengthen the nopCommerce community and connecting developers who are true enthusiast of making the platform even more robust to help the store-owners, agencies, users and partners and add more value to the community by building a strong ecosystem. This year it powers more than 50,000 live sites all over the world, being the first in ASP.NET ecommerce platform and giving good competition to other leading PHP-based solutions.</p> <p dir="ltr">So undoubtedly this year’s event will be even bigger one than the previous ones.</p> <h2 dir="ltr">Throwback to earlier nopCommerce days 2015 &amp; 2016</h2> <p>&nbsp;</p> <p><img src="/images/uploaded/Blog/nopCommerce-day-2016-throwback.webp" alt="nopCommerce day 2016 throwback" width="1300" height="760" /></p> <p dir="ltr">Last year <a href="http://www.nop-station.com/nopcommerce-days-2016-nopstation">nopCommerce Days 2016</a>, took place in Amsterdam on 20th and 21st of October, 2016 which was the second conference of the nop community, hosted 160 attendees from 30 countries around the world. The first conference of the community also took place in Amsterdam, on 31st of October, 2015. It was named NopDevDays, oriented mostly towards developers and had 65 delegates from 14 countries. So it’s quite clear that, day by day the community is becoming larger in size and more people are coming together to work on this platform.</p> <p dir="ltr">As one of the prominent nopCommerce service provider, we were glad to present our company nopStation at the nopCommerce day back in 2016. Our <a href="https://www.linkedin.com/in/raisul">CEO Mr. Raisul Kabir</a> was invited as a speaker at that conference. Here you can watch the whole speech: <a href="https://www.youtube.com/watch?v=FvVYkgWBlFg">https://www.youtube.com/watch?v=FvVYkgWBlFg</a></p> <p dir="ltr" style="text-align: center;"><span style="font-size: 12pt;"><em>"It was a great pleasure to meet the man who brought nopCommerce into life (about Andrei Mazulnitsyn). Also, his whole team was a breath of fresh air. It was a pleasure to meet nopTemplate founders MILEN KOVACHEV &amp; BOYKO BONEV personally. Such young &amp; talented fellows. I was really happy when I find out nopStation is quite known among the nopCommerce community. And thus the welcome was a warm one that sure I didn’t expect before I went for the event."</em></span></p> <p dir="ltr" style="text-align: center;">- Raisul Kabir</p> <h2 dir="ltr">Expectations from nopCommerce day 2017</h2> <p dir="ltr">This year, to expand the geography, the organizing team of nopCommerce planned to cover more topics for the event than previous ones.</p> <p dir="ltr">The topics will include developer-oriented and store owner/manager-oriented themes. Speakers will share their expertise and best practices of using nopCommerce, exchange the latest ideas, technologies, and strategies. In addition to the sessions, visitors will get great networking opportunities, as nopCommerce Days unites senior executives, developers, merchants, and marketers. For the first time, the community will also officially award outstanding solution partners and active community members.&nbsp;&nbsp;</p> <p dir="ltr">The most exciting news is-nopCommerce is going to integrate with other platforms and extend the basiс functionality by adding plugins. There will be several fantastic and deeply practice-oriented talks like:</p> <h3 dir="ltr">nopCommerce - Wordpress integration</h3> <p dir="ltr"><a href="http://days17.nopcommerce.com/lavish-kumar?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=speaker-lavish-link&amp;utm_campaign=officialsite">Lavish Kumar</a>, Striving Programmers CEO, and <a href="http://days17.nopcommerce.com/shakti-singh-tanwar?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=speaker-shakti-link&amp;utm_campaign=officialsite">Shakti Singh Tanwar</a>,, Techpro Compsoft Pvt Ltd owner, will be talking about the crucial integration with Wordpress, the well-known blogging platform. Why not using the advantages of both nopCommerce and Wordpress to build an online business when e-commerce and advanced blogging features are required.</p> <h3 dir="ltr">ERP integration</h3> <p dir="ltr">This kind of integration was made in order to fulfill B2B client requirements. The case study will be shown by <a href="http://days17.nopcommerce.com/alexander-moss?utm_source=blog-post-days-17&amp;utm_medium=speaker-alexander-link&amp;utm_campaign=officialsite">Alexander Moss</a>, President &amp; Founder in Aperture Labs covers all the process of handling this issue from challenge to final solution.</p> <h3 dir="ltr">Title management system</h3> <p dir="ltr">The talk prepared by <a href="http://days17.nopcommerce.com/george-kiraz?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=speaker-george-link&amp;utm_campaign=officialsite">George A. Kiraz</a>, Ivos Solutions President, will show how nopCommerce was extended via a number of plugins but with minimum changes to its code to become a full-fledged Title Management System for publishers and bookstore owners.</p> <h3 dir="ltr">Plugin development</h3> <p dir="ltr">The fundamental talk on nopCommerce architecture will be delivered by &nbsp;<a href="http://days17.nopcommerce.com/john-baluka?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=speaker-john-link&amp;utm_campaign=officialsite">John Baluka</a>, Software Developer in ICompare Solutions. This is going to be a fast-paced walk-through of the nopCommerce architecture and source code.</p> <h3 dir="ltr">Mobile applications</h3> <p dir="ltr"><a href="http://days17.nopcommerce.com/grzegorz-onyszkiewicz?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=speaker-grzegorz-link&amp;utm_campaign=officialsite">Grzegorz Onyszkiewicz</a>, nop4you Project manager, will present the multi-platform mobile application fit to all the types of Android, IOS, and Windows mobile devices.</p> <h3 dir="ltr">Optimizing nopCommerce</h3> <p dir="ltr">At the first day of the conference Xcellence-IT, founder, &nbsp;<a href="https://www.nopcommerce.com/blog/76-nopcommerce-days-2017-what-to-expect-from-the-1st-day-of-the-conference.aspx">Krunal Jariwala</a> &nbsp;will be talking on the how to perform the capacity planning, load testing, profiling and optimizing the nopCommerce for a high load using available tools. This talk will include few cases.</p> <p dir="ltr">Check the <a href="http://days17.nopcommerce.com/schedule?utm_source=2017-07-31-blog-post-days-17&amp;utm_medium=schedule-link&amp;utm_campaign=officialsite">nopCommerce Days schedule</a> for more information about the speakers.</p> <h2 dir="ltr">What's new from nopStation this year?</h2> <p dir="ltr"><a href="http://www.nop-station.com">nopStation</a> is a nopCommerce focused products and services oriented company where customers can find any nopCommerce relative products and services under one hood. We launched our very own <a href="http://nop-station.com/nopcommerce-mobile-app">Android &amp; iOS native Apps</a>, <a href="http://nop-station.com/nopcommerce-themes">themes</a> and <a href="http://nop-station.com/nopcommerce-plugins">plugins</a>. since we have started our journey as nopStation.</p> <p dir="ltr">We are happy to announce that our theme for nopCommerce <strong>”nopDhaka”</strong> will be launched and added to our website this month keeping upcoming nopCommerce day 2017 in mind. Also we are offering <strong>40% discount</strong> on our mobile apps for a whole month only to keep the community spirit high for this celebration.</p> <p dir="ltr">Parallely you can download plugins, themes from nopStation absolutely free of cost. We offer such privileges to our customers to give them the best possible products. . We will also announce the name of our speakers for the event soon, that who will be presenting nopStation this time.</p> <p dir="ltr">We are also a happy cocktail sponsor of nopCommerce day 2017 and spreading our happiness among our customers by special offers and discounts. Grab your offer and <a href="https://www.messenger.com/login.php?next=https%3A%2F%2Fwww.messenger.com%2Ft%2Fnopstation.bs23%2F">ping us</a> &nbsp;anytime and let us help you grow with your business. We’ll be happy to be a part of your journey!</p> <p dir="ltr">Keep an eye on our website to know more exclusive news and announcements about nopCommerce day 2017 and nopStation in the upcoming months.</p> <p dir="ltr">Kudos to the community spirit to help each other out!</p>urn:store:1:blog:post:19https://www.nop-station.com/how-to-override-nopcommerce-generic-route-from-a-pluginHow to override nopCommerce generic route from a plugin<p dir="ltr"><img src="/images/uploaded/Blog/how-to-override-nopCommerce-generic-route.webp" alt="How to override nopCommerce generic route from a plugin" width="815" height="315" /></p> <p dir="ltr">nopCommerce is the leading ASP.NET-based open-source eCommerce platform. It is a solution with comprehensive <a href="https://www.nopcommerce.com/featurelist.aspx">features</a>(link: https://www.nopcommerce.com/featurelist.aspx) that applies to all types of users from new online businesses to already established e-commerce businesses. The platform is preferred by e-commerce experts globally who are thinking of growing bigger at a faster pace to deliver the best e-commerce experience to their customers. &nbsp;</p> <p dir="ltr">Reference:&nbsp;<a href="https://www.nopcommerce.com/whatisnopcommerce.aspx">https://www.nopcommerce.com/whatisnopcommerce.aspx</a></p> <h2 dir="ltr">nopCommerce &nbsp;generic route:</h2> <p dir="ltr">Basically what the GenericPathRoute class does is to retrieve the RouteData information from the HttpRequest, extract the slug, and compare it with the database record. If it eventually finds any active existing record, it then provides additional values to the RouteData such as the Controller, the Action and the ID etc.</p> <p dir="ltr">In short, GenericPathRoute.cs encapsulates the logic that glue together the three pieces: UrlRecord database table, the actual Controller &amp; Action that is responsible for producing the HTML result, and any other parameters required for the Action to perform correctly.</p> <p dir="ltr">This is a way of NopCommerce ID-Less URL Structure.</p> <p dir="ltr">For more details Please visit ==&gt;<a href="https://www.pronopcommerce.com/nopcommerce-id-less-url-structure-demystified">https://www.pronopcommerce.com/nopcommerce-id-less-url-structure-demystified</a></p> <p>&nbsp;</p> <h2>How to override a generic route from a plugin</h2> <p dir="ltr">We have to do the following approach and there's no easier way to do it:</p> <p dir="ltr">1. Add a new class inherited from GenericPathRoute. Override it "GetRouteData" method (put your custom logic there - specify custom controller and action method name) <br class="kix-line-break" />2. Create a new IRouteProvider implementation in your plugin. Just ensure that it's invoked after the \Infrastructure\GenericUrlRouteProvider.cs (use "Priority" property)</p> <p dir="ltr"><br class="kix-line-break" />3. Remove the "GenericUrl" route name in this IRouteProvider implementation. And add a new custom one. But do not use the default "MapGenericPathRoute" extension method. Create a new one that won't use the "GenericPathRoute" class but use your new custom one (created in step 1)</p> <p dir="ltr">Reference===&gt;https://www.nopcommerce.com/boards/t/41173/how-to-override-genericpathroutegetroutedata-in-plugin.aspx#164373</p> <p>&nbsp;</p> <p dir="ltr">I am going to give you an example from one of my implemented plugins,</p> <h2><span id="docs-internal-guid-c8ed4d91-b329-f840-3ae6-ecff7c868183">Add a new class inherited from GenericPathRoute. Override it "GetRouteData":</span></h2> <pre style="margin: 0em; overflow: auto; background-color: #ffffff;"><code style="font-family: Consolas,'Courier New',Courier,Monospace; font-size: 10pt; color: #000000;"> <span style="color: #0000ff;">using</span> System; <span style="color: #0000ff;">using</span> System.Web; <span style="color: #0000ff;">using</span> System.Web.Routing; <span style="color: #0000ff;">using</span> Nop.Core; <span style="color: #0000ff;">using</span> Nop.Core.Data; <span style="color: #0000ff;">using</span> Nop.Core.Infrastructure; <span style="color: #0000ff;">using</span> Nop.Services.Events; <span style="color: #0000ff;">using</span> Nop.Services.Seo; <span style="color: #0000ff;">using</span> Nop.Web.Framework.Seo; <span style="color: #0000ff;">namespace</span> Nop.Plugin.Sohel.ManageGiftCertificates.Infrastructure.SEO { <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Provides properties and methods for defining a SEO friendly route, and for getting information about the route.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> CustomGenericPathRoute : Nop.Web.Framework.Seo.GenericPathRoute { #region Constructors <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Initializes a new instance of the System.Web.Routing.Route class, using the specified URL pattern and handler class.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #008000;">/// &lt;param name="url"&gt;The URL pattern for the route.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="routeHandler"&gt;The object that processes requests for the route.&lt;/param&gt;</span> <span style="color: #0000ff;">public</span> CustomGenericPathRoute(<span style="color: #0000ff;">string</span> url, IRouteHandler routeHandler) : <span style="color: #0000ff;">base</span>(url, routeHandler) { } <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Initializes a new instance of the System.Web.Routing.Route class, using the specified URL pattern, handler class and default parameter values.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #008000;">/// &lt;param name="url"&gt;The URL pattern for the route.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="defaults"&gt;The values to use if the URL does not contain all the parameters.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="routeHandler"&gt;The object that processes requests for the route.&lt;/param&gt;</span> <span style="color: #0000ff;">public</span> CustomGenericPathRoute(<span style="color: #0000ff;">string</span> url, RouteValueDictionary defaults, IRouteHandler routeHandler) : <span style="color: #0000ff;">base</span>(url, defaults, routeHandler) { } <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Initializes a new instance of the System.Web.Routing.Route class, using the specified URL pattern, handler class, default parameter values and constraints.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #008000;">/// &lt;param name="url"&gt;The URL pattern for the route.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="defaults"&gt;The values to use if the URL does not contain all the parameters.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="constraints"&gt;A regular expression that specifies valid values for a URL parameter.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="routeHandler"&gt;The object that processes requests for the route.&lt;/param&gt;</span> <span style="color: #0000ff;">public</span> CustomGenericPathRoute(<span style="color: #0000ff;">string</span> url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler) : <span style="color: #0000ff;">base</span>(url, defaults, constraints, routeHandler) { } <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Initializes a new instance of the System.Web.Routing.Route class, using the specified URL pattern, handler class, default parameter values, </span> <span style="color: #008000;">/// constraints,and custom values.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #008000;">/// &lt;param name="url"&gt;The URL pattern for the route.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="defaults"&gt;The values to use if the URL does not contain all the parameters.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="constraints"&gt;A regular expression that specifies valid values for a URL parameter.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="dataTokens"&gt;Custom values that are passed to the route handler, but which are not used to determine whether the route matches a specific URL pattern. The route handler might need these values to process the request.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;param name="routeHandler"&gt;The object that processes requests for the route.&lt;/param&gt;</span> <span style="color: #0000ff;">public</span> CustomGenericPathRoute(<span style="color: #0000ff;">string</span> url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler) : <span style="color: #0000ff;">base</span>(url, defaults, constraints, dataTokens, routeHandler) { } #endregion #region Methods <span style="color: #008000;">/// &lt;summary&gt;</span> <span style="color: #008000;">/// Returns information about the requested route.</span> <span style="color: #008000;">/// &lt;/summary&gt;</span> <span style="color: #008000;">/// &lt;param name="httpContext"&gt;An object that encapsulates information about the HTTP request.&lt;/param&gt;</span> <span style="color: #008000;">/// &lt;returns&gt;</span> <span style="color: #008000;">/// An object that contains the values from the route definition.</span> <span style="color: #008000;">/// &lt;/returns&gt;</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> RouteData GetRouteData(HttpContextBase httpContext) { <span style="color: #0000ff;">var</span> NAME_SPACE = <span style="color: #a31515;">"Nop.Web.Controllers"</span>; RouteData data = <span style="color: #0000ff;">base</span>.GetRouteData(httpContext); <span style="color: #0000ff;">if</span> (data != <span style="color: #0000ff;">null</span> &amp;&amp; DataSettingsHelper.DatabaseIsInstalled()) { <span style="color: #0000ff;">var</span> urlRecordService = EngineContext.Current.Resolve&lt;IUrlRecordService&gt;(); <span style="color: #0000ff;">var</span> slug = data.Values[<span style="color: #a31515;">"generic_se_name"</span>] <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">string</span>; <span style="color: #008000;">//performance optimization.</span> <span style="color: #008000;">//we load a cached verion here. it reduces number of SQL requests for each page load</span> <span style="color: #0000ff;">var</span> urlRecord = urlRecordService.GetBySlugCached(slug); <span style="color: #008000;">//comment the line above and uncomment the line below in order to disable this performance "workaround"</span> <span style="color: #008000;">//var urlRecord = urlRecordService.GetBySlug(slug);</span> <span style="color: #0000ff;">if</span> (urlRecord == <span style="color: #0000ff;">null</span>) { <span style="color: #008000;">//no URL record found</span> <span style="color: #008000;">//var webHelper = EngineContext.Current.Resolve&lt;IWebHelper&gt;();</span> <span style="color: #008000;">//var response = httpContext.Response;</span> <span style="color: #008000;">//response.Status = "302 Found";</span> <span style="color: #008000;">//response.RedirectLocation = webHelper.GetStoreLocation(false);</span> <span style="color: #008000;">//response.End();</span> <span style="color: #008000;">//return null;</span> data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Common"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"PageNotFound"</span>; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; <span style="color: #0000ff;">return</span> data; } <span style="color: #008000;">//ensre that URL record is active</span> <span style="color: #0000ff;">if</span> (!urlRecord.IsActive) { <span style="color: #008000;">//URL record is not active. let's find the latest one</span> <span style="color: #0000ff;">var</span> activeSlug = urlRecordService.GetActiveSlug(urlRecord.EntityId, urlRecord.EntityName, urlRecord.LanguageId); <span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">string</span>.IsNullOrWhiteSpace(activeSlug)) { <span style="color: #008000;">//no active slug found</span> <span style="color: #008000;">//var webHelper = EngineContext.Current.Resolve&lt;IWebHelper&gt;();</span> <span style="color: #008000;">//var response = httpContext.Response;</span> <span style="color: #008000;">//response.Status = "302 Found";</span> <span style="color: #008000;">//response.RedirectLocation = webHelper.GetStoreLocation(false);</span> <span style="color: #008000;">//response.End();</span> <span style="color: #008000;">//return null;</span> data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Common"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"PageNotFound"</span>; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; <span style="color: #0000ff;">return</span> data; } <span style="color: #008000;">//the active one is found</span> <span style="color: #0000ff;">var</span> webHelper = EngineContext.Current.Resolve&lt;IWebHelper&gt;(); <span style="color: #0000ff;">var</span> response = httpContext.Response; response.Status = <span style="color: #a31515;">"301 Moved Permanently"</span>; response.RedirectLocation = <span style="color: #0000ff;">string</span>.Format(<span style="color: #a31515;">"{0}{1}"</span>, webHelper.GetStoreLocation(<span style="color: #0000ff;">false</span>), activeSlug); response.End(); <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span>; } <span style="color: #008000;">//ensure that the slug is the same for the current language</span> <span style="color: #008000;">//otherwise, it can cause some issues when customers choose a new language but a slug stays the same</span> <span style="color: #0000ff;">var</span> workContext = EngineContext.Current.Resolve&lt;IWorkContext&gt;(); <span style="color: #0000ff;">var</span> slugForCurrentLanguage = SeoExtensions.GetSeName(urlRecord.EntityId, urlRecord.EntityName, workContext.WorkingLanguage.Id); <span style="color: #0000ff;">if</span> (!String.IsNullOrEmpty(slugForCurrentLanguage) &amp;&amp; !slugForCurrentLanguage.Equals(slug, StringComparison.InvariantCultureIgnoreCase)) { <span style="color: #008000;">//we should make not null or "" validation above because some entities does not have SeName for standard (ID=0) language (e.g. news, blog posts)</span> <span style="color: #0000ff;">var</span> webHelper = EngineContext.Current.Resolve&lt;IWebHelper&gt;(); <span style="color: #0000ff;">var</span> response = httpContext.Response; <span style="color: #008000;">//response.Status = "302 Found";</span> response.Status = <span style="color: #a31515;">"302 Moved Temporarily"</span>; response.RedirectLocation = <span style="color: #0000ff;">string</span>.Format(<span style="color: #a31515;">"{0}{1}"</span>, webHelper.GetStoreLocation(<span style="color: #0000ff;">false</span>), slugForCurrentLanguage); response.End(); <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span>; } #region <span style="color: #0000ff;">var</span> productService = EngineContext.Current.Resolve&lt;Nop.Services.Catalog.IProductService&gt;(); #endregion <span style="color: #008000;">//process URL</span> <span style="color: #0000ff;">switch</span> (urlRecord.EntityName.ToLowerInvariant()) { <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"product"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Product"</span>; <span style="color: #008000;">//Write here your plugin Controller name</span> data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"ProductDetails"</span>; <span style="color: #008000;">//Write here your plugin Action name</span> data.Values[<span style="color: #a31515;">"productid"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { <span style="color: #a31515;">"Nop.Plugin.Sohel.ManageGiftCertificates.Controllers"</span> }; <span style="color: #008000;">// write here your own Plugin Controller Namespaces</span> } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"category"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Catalog"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"Category"</span>; data.Values[<span style="color: #a31515;">"categoryid"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"manufacturer"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Catalog"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"Manufacturer"</span>; data.Values[<span style="color: #a31515;">"manufacturerid"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"vendor"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Catalog"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"Vendor"</span>; data.Values[<span style="color: #a31515;">"vendorid"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"newsitem"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"News"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"NewsItem"</span>; data.Values[<span style="color: #a31515;">"newsItemId"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"blogpost"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Blog"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"BlogPost"</span>; data.Values[<span style="color: #a31515;">"blogPostId"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">case</span> <span style="color: #a31515;">"topic"</span>: { data.Values[<span style="color: #a31515;">"controller"</span>] = <span style="color: #a31515;">"Topic"</span>; data.Values[<span style="color: #a31515;">"action"</span>] = <span style="color: #a31515;">"TopicDetails"</span>; data.Values[<span style="color: #a31515;">"topicId"</span>] = urlRecord.EntityId; data.Values[<span style="color: #a31515;">"SeName"</span>] = urlRecord.Slug; data.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = <span style="color: #0000ff;">new</span>[] { NAME_SPACE }; } <span style="color: #0000ff;">break</span>; <span style="color: #0000ff;">default</span>: { <span style="color: #008000;">//no record found</span> <span style="color: #008000;">//generate an event this way developers could insert their own types</span> EngineContext.Current.Resolve&lt;IEventPublisher&gt;() .Publish(<span style="color: #0000ff;">new</span> CustomUrlRecordEntityNameRequested(data, urlRecord)); } <span style="color: #0000ff;">break</span>; } } <span style="color: #0000ff;">return</span> data; } #endregion } } </code></pre> <p>&nbsp;</p> <h2><span id="docs-internal-guid-c8ed4d91-b32d-ddb1-888b-a7afbf47ca4e">Create a new IRouteProvider implementation</span></h2> <pre style="margin: 0em; overflow: auto; background-color: #ffffff;"><code style="font-family: Consolas,'Courier New',Courier,Monospace; font-size: 10pt; color: #000000;"> <span style="color: #0000ff;">using</span> System.Web.Routing; <span style="color: #0000ff;">using</span> Nop.Plugin.Sohel.ManageGiftCertificates.Infrastructure.SEO; <span style="color: #0000ff;">using</span> Nop.Web.Framework.Mvc.Routes; <span style="color: #0000ff;">namespace</span> Nop.Plugin.Sohel.ManageGiftCertificates.Infrastructure { <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> GenericUrlRouteProvider : IRouteProvider { <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> RegisterRoutes(RouteCollection routes) { <span style="color: #008000;">//generic URLs</span> routes.CustomMapGenericPathRoute(<span style="color: #a31515;">"CustomGiftCirtificateGenericUrl"</span>, <span style="color: #a31515;">"{generic_se_name}"</span>, <span style="color: #0000ff;">new</span> { controller = <span style="color: #a31515;">"Common"</span>, action = <span style="color: #a31515;">"GenericUrl"</span> }, <span style="color: #0000ff;">new</span>[] { <span style="color: #a31515;">"Nop.Web.Controllers"</span> }); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> Priority { <span style="color: #0000ff;">get</span> { <span style="color: #008000;">//it should be the last route</span> <span style="color: #008000;">//we do not set it to -int.MaxValue so it could be overridden (if required)</span> <span style="color: #0000ff;">return</span> -99; } } } } </code></pre> <p>&nbsp; <strong>Create a new GenericPathRouteExtensions:</strong></p> <pre style="margin: 0em; overflow: auto; background-color: #ffffff;"><code style="font-family: Consolas,'Courier New',Courier,Monospace; font-size: 10pt; color: #000000;"> <span style="color: #0000ff;">using</span> System; <span style="color: #0000ff;">using</span> System.Web.Mvc; <span style="color: #0000ff;">using</span> System.Web.Routing; <span style="color: #0000ff;">namespace</span> Nop.Plugin.Sohel.ManageGiftCertificates.Infrastructure.SEO { <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">class</span> CustomGenericPathRouteExtensions { <span style="color: #008000;">//Override for localized route</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url) { <span style="color: #0000ff;">return</span> CustomMapGenericPathRoute(routes, name, url, <span style="color: #0000ff;">null</span> <span style="color: #008000;">/* defaults */</span>, (<span style="color: #0000ff;">object</span>)<span style="color: #0000ff;">null</span> <span style="color: #008000;">/* constraints */</span>); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url, <span style="color: #0000ff;">object</span> defaults) { <span style="color: #0000ff;">return</span> CustomMapGenericPathRoute(routes, name, url, defaults, (<span style="color: #0000ff;">object</span>)<span style="color: #0000ff;">null</span> <span style="color: #008000;">/* constraints */</span>); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url, <span style="color: #0000ff;">object</span> defaults, <span style="color: #0000ff;">object</span> constraints) { <span style="color: #0000ff;">return</span> CustomMapGenericPathRoute(routes, name, url, defaults, constraints, <span style="color: #0000ff;">null</span> <span style="color: #008000;">/* namespaces */</span>); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url, <span style="color: #0000ff;">string</span>[] namespaces) { <span style="color: #0000ff;">return</span> CustomMapGenericPathRoute(routes, name, url, <span style="color: #0000ff;">null</span> <span style="color: #008000;">/* defaults */</span>, <span style="color: #0000ff;">null</span> <span style="color: #008000;">/* constraints */</span>, namespaces); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url, <span style="color: #0000ff;">object</span> defaults, <span style="color: #0000ff;">string</span>[] namespaces) { <span style="color: #0000ff;">return</span> CustomMapGenericPathRoute(routes, name, url, defaults, <span style="color: #0000ff;">null</span> <span style="color: #008000;">/* constraints */</span>, namespaces); } <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Route CustomMapGenericPathRoute(<span style="color: #0000ff;">this</span> RouteCollection routes, <span style="color: #0000ff;">string</span> name, <span style="color: #0000ff;">string</span> url, <span style="color: #0000ff;">object</span> defaults, <span style="color: #0000ff;">object</span> constraints, <span style="color: #0000ff;">string</span>[] namespaces) { <span style="color: #0000ff;">if</span> (routes == <span style="color: #0000ff;">null</span>) { <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> ArgumentNullException(<span style="color: #a31515;">"routes"</span>); } <span style="color: #0000ff;">if</span> (url == <span style="color: #0000ff;">null</span>) { <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> ArgumentNullException(<span style="color: #a31515;">"url"</span>); } <span style="color: #0000ff;">var</span> route = <span style="color: #0000ff;">new</span> CustomGenericPathRoute(url, <span style="color: #0000ff;">new</span> MvcRouteHandler()) { Defaults = <span style="color: #0000ff;">new</span> RouteValueDictionary(defaults), Constraints = <span style="color: #0000ff;">new</span> RouteValueDictionary(constraints), DataTokens = <span style="color: #0000ff;">new</span> RouteValueDictionary() }; <span style="color: #0000ff;">if</span> ((namespaces != <span style="color: #0000ff;">null</span>) &amp;&amp; (namespaces.Length &gt; 0)) { route.DataTokens[<span style="color: #a31515;">"Namespaces"</span>] = namespaces; } routes.Add(name, route); <span style="color: #0000ff;">return</span> route; } } } </code></pre> <p><span id="docs-internal-guid-cf392294-b331-25fb-3f6f-e2bc5a382c95">Hope it will help you override the Generic route from a plugin. Enjoy Coding!!!!</span></p> <p>&nbsp;</p> <p>Content contributor:&nbsp;Md Minul Islam Sohel<br />Designation: Software Developer (nopMVP)<br />Skype ID:&nbsp;sohel.bs23</p>urn:store:1:blog:post:18https://www.nop-station.com/nopcommerce-development-company-in-bangladeshnopCommerce Development Company in Bangladesh<p dir="ltr"><img src="/images/uploaded/Blog/nopCommerce-development-company.webp" alt="" width="815" height="315" /></p> <p dir="ltr">nopCommerce business is spreading its wings in the e-commerce market which gave birth to various e-commerce services. Nowadays nopCommerce is in trend at it’s best .NET based e-commerce development platform delivering easy to use shopping cart along with all the flexibility and control. As one of the best nopCommerce development company (having team of &nbsp;MVPs and certified developers on board) nopStation &nbsp;has created a strong position in the community. nopStation has been working on nopCommerce platform since 2010, thus the company has achieved &nbsp;a deeper understanding on all the ins and outs of this technology which enables our developers to utilize this platform to its best expanse. This platform has the most exclusive features powered with ASP.NET with MS SQL backend database to equip a great e-commerce site that can streamline all your functionalities and double the performance of your ecommerce website.</p> <p dir="ltr">nopStation started its journey officially in 2011 as one of the best nopCommerce development service provider. Initially we released two beautiful free themes for the community. Which still has the highest downloaded themes honor on the head. For the community the group has also brought many free plugins. The team now got bigger and better with times. Along with the certified MVP developers, executive &amp; marketing people we are now serving the ecommerce community with the best nopCommerce development and maintenance services. From the very start, we the nopStation team, was determined to built the best native app for the community and we managed to bring the best app for the community shortly. As a team we are determined to provide our customers all the best possible services for nopCommerce and thus maintaining to keep all the services under one roof.&nbsp;</p> <h3 dir="ltr">nopStation- All services under the hood</h3> <p dir="ltr">Even before nopStation was born, few of our talented developers were remarkably interested in the nopCommerce platform that they started working with their passion for developing nopCommerce products such as themes, plugins and native apps. As nopCommerce is an open source software for e-commerce, therefore the developers find the platform very stimulating as there were many scopes for progression. By the time , Twitter Bootstrap &nbsp;become very popular as a CSS framework, but nopCommerce had no theme based on it. Our developers found an opportunity on working here and started to build the nopRoot as open source nopCommerce theme using Twitter Bootstrap in their free time. Just after the first month, nopRoot got more than 1k download and which advance the team to release Eshopper, another free theme for the community shortly after nopRoot.</p> <p dir="ltr">Initially, there was no business expectation out of the developed items, and the themes were created to help people out. But eventually, it turned out that the items are getting good responses &amp; was drawing more people towards us who needed help with the platform. Our developers who built the theme were also the active participants in nopCommerce forum receiving the <a href="http://www.nop-station.com/nopcommerce-mvpnopstation">best MVP award</a> by the nopCommerce community. Therefore, people started demanding custom solutions if we could provide them with that. Thus nopStation, the nopCommerce development company was born. We started with free themes &nbsp;leading towards a complete product of our very own &nbsp;nopStation. Following our other products, we started working on nopCommerce mobile app development &amp; within a year of work we were up with our mobile app for ecommerce stores in both iOS &amp; Android Platform.</p> <h3 dir="ltr">Our clients all over the world:</h3> <p dir="ltr">We started working on an ecommerce project with one of our US clients even before nopStation was born. Then after nopRoot &amp; Eshopper, we got our Turkish Client which widened up our service as an ecommerce service providing company. Now our clients are spread &nbsp;throughout Netherland, Germany, middle east &nbsp;and USA &nbsp;Apparently, we hailed to be &nbsp;the best nopCommerce service providing company in Bangladesh as well as a favourite name among the global nopCommerce community.</p> <p dir="ltr">With time and experience in excellence, our service got recognized globally as our CEO Mr. Raisul Kabir has actively participated for<a href="http://www.nop-station.com/nopcommerce-days-2016-nopstation"> the nopCommerce days</a> in Amsterdam during &nbsp;&nbsp;last October 2016. He was &nbsp;invited as one of the speakers to share our nopCommerce journey at the conference. &nbsp;&nbsp;Hence, we grew to be the best service standard provider of nopCommerce inside and outside the country.</p> <h3 dir="ltr">WHY NOPSTATION?</h3> <p dir="ltr">nopStation provides the best nopCommerce for store owners to any ecommerce business dwellers. For nopStation, customers are the number 1 priority. &nbsp;Additionally, our Themes, Plugins &amp; Apps are not only agile but also provide store owners the complete control over their stores. Online shopping is easier for the ecommerce customers with our apps which drive more customers in the stores.</p> <h3 dir="ltr">What we offer:</h3> <p dir="ltr">As one of the best nopCommerce development and service providing company, we have come up with customized services that our clients could ask for. Here are our services listed below.</p> <h4 dir="ltr">1. Free Themes</h4> <p dir="ltr">For Theme Design Development on nopCommerce, you need to make it responsive in the first place. Along with our free theme- <a href="http://www.nop-station.com/nopcommerce-themes">nopRoot and Eshopper</a>, you can hire our experts from nopStation to get your customized theme for your nopCommerce website. Our experts always focus onto the of making of responsive and all device compatible themes designing.</p> <h4 dir="ltr">2. Free Plugins</h4> <p dir="ltr">Our <a href="http://www.nop-station.com/nopcommerce-plugins">free plugins</a> are for nopCommerce store owners. Anyone who is using nopCommerce can get our <a href="http://www.nop-station.com/mega-menu">mega menu plugin</a> free for their website. This plugin is a piece of software that acts as an add-on to a nopCommerce store and gives the store additional functionalities. It allows a nopCommerce store to display additional content which is not originally designed to display. We do also build custom NopCommerce plugins for our clients as per their requirement that will enhance their store functionality.</p> <h4 dir="ltr">3. Native mobile apps (iOS, Android Platform)</h4> <p dir="ltr">As we are living in a mobile-only age, a mobile app for your online store becomes a necessity. nopStation offers clear and up-to-date responsive mobile app which is usable on any device for any online store powered by nopCommerce. With all the latest features including smart shopping cart, easy payment gateway, and customizable push notification, our nopStation mobile app provides you all the facilities at a very reasonable price. With source code, the purchase value is $3,000 and without source code is $1,200. For the details of &nbsp;the package, just have a quick <a href="http://www.nop-station.com/nopcommerce-mobile-app">surf</a> tho.</p> <h4 dir="ltr">4. nopCommerce installation</h4> <p dir="ltr">Our dedicated nopCommerce development team help you to install nopCommerce tool into your website. Not only the installation process but also take care of the maintenance of your e-commerce website on a reasonable monthly charge.</p> <h4 dir="ltr">5. Payment/Gateway Extensions Development</h4> <p>We can integrate your store with your preferred gateway payment method. Easy checkout and gateway extensions make your website more user-friendly and lead to more customer retention</p> <h4 dir="ltr">6. Store migration from another shopping cart to nopCommerce</h4> <p dir="ltr">We are here to help you convert your existing ecommerce or non-ecommerce site to a fully functional nopCommerce store. We also convert Classic nopCommerce to advanced nopCommerce with all functionality or modifications according to our client's requirement.</p> <h4 dir="ltr">7. &nbsp;Migration from any version to the newest version</h4> <p dir="ltr">Are you in need of nopcommerce Version Upgrade services?</p> <p dir="ltr">We have vast experience in upgrading NopCommerce from an earlier version to the latest one. All themes are upgraded according to latest released versions which include database, theme, plugin or other integrations upgrades.</p> <p dir="ltr">Our Key nopcommerce Version Upgrade Services are:</p> <ul> <li dir="ltr">nopCommerce code and modules review.</li> <li dir="ltr">Upgrade of nopCommerce core to the latest version.</li> <li dir="ltr">Transfer of nopCommerce design theme.</li> <li dir="ltr">Upgrade of nopCommerce database.</li> <li dir="ltr">Upgrade and configuration of all installed extensions</li> </ul> <h4 dir="ltr">8. Customization:</h4> <p dir="ltr">We also provide <a href="http://www.nop-station.com/nopcommerce-custom-solution">customization</a> for our customers according to their needs whether it's about theme design, websites feature addition or mobile app customization.</p> <h4 dir="ltr">9. Other Services:</h4> <p dir="ltr">nopStation has other services like cloud hosting, custom shipping and tax rules implementation and customized report implementation for MIS which give customers the best e-commerce experience.</p> <h3 dir="ltr">Our Uniqueness:</h3> <p dir="ltr">We stood up amongst the global industry as a success through based in a developing country like Bangladesh, and it is our greatest achievement to get notified throughout &nbsp;the world. Our &nbsp;talented developers always maintain the quality of the service. Plus customer satisfaction is our number one priority. We have built the top ranked e-commerce sites of our country including Othoba, Priyoshop, Amikinee etc. which are now ranked in the t 10 e-commerce site list in the <a href="http://www.brainstation-23.com/top-e-commerce-sites-bangladesh-according-alexa/">Alexa</a>. So our local clients also refer us as one of the best e-commerce service providing company. We are looking forward to deliver the finest products and services from our end and to hold the honor of being the best in global nopCommerce industry</p> <h3 dir="ltr">Future Ruminations</h3> <p dir="ltr">e-commerce industry faces the fastest change in trends and technology and everyone strives to be more competitive in the long run, fresh ways of doing e-commerce will arise. Therefore to catch up, marketers will put their heart and soul into refining and fine-tuning existing methods. So, here we are at the crossroads, standing for new challenges which will emerge, and working for bigger success stories putting the user satisfaction in the first place.</p>urn:store:1:blog:post:17https://www.nop-station.com/best-net-platform-for-ecommerceBest .NET ecommerce platform- nopCommerce<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/Best-NET-ecommerce-platform-nopCommerce.webp" alt="Best .NET based eCommerce platform is nopCommerce" width="815" height="315" /></p> <p dir="ltr">The choice of programming language for a new application can only be made after considering a sum of factors such as the core functionality and purpose of the application, the underlying technology infrastructure available, as well as scalability, connectivity and security requirements. Furthermore, the preferences and budgets of its clients need to be taken into account.</p> <p dir="ltr">ASP.NET is a web application framework that you can use to build any dynamic website, Later on, it became an open source. Even so, ASP.NET development has evolved to be the best solution chosen by medium to large business to create their web applications. The main reason why ASP.NET is considered as the best .NET ecommerce platform is that it allows the developers to create high performing websites, which are very easy to develop and maintain as well. Businesses have developed a liking to this language because it is affordable.</p> <h2>Notable features of .NET</h2> <h4 dir="ltr">Interoperability</h4> <p dir="ltr">.NET provides access to functionality and allows interaction between newer and older applications outside its environment. This exclusive feature makes it a popular among other open source languages.</p> <h4 dir="ltr">Speed</h4> <p dir="ltr">Just like all .NET applications, ASP.NET applications are also compiled. This makes them much faster than PHP, whose applications are interpreted most of the time. To achieve the same effect with PHP, Zend and PHP accelerator must be installed on the server, and this is rarely the case at most Web hosting companies. Also, Object Oriented programming is much faster in ASP.NET than it is in PHP.</p> <h4 dir="ltr">Language independence</h4> <p dir="ltr">Another notable point is ASP .NET gives you much easier going feeling than Java or PHP.NET has a Common Type System (CTS) that allows the framework to support the interaction of types and objects between applications and libraries developed using a compatible .NET language (VB.NET, C#, etc). So it has language interdependencies those make it unique.</p> <h4 dir="ltr">Base class library</h4> <p dir="ltr">.NET has a base class library which is a part of the FCL, Base Class Library (BCL) is composed of classes that encapsulate functions available to all languages utilizing .NET – database interaction, web application development, file reading and writing, graphic rendering, XML document manipulation, and many others.</p> <h4 dir="ltr">Security</h4> <p dir="ltr">The Official Microsoft ASP.NET site is developed by Microsoft, which is built on top of Microsoft's .net framework. The leading strength of <a href="https://www.asp.net/">The Official Microsoft ASP.NET</a> site is its security where all applications are provided with a common security model. Many inbuilt security features exist without the need for additional third-party plugins.</p> <h2>nopCommerce- best .NET ecommerce platform</h2> <p dir="ltr">nopCommerce is an open-source e-commerce solution built with ASP.NET inheriting all the exclusive features of this open source language. A complete solution with comprehensive features that is easy to use for new online businesses, yet powerful enough for the most demanding e-commerce expert. It’s a secure, scalable and extendable e-commerce platform that has been downloaded more than 1.5 million times since it has released! From the architectural perspective, its abilities to integrate to Entity Framework with code first approach and use ASP.NET MVC, Unit Testing etc., the platform offers one of the best eCommerce frameworks in the space. Additionally, since it is an open source e-commerce software, the community is supporting and constantly making this framework better and better.</p> <h2><strong>Why is nopCommerce a better platform for e-commerce?</strong></h2> <p dir="ltr">nopCommerce software contains both the catalog front-end and the administration tool back-end functionalities. It also offers shopping cart solution which is very easy to use. Most of the business merchants who have outgrown existing systems, find the solution most fitted for their businesses. Additionally, web hosting is also a lot easier in nopCommerce. E-commerce store owners can host with their current web host or with nopCommerce hosting partners also. Therefore, &nbsp;anyone who wants to sell their goods over the internet can do it more swiftly than before.</p> <p dir="ltr">Another point is, comparing with other existing e-commerce solutions nopCommerce is the best choice of all for its flexibility &amp; control. As nopCommerce is a free platform, extensions and third-party applications can be purchased as add-ons. nopCommerce offers a stack of free stuff like nopCommerce plugins, nopCommerce themes, nopCommerce templates and so on. &nbsp;Expert reviews are saying, nopCommerce is a popular downloadable e-commerce software in 2016. Till now nopCommerce is downloaded over 1.8 million times &amp; also trusted among 27,000 (over) store owners. Also, nopCommerce is perfect for online merchants and small/medium businesses.</p> <blockquote> <p dir="ltr" style="text-align: center;"><strong>At Entergy, we are fortunate enough to have distinct teams that cover the above technology, and our team work together to create the best-interconnected solution and ultimately improve the business's overall operational efficiency</strong></p> <p>&nbsp;</p> </blockquote> <p dir="ltr">We have our two <a href="http://www.nop-station.com/nopcommerce-mvpnopstation">MVPs</a> of the nopCommerce platform, Md. Minul Islam Sohel and Anik Saha, who got selected by the nopCommerce team through their yearly performance &amp; presence in the community forum.</p> <!--<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://lh6.googleusercontent.com/QFABIzuhX7I8UIfroVouWrXKO2i3jJERMJumhoLPTUqLtqUHiowXNzQ7Ng63RuRT8S9jamv5jar0mztZH7Gr7TzhO3UI5V9fEPE-1lpCIwXbRoNx35H1bCcQy2JYivYepxIEmsyc" alt="MVP nopStation.PNG" width="433" height="424" /></p>--> <p dir="ltr">We are also first to bring the native app to the nopCommerce community</p> <p dir="ltr">We are the first to bring the native nopCommerce app which is called, <a href="http://www.nop-station.com">nopStation</a> on both <a href="https://play.google.com/store/apps/details?id=com.bs.ecommerce.nopstation">Android</a> and <a href="https://itunes.apple.com/us/app/nopstation/id1082625397?ls=1&amp;mt=8">iOS</a> platform for the nopCommerce community. We offer the apps with source code so that you can easily modify and resell the app.</p> <h3 dir="ltr">Our other legacies:</h3> <p dir="ltr">1. Free Themes</p> <p dir="ltr">2. Free Plugins</p> <p dir="ltr">3. Native mobile apps (iOS, Android Platform)</p> <p dir="ltr">4. nopCommerce installation</p> <p dir="ltr">5. PSD to nopCommerce theme design and implementation nopCommerce responsive (All devices compatible) theme Design.</p> <p dir="ltr">6. Customization</p> <p dir="ltr">7. Shipping and payment gateway integration</p> <p dir="ltr">8. Custom shipping and tax rules implementation</p> <p dir="ltr">9. Customized report implementation for MIS.</p> <p dir="ltr">10. Store migration from other shopping carts to nopCommerce</p> <p dir="ltr">11. Migration from any version to the newest version.</p> <!--<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://lh4.googleusercontent.com/IgL8y6wAjpTokpueXOFX1jgIOoUibdJdXgKfkaSXjv3vrdzphGLz_R8hJdeFyrKfdc_wyhBoAVaLHOD_wM1-fVYOQEekTG0hLWzaT29LR7xpewaCwwsQjLhRbzrsnTM6RwWpiEpm" alt="unnamed.jpg" width="600" height="215" /></p>--> <p dir="ltr"><a href="mailto:sales@nop-station.com">Contact </a>our team for any further help, query, and services. We are always here to help you out with our expert assistance.</p> <p dir="ltr">To learn about nopStation pay a visit to our <a href="http://www.nop-station.com">website</a>.</p>urn:store:1:blog:post:16https://www.nop-station.com/nopcommerce-guidelineA Beginners Guide for Store Owners: Learn nopCommerce for Business<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/beginners-guide-store-owners-learn-nopCommerce-business.webp" alt="Beginners guide to nopCommerce store owners" width="815" height="315" /></p> <p dir="ltr">Being known as the most flexible open source e-commerce platform, <a href="https://www.nopcommerce.com">nopCommerce</a> has become an exciting arena for online store owners to grow their business. With a readily accessible customer base and exciting new features, vendors can easily maintain their online stores without any hassle. Equip with the most demanding requirements of store owners, such as multi vendor capability, in-built marketing tools, product management, email, live-chat, multi lingual support and affiliate marketing, NopCommerce helps them to stay ahead of their competition.</p> <p dir="ltr"><a href="http://www.nop-station.com">nopStation</a> is a Customer First e-commerce software development company which is also the silver partner of nopCommerce and also the first one to bring a <a href="http://www.nop-station.com">native app</a> in the community offering custom development and facilitation in growing your business up on top. Since nopCommerce is a self-sufficient online store, some short-outs from our experience can be easy to grab to grow the business for the store owners who has just landed his first step in this sector. Let’s see how as a nopCommerce store owner, you can use these features to connect better with your customers and increase your revenue.</p> <h3 dir="ltr">Endorse multi-vendor functionality to boost sales</h3> <p dir="ltr">With nopCommerce, store owners showcase multiple vendors on their e-commerce website and drive commissions on each sale that originates on the portal. Vendors will also benefit from the important features like the creation of profiles, easy vendor registration, managing the products, viewing the various sales reports and flexible vendor payments. The NopCommerce Multi-Vendor Marketplace is exceedingly hyped as customers are saved from the trouble of visiting multiple sites to do their shopping. And as a store owner, you can enjoy the boost in your sales and other higher profits.</p> <h3 dir="ltr">Leverage the in-built marketing tools</h3> <p dir="ltr">NopCommerce has numerous in-built marketing tools like SEO, analytics, ERP systems to improve overall productivity and increase the sale of nopCommerce store owners. Additionally, store owners can enjoy more traffic to their store and integrate with third-party ERP systems to improve total operations and productivity. Other in-built marketing tools alike Up Selling, discounts and affiliates and the powerful SEO module on nopCommerce help to improve both your overall productivity and catapult your e-commerce business to greater heights.</p> <h3 dir="ltr">Built-in email templates to enhance customer experience</h3> <p dir="ltr">Unlike other e-commerce platforms, nopCommerce store owners don't have to buy expensive email templates or messaging tools to keep connected with their customers. nopCommerce portal has more than hundreds of user-friendly built-in email templates that can be used by store owners to send notifications about the customer’s order status or to improve the after-purchase seasoning of the customers. you can find a variety of email templates in the ‘Content Management’ section under the ‘Message Template’ tab of the nopCommerce platform. So, you don’t have to buy subscriptions for expensive email tools.</p> <h3 dir="ltr">Manage products the right way</h3> <p dir="ltr">nopCommerce store owners can put up product information, manage their inventory and integrate their sites, update their website with the latest deals and offers of the nopCommerce platform. They can also associate with other marketplaces by using tools that are already available on this e-commerce site. Hassle-free product management is something that all nopCommerce store owners can enjoy. With tools like cross-selling, upselling, product reviews, prompts and other features on the platter, businesses can become more profitable in an increasingly competitive market.</p> <h3 dir="ltr">Live Chat, User Behaviour Data and Multilingual Support for better customer experience</h3> <p dir="ltr">NopCommerce has proved to be a pathbreaker by adopting powerful features that just can’t be ignored. Responding customer queries instantaneously is a very important feature of the nopCommerce website. It helps to gain more loyal customers resulting increase your sales. nopCommerce has some interesting features like Current Wish Lists, Activity Log and Shopping Carts etc. that help nopCommerce store owners understand their users better and procure to their needs. Store owners can easily integrate the Live Chat plugins on their nopCommerce portals to ensure the best customer support.</p> <p dir="ltr">Moreover, you can now use Live Chat to deal with online customer queries in time while the Multi-Lingual support for the e-commerce store and back-office helps to improve the accessibility of your store. By choosing nopCommerce, you will have access to all the tools that will smoothen your journey as a proud store owner.</p> <h3 dir="ltr">Affiliate marketing to increase store traffic and boost marketing performance</h3> <p dir="ltr">There are so many ways to generate a large number of traffic and sales on an e-commerce website but when there is a question about adopting a low maintenance, pay for performance program, there affiliate marketing takes the prize. &nbsp;It offers huge potential for growth in an easy-to-commit relationship between three parties – the advertiser, the publisher and the customer. &nbsp;The customer while browsing through the publisher’s site clicks an ad that he finds interesting and is automatically redirected to the advertiser’s website.</p> <p dir="ltr">The publisher earns a commission, the advertiser gets more traffic and the customer gets more options to find the product or service he is looking for – thus everybody’s happy! As a nopCommerce store-owner, you can use the NopCommerce Affiliate Program to promote your business and draw relevant traffic to your store.</p> <h3 dir="ltr">Various sales reports to enhance your business</h3> <p dir="ltr">It is essential for any store owner to know how his business is going if required. The nopCommerce solution provides a range of sales reports that can be used to help you analyze your business, track your online sales and build strategies for the upcoming future market. These reports can be easily configured to give you useful insights for your decision making and provide you the different business statistics from time to time.</p> <p dir="ltr">nopCommerce packs a punch when it comes to providing free, built-in marketing tools, a range of techniques to engage with your customers and maintaining your whole business in a seamless way.</p> <p dir="ltr">Read: <a href="http://www.nop-station.com/how-good-is-nopcommerce-as-an-e-commerce-solution">How good is nopCommerce as an e-commerce solution</a></p> <h3 dir="ltr">Mobile app to further increase user engagement</h3> <p dir="ltr">Your eCommerce business can attain much with a Mobile Application alongside a browser portal. The world is in a rush and since the emergence of smart devices, people do multitasking on the go. A quick review of the statistics shows a little percentage (10% utmost) of worldwide mobile device users experiencing Mobile Web Browser over customized application. If you want to reach the most customers on the web for your eCommerce business, you should not be late having a Mobile application alongside.</p> <p dir="ltr"><img src="/images/uploaded/Blog/nopCommerce-native-apps-nopStation.webp" alt="nopCommerce native mobile apps from nopStation" width="1000" height="500" /></p> <p dir="ltr">Now if you are thinking about one of the best Mobile App solutions for your nopCommerce website which will add a dimension to your business, nopStation is there to meet your satisfaction. nopStation's unique and on-demand features along with the benefits of customization will change your online e-commerce business experience. Since your customers can be favored with diverse mobile device and platforms, nopStation developers have a diverse solution as well. The nopStation mobile app is available both on AppStore and Google Play for all compatible mobile devices. Our native app features will give you the latest version your eCommerce mobile application that complies your customers’ mobile devices. &nbsp;This offers your customer the fastest, most reliable and most responsive experience to your customers.</p> <p dir="ltr">Contact our team for any further help, query and services about best e-commerce solution. We are always here to help you out with our expert assistance.</p> <p dir="ltr">To learn about <a href="http://www.nop-station.com">nopStation</a> pay a visit to our website.</p>urn:store:1:blog:post:15https://www.nop-station.com/how-good-is-nopcommerce-as-an-e-commerce-solutionHow good is nopCommerce as an e-commerce solution<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/how-good-nopCommerce-e-commerce-solution.webp" alt="How good is nopCommerce as an eCommerce solution" width="815" height="315" /></p> <p dir="ltr">NopCommerce is one of the best open source e-commerce platforms that features a booming catalog on the frontend and handful of customization through administration tool on the backend. The platforms integrates an easy-to-use online shopping cart, that is uniquely suited for business of any sizes. It has everything one will need from remarkable flexibility to control on purchase. Additionally, this platform is fully customizable, both from a design and functionality perspective. Being stable and full of features, nopCommerce is used by more than 25,000 online e-commerce store owners.</p> <p dir="ltr"><a href="http://www.brainstation-23.com/">Brain station 23</a>, being the leader among the software development companies in e-commerce industry is one proud nopCommerce Solution Partner. Over the years we have had many clients using nopCommerce worldwide, and have implemented a wide variety of designs and service customizations.</p> <p dir="ltr">Here are some of the features (according to our e-commerce experts) which are distinctive among all other platforms out there and which have made nopCommerce as one of the best e-commerce solution platform and incredible choice for your online business:</p> <p>1. Cost effective to implement and maintain</p> <p>2. Vigorous set of standard features</p> <p>3. Customizable, both from a design and functionality perspective</p> <p>4. Supported by an active community (nopCommerce Forum)</p> <h3 dir="ltr">Why you should select nopCommerce for your e-commerce store?</h3> <p dir="ltr">nopCommerce has a plenty of standard features and capabilities, designed to meet today’s e-commerce website needs:</p> <ol> <li dir="ltr"><strong>Multi-Store</strong> – run more than one store from a single nopCommerce instance</li> </ol> <ol start="2"> <li dir="ltr"><strong>Multi-Vendor</strong> – drop shipping solutions enables you to sell online without maintaining an inventor</li> <li dir="ltr"><strong>Product Features</strong> – variety of attributes, comparison tools, inventory management, price controls, digital goods, reviews/rating and much more</li> </ol> <ol start="4"> <li dir="ltr"><strong>SEO</strong> – all the tools you’ll need to manage your SEO efforts and ranking up on net</li> </ol> <ol start="5"> <li dir="ltr"><strong>Checkout</strong> – streamlined one-page checkout, guest or account based, gift wrapping and personalization options</li> </ol> <ol start="6"> <li dir="ltr"><strong>Customer retention</strong> – keep your customers coming back with reward programs, discounts and coupons, gift cards, and social media integrations</li> </ol> <ol start="7"> <li dir="ltr"><strong>Payment Methods</strong> – more than 50 standard payment methods and gateways</li> </ol> <ol start="8"> <li dir="ltr"><strong>Shipping</strong> – integrated with the major carriers (UPS, USPS, FedEx, etc.) with a broad variety of configuration options</li> </ol> <ol start="9"> <li dir="ltr"><strong>Taxation</strong> – extremely flexible and customizable to meet your tax nexus requirements</li> </ol> <ol start="10"> <li dir="ltr"><strong>m-commerce</strong> – easy to browse, shop and checkout on any device</li> </ol> <ol start="11"> <li dir="ltr"><strong>Customer Service</strong> – customizable customer attributes, external authentication (ie, login with Facebook), robust security, wish lists, custom order email templates and the list goes on</li> </ol> <p dir="ltr">Additionally, when it’s the matter of taking your business to the next level mobile application is a must to score the top of your game.</p> <p dir="ltr">Read more: <a href="http://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-website">Why NopStation Mobile App Is The Best For nopCommerce Website</a></p> <!--<p dir="ltr" style="text-align: center;"><img src="https://lh4.googleusercontent.com/AC2a2Q5Bc6Vvd42QtLdl7F61V_FqrUoYYni-kXN6e4z9v0eljXVzDHtYyjt08bcooh_mU2RG3DD9PRPDpA5yxjaICcebYuL_Vckz-MUs98i0jrXeTh-J_OxYsAXjTYMtdcFgWn4O" alt="^E85FC9E2B18F0705B5234375E33E237F23C0923C6A208924EB^pimgpsh_fullsize_distr.png" width="595" height="842" /></p>--> <h3 dir="ltr"><a href="https://www.nopcommerce.com/p/1225/custom-price-per-customer.aspx">nopCommerce Pricing</a>:</h3> <p dir="ltr">nopCommerce is an open source e-commerce platform free to download while extensions and third-party applications can be purchased as add-ons as per your need.</p> <h3 dir="ltr">What else you will need along with an e-commerce website</h3> <p dir="ltr">With emerging popularity for being reliably fast and secure e-commerce solution platform, nopCommerce claimed a highly notable<a href="http://www.nop-station.com/nopcommerce-mvpnopstation"> people’s choice and other CMS awards</a> back in 2016. Since the backend is based on.NET MVC, nopCommerce developers find the platform most convenient for any e-commerce web application. &nbsp;As the most of today’s online shoppers prefer any mobile devices twice over a desktop browser, having a Mobile App besides your nopCommerce website appears to be more user friendly than before. Now if you are thinking about one of the best Mobile App solutions for your nopCommerce website which will add a dimension to your business, nopStation is there to meet your satisfaction.</p> <!--<p dir="ltr"><img src="https://lh5.googleusercontent.com/KAGc_1wneYiTnOoWYiBw_v7QlXjTJB7GOHBaoGdVjsiwNt2LyiSA8cYaZEfxv8707JbyFAOpg0gH490uJK2VAyj70sgaAChE1XK1IEy53Okpa4NQWjHE4LoFN3p_l40dyD0krmPi" alt="Capture.PNG" width="624" height="199" /></p>--> <p><br />nopStation's unique and on-demand features along with the benefits of customization will change your e-commerce business experience online. Also, you change your customer shopping experience introducing a fully functional e-commerce native Mobile App using nopStation.&nbsp;</p> <p dir="ltr">Contact our team for any further help, query and services. We are always here to help you out with our expert assistance.</p> <p dir="ltr">To learn about <a href="http://www.nop-station.com/">nopStation</a> pay a visit to our website.</p>urn:store:1:blog:post:14https://www.nop-station.com/reasons-why-you-should-choose-nopcommerce-better-customer-retentionReasons Why You Should Choose nopCommerce for Better Customer Retention<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/reasons-why-you-should-choose-nopCommerce-better-customer-retention.webp" alt="Reasons why You should choose nopCommerce for better customer retention" width="815" height="315" /></p> <p dir="ltr">E-commerce sector has been in trend and on rise form the last half of this decade. That’s why there are on end of debates over choosing the suitable open source solution for it. As there are so many e-commerce platform nowadays, it can be very difficult to figure out which shopping cart software is the best for customer retention. We all know that growing an eCommerce business is harder than starting the service at the first place.The most difficulty is faced when you need to get more customers. Customers make any business alive and step ahead.On that point let’s try to figure out why nopCommerce become your choice as the best e-commerce platform.</p> <p dir="ltr"><a href="https://www.nopcommerce.com/">NopCommerce</a> is among the top 5 featured e-commerce apps on<a href="https://www.microsoft.com/web/webmatrix/"> Microsoft Web Matrix</a>. The main feature of this software is that it is very easy to manage and quite user-friendly. This was the reason why nopCommerce created a buzz in the market soon after it was launched back in October 2008. Unlike others, nopCommerce is not written in PHP or Pearl rather, it is completely written in ASP.Net 4.0 and nopCommerce developers have provided the backend of SQL 2005 which even today is considered as a very powerful database management platform.</p> <p dir="ltr">"Since its founding in 2008, nopCommerce has been downloaded over 1,800,000 times. To date, nopCommerce powers over 27,000 online stores. And this shopping cart has won more than just the trust of merchants. It has also taken home the PacktPub Open-Source Award and the CMS Critics Award"</p> <p dir="ltr">Here are some features that make nopCommerce one of the best e-commerce platform and an incredible choice for your business:</p> <h3 dir="ltr">1. Easy to build and customize your website</h3> <p dir="ltr">nopCommerce is a .NET based arrangement that numerous professional engineers know about. In this way, finding skilled engineers to build up your site is not a troublesome errand. It rushes to download and setup. On the comparison with WooCommerce you need to take care of the setup on your own – which involves downloading and then installing the plugin on your WordPress site.nopCommerce has many components that maintain internet business like an adjustable shopping basket, an index based front-end where you can list your items and a flexible organization device which permits simple web page administration whereas Magento comes with a complex and not-so-friendly front-end. nopCommerce’s pluggable measured engineering permits designers to include components and components increasingly amid run-time. It accompanies an extensive number of modules and topics which you can use to give your site an innovative look and feel. B2B stores should be more instructive in regards to their items differentiate with B2C stores. With nopCommerce, you can characterize up to 60 properties for a solitary item, which permits you to give most extreme item data to your customers.</p> <h3 dir="ltr">2. Multi-store Supported &nbsp;&nbsp;</h3> <p dir="ltr">nopCommerce permits you to make various stores that run utilizing a solitary back-end framework and can be overseen through a solitary administrator window. Since the back-end database for every one of the stores is the same, the index information, special data and item characteristics can be shared between stores. Which is an extraordinary advantage when you are easing both B2B and B2C stores. It is likely to set separate designs for each store. The multi-store support is a helpful component for B2B advertisers who can rapidly set up smaller scale destinations for special items, also demonstrate and connect it to the primary store.</p> <h3 dir="ltr">3. Facilities of Drop-shipping</h3> <p dir="ltr">nopCommerce has multi-seller bolster which is incredible for <a href="https://www.oberlo.com/blog/why-you-should-care-about-aliexpress-dropshipping/">drop-shipping</a>.They can basically pass the request subtle elements to an enlisted merchant who ships them specifically to the client. This gives the B2B site the flexibility to work with numerous merchants and offer a substantial assortment of items on their site. Sellers can be offered access to the B2B site to deal with their items, see deals information, arrange points of interest and so forth.</p> <h3 dir="ltr">4. Search Engine Friendly platform</h3> <p dir="ltr">Web optimization is a must to rank top for any online business site. nopCommerce is internet searcher compassionate and permits web page proprietors to make redid URLs for their sites and additionally tag every item they offer with fitting catchphrases. It underpins both XML and HTML sitemaps which permit web indexes to effectively find pages inside your website. It additionally underpins social Meta labels which help extraordinarily to enhance site perceivably. It is incorporated with Google Analytics so that site proprietors can screen and enhance site execution.</p> <h3 dir="ltr">5. M-commerce Supportive Platform</h3> <p dir="ltr">This is a must have quality to be the best e-commerce platform. nopCommerce offers a straightforward, easy to understand graphical UI which you can use to make a portable variant of your site in a brief timeframe and with no extra advancement exertion. The subjects in nopCommerce are responsive which implies they will effectively conform to any gadget and screen estimate. It is anything but difficult to oversee both your versatile and online variants from a solitary administrator control. With nopCommerce, you can rapidly make your business obvious among versatile and online clients.</p> <h3 dir="ltr">6. Various payment and shipping options</h3> <p dir="ltr">nopCommerce permits you to offer your B2B customers numerous installment alternatives which can be arranged relying upon any nation's installment inclinations. It offers more than 50 installment alternatives/passages which are awesome to have included for any online business web page. Shipping inclinations can be designed according to your prerequisite. For instance, you can indicate no transportation, free sending over a specific sum, shipping rebates on specific items, etc. nopCommerce additionally permits clients to check shipping costs in view of the nation and zip or postal code which is valuable considering the way that B2B buys are for the most part in mass sums.</p> <p dir="ltr">Because of its captivating components and high moderateness, nopCommerce has been chosen by most of the successful business tycoons. The interesting subjects and natural formats, alongside a well-disposed UI, will permit you to convey a positive concern to your customers each time they visit your site. There are so many free nopCommerce themes and plugins available online as it is one of the best e-commerce platform considered.</p> <p dir="ltr">And last but not least nopCommerce is supported by fastest growing user community (see <a href="https://www.nopcommerce.com/boards/">nopcommerce forum</a>) which has increased the technical as well as an informative aspect of the solution.</p> <p dir="ltr">Today’s online shoppers prefer mobile apps over mobile websites and desktop websites. If you have Commerce website built on nopCommerce MVC and plan to build an mCommerce app for your online store, it’s time you provide your customer a nopCommerce mobile app to complete your mobile website.<a href="http://www.nop-station.com/"> nopStation</a> is a powerful eCommerce business-oriented Mobile App for any nopCommerce portal. This mobile app is integrated and specially designed in a way to sync with your nopCommerce website and provide the feel of best customer loyalty programs to adopt.It is customizable with powerful nopCommerce plugins and themes and convenient for any eCommerce needs in going Mobile.</p> <p dir="ltr">Read more: <a href="http://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-website">Why NopStation Mobile App Is The Best For nopCommerce Website</a></p> <p dir="ltr">Contact our team for any further query and services. To learn about nopStation pay a visit to our <a href="http://www.nop-station.com/">website</a></p> <p>&nbsp;</p>urn:store:1:blog:post:13https://www.nop-station.com/most-common-nopcommerce-issues-you-should-fixMost Common nopCommerce Issues You Should Fix<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/most-common-nopCommerce-issues-you-should-fix.webp" alt="Most common nopCommerce issues you should fix" width="815" height="315" /></p> <p dir="ltr"><span style="font-size: 10pt;">nopCommerce is one of the popular platform for amazingly cohesive user experience. The platform is most welcomed by the beginner retailers, merchants and large online shop owners. However, most of the business owners, starting a new journey through the online presence, go through the difficulties of choosing a perfect development platform. In order to provide convenience among the customers and developers, the owners look for the best possibilities. NopCommerce is accepted as a highly interactive online store by the most of the business owners, retailers, merchants and developers at the same time. Credibility goes to its huge collection of trendy and user-oriented features, nopCommerce plugins, themes, templates and easy-integrative custom plugins. Alongside, for any nopCommerce issues the community forums are amazingly supportive for the developers. &nbsp; &nbsp; &nbsp;&nbsp;</span></p> <p dir="ltr"><span style="font-size: 10pt;">An advantage of developing your online store using nopCommerce is the developer support. Any problem faced through the nopCommerce development journey or even while in maintenance, both retailers and developers can troubleshoot the problem with a few surfing throughout the web. Although you can easily solve these issues, but setting up a global notification area, registering a new module there are some complicated procedures requires expert knowledge of using tools for nopCommerce. Let’s talk about some of the most faced user problems with the easiest solutions.</span></p> <p dir="ltr"><span style="font-size: 10pt;">Focusing the newbies, we tried to list of a few most commonly faced nopCommerce issues in this blog. The containing solutions shared are mostly followed by our developers in the real time nopCommerce website development to create the most professional look.</span></p> <h1 dir="ltr"><span style="font-size: 10pt;">#1 Solving nopCommerce issue for not-working Index &nbsp;</span></h1> <p dir="ltr"><span style="font-size: 10pt;">Reasons behind a nonworking index can be many. If you confront this issue go through the following to solve this in no time.</span></p> <p dir="ltr"><span style="font-size: 10pt;">1. Check nopCommerce Warning page, there should not be any issue with configuration. You can open &nbsp; &nbsp; &nbsp;Warning page in administrator panel by going to System &gt; Warnings.</span></p> <p dir="ltr"><span style="font-size: 10pt;">2. Check Specified store URL matches this store URL in warning page of nopCommerce under System menu.</span></p> <p dir="ltr"><span style="font-size: 10pt;">3. Verify that you have configured Solr Core URL correctly.</span></p> <p dir="ltr"><span style="font-size: 10pt;">4. Make sure that your application can access the Solr Core. Open the required port if you’re using a remotely hosted Solr Core.</span></p> <p dir="ltr"><span style="font-size: 10pt;">5.&nbsp;Verify that you’re using correct Solr Configuration and Schema File.</span></p> <p dir="ltr"><span style="font-size: 10pt;">6. If you are still getting 404 Page Not Found / Page Not Exists in Log. It means that Solr Core you’re trying to access is not there. Make sure you’re able to access it manually.</span></p> <p dir="ltr"><span style="font-size: 10pt;">7. If You may not Restarted Application after configuring Solr Core URL and you’ve hosted Solr Core on same server, i.e. localhost and while trying to index you are getting error message as “System.Net.WebException: Unable to connect to the remote server.” or “System.Net.WebException: The remote server returned an error: (404) Not Found. at System.Net.HttpWebRequest.GetResponse()”</span></p> <p dir="ltr"><span style="font-size: 10pt;">8. You have all your other configuration correct with working Solr core that you can access on your browser. Then the issue might be with the mapping of your domain in your server. Consider adding your domain name entry to the windows hosts file to resolve it to 127.0.0.1 to fix it. Please check this and this for more details.</span></p> <h1 dir="ltr"><span style="font-size: 10pt;">#2 Fixing Plugin access difficulties on Configuration page</span></h1> <p dir="ltr"><span style="font-size: 10pt;">If after new installation or performing an update to the plugin, are not able to access plugin’s configuration page and get similar error to the following:</span></p> <p dir="ltr"><span style="font-size: 10pt;">1. Go to the controller for path '/Admin/Plugins/SolrCore/SolrAdmin/Configure' was not found or does not implement IController.</span></p> <p dir="ltr"><span style="font-size: 10pt;">2. Check that the Plugin folder has correct permissions assigned.</span></p> <p dir="ltr"><span style="font-size: 10pt;">3. Go to Systems &gt; Warnings in nopCommerce Admin Panel.</span></p> <p dir="ltr"><span style="font-size: 10pt;">4. You should not have any warning. If you are seeing a warning here, please fix all of them and try again.</span></p> <p dir="ltr"><span style="font-size: 10pt;">5. Restart application after you make changes.</span></p> <p dir="ltr"><span style="font-size: 10pt;">Coming to an end of this steps, check the website page and filter properties again to make sure your changes are active.</span></p> <h1><span style="font-size: 10pt;"># 3 Solve Home Page Redirecting Issue</span></h1> <p dir="ltr"><span style="font-size: 10pt;">After some investigation, we assigned necessary permissions to web user of this website and NETWORK SERVICE. Additionally, we enabled 32-bit application option for the application pool of nopCommerce website. Following are the steps:</span></p> <p dir="ltr"><span style="font-size: 10pt;">1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open IIS manager.</span></p> <p dir="ltr"><span style="font-size: 10pt;">2. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Locate the application Pool used by the website/application in question.</span></p> <p dir="ltr"><span style="font-size: 10pt;">3. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Right click on the application pool name, advanced settings.</span></p> <p dir="ltr"><span style="font-size: 10pt;">4. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enable 32 Bit applications option to TRUE.</span></p> <h1 dir="ltr"><span style="font-size: 10pt;"># 4 Fix Image Resize Issue in nopCommerce</span></h1> <p dir="ltr"><span style="font-size: 10pt;">You may wish to resize your product images based on your content and categories. Resizing is a default privilege in nopCommerce. However, you face issues in compressing or resizing the image in nopCommerce.</span></p> <p dir="ltr"><span style="font-size: 10pt;">The issue appears when the original image size does not divide evenly into the destination size and the remainder is &gt; 0.5. For example, when a final floating-point width of 47.8 is determined, the remainder is dropped (not rounded) and the image is resized to only 47 pixels instead of 48 leaving a white border on the right side of the image.</span></p> <p dir="ltr"><span style="font-size: 10pt;">1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Go to: ../Libraries/Nop.Services/Media/PictureService.cs</span></p> <p dir="ltr"><span style="font-size: 10pt;">2. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open "PictureService.cs" file</span></p> <p dir="ltr"><span style="font-size: 10pt;">3. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit the section:</span></p> <p dir="ltr"><strong><span style="font-size: 10pt;">case ResizeType.LongestSide:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (originalSize.Height &gt; originalSize.Width)</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// portrait</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// landscape or square</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case ResizeType.Width:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case ResizeType.Height:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">With this:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">case ResizeType.LongestSide:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (originalSize.Height &gt; originalSize.Width)</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// portrait</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = (int)Math.Round(originalSize.Width * (float)(targetSize / (float)originalSize.Height));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// landscape or square</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = (int)Math.Round(originalSize.Height * (float)(targetSize / (float)originalSize.Width));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case ResizeType.Width:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = (int)Math.Round(originalSize.Height * (float)(targetSize / (float)originalSize.Width));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case ResizeType.Height:</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Width = (int)Math.Round(originalSize.Width * (float)(targetSize / (float)originalSize.Height));</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newSize.Height = targetSize;</span></strong></p> <p dir="ltr"><strong><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</span></strong></p> <h1><span style="font-size: 10pt;"># 5 Get back the filters in nopCommerce website</span></h1> <p dir="ltr"><span style="font-size: 10pt;">There may be following issue:</span></p> <p dir="ltr"><span style="font-size: 10pt;">1. Ensure that you’ve enabled Filters from configurations.</span></p> <p dir="ltr"><span style="font-size: 10pt;">2. You may not have enabled filters widgets. For that you need to log in your nopCommerce Admin panel &gt; Content Management &gt; Widgets.</span></p> <p dir="ltr"><span style="font-size: 10pt;">3. Enable all widgets for nopCommerce plugins.</span></p> <p dir="ltr"><span style="font-size: 10pt;">4. Refresh your Catalog &amp; Search page to see change.</span></p> <p dir="ltr"><span style="font-size: 10pt;">Fixing the technical issues, you face with your nopCommerce website has never been so easy, as soon the community forum is launched. The companies, providing developer services, are trying to support the beginners to get along with the troubleshooting with their technical content. We are Brain Station 23, a team of certified nopCommerce developers are at your service for any further assistance building the best online shop for you. In addition, we bring your shop to the customer’s mobile screen with our all-in-one nopStation mobile app for your nopCommerce website. Don’t forget to read about the amazing features of our nopCommerce mobile app supporting all mobile devices.</span></p>urn:store:1:blog:post:12https://www.nop-station.com/nopcommerce-certification-announcementnopCommerce Announces Developer Certification Program<p dir="ltr"><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-announces-developer-certification-program.webp" alt="nopCommerce accounces developer certification program" width="815" height="315" /><br /></span></p> <p dir="ltr"><span style="font-size: 12pt;">nopCommerce started recognizing their promising developers around the world. Recently the organization announced to initiate the nopCommerce developer certification program. The program is focused to validate and certify the developers coming from different geo-locations and providing amazing nopCommerce platform services to their clients and the companies.</span>&nbsp;</p> <p dir="ltr"><span style="font-size: 12pt;">Among the store owners and eCommerce service providers nopCommerce is getting much more popularity than before and the platform is getting rich. With deep features and trendy nopCommerce features, the web developers are getting more interested in developing your next online store with nopCommerce. In order to get the certification from nopCommerce team, developers are asked to sit for an online exam and pass with a distinction and expertise. Certified nopCommerce developers are the official personnel can be promising consultant as well. The passing developer gets listed on certified developers page of the nopCommerce official site, gets a certificate and forum badge. &nbsp;</span></p> <p dir="ltr"><span style="font-size: 12pt;">From a developer’s point of view, the benefits of being a certified nopCommerce developer is a blessing. Apart from the nopCommerce developer guide, the platform holds a growing community of contributors. In addition to that, nopCommerce certification program validates the technical expertise in developing and maintaining applications on the nopCommerce platform.</span></p> <h4>Benefits of nopCommerce certification</h4> <p><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-skill-money.webp" alt="Turn skills into profit" width="540" height="405" /></span></p> <h4 dir="ltr">Official Skill recognition</h4> <p dir="ltr"><span style="font-size: 12pt;">Obtaining the certificate and the certified specialist badge will make you or your agency more marketable, and give you more prestige in the nopCommerce community. Certified experts will be listed in the <a href="http://www.nopcommerce.com/certifieddeveloperdirectory.aspx">certified developer’s directory</a> on the official nopCommerce site.</span></p> <h4 dir="ltr">Staying current with technologies</h4> <p dir="ltr"><span style="font-size: 12pt;">Certification is based on the latest nopCommerce version and is an excellent test of a developer's skills and knowledge.</span></p> <h4 dir="ltr">Advancing your career or your Company</h4> <p dir="ltr"><span style="font-size: 12pt;">If you are a developer, being a certified specialist, you get better opportunities on a job market, quickly advance on your existing job. If you are hiring a nopCommerce certified developer, you keep your team's skills on the top getting the experts of most popular eCommerce platform. Your customers will be happy and eventually revenue will start to grow.</span></p> <h4 dir="ltr">Attracting more clients</h4> <p dir="ltr"><span style="font-size: 12pt;">Certified specialists draw more clients and generally are more trustworthy. Obtaining the certificate is an effective way to attract clients by indicating your exceptional and officially recognized position as a nopCommerce developer.</span></p> <h4 dir="ltr">Adequate self-evaluation</h4> <p dir="ltr"><span style="font-size: 12pt;">For the developers, this nopCommerce developer certification is more than a global recognition. The certificate can boost your self-confidence as a professional and be a good ground for promotion or raise.</span></p> <h4 dir="ltr">For solution partners</h4> <p><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/developemnt-roadmap.webp" alt="" width="636" height="426" /></span></p> <p dir="ltr"><span style="font-size: 12pt;">The number of certified specialists is shown under the title of the agency on the <a href="http://www.nopcommerce.com/solutionpartners.aspx">Solution partners</a> page. This creates a platform of B2B reachability for the developers and the affiliated companies.</span></p> <h3>Recognizing the successfully certified nopCommerce Developers</h3> <p dir="ltr"><span style="font-size: 12pt;">The certification program is designed in way that lets anyone to verify the claim anytime with the following.</span></p> <ol style="list-style-type: upper-roman;"> <li dir="ltr">The nopCommerce certified developer certificate.</li> <li dir="ltr">The certified developer Badge. It is added to the developer’s profile on nopCommerce forums.</li> <li dir="ltr">There will be a mention on the official nopCommerce site on the certification directory page. You can also see the company they are associated and the country they reside.</li> </ol> <p dir="ltr"><span style="font-size: 12pt;">As one of the leading software company in eCommerce service industry, we are always concerned of the latest service platforms. In relation to that, we have our very own team of <a href="http://www.nop-station.com/nopcommerce-mvpnopstation">nopCommerce experts</a>. Our resourceful developers are providing nopCommerce website development and design services. Alongside the web application, we are providing the mobile app, namely nopStation, for different platforms based on your requirements. To give your eCommerce customers the most seamless online shopping experience, our team designs elegant nopCommerce plugins &amp; themes as well.</span></p> <h3>What are our Strengths?</h3> <p><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-mvp.webp" alt="NopCommerce MVP" width="851" height="315" /></span></p> <ol style="list-style-type: upper-roman;"> <li dir="ltr">A team Certified nopCommerce Developers to build your online</li> <li dir="ltr">Mobile platform developers to enhance your digital presence through mobile and tablet devices.</li> <li dir="ltr">Customization at every level of service.</li> </ol> <p dir="ltr"><span style="font-size: 12pt;">To learn more about our nopCommerce service and <a href="http://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-website">nopStation mobile app</a>, contact our certified developers any time. We will be more than happy to serve you with elegance.</span></p>urn:store:1:blog:post:11https://www.nop-station.com/launch-fashion-store-using-nopcommerce-mobile-appLaunch a Fashion store Using nopCommerce Mobile App<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/launch-fashion-store-using-nopCommerce-mobile-app.webp" alt="Launch fashion store using nopCommerce mobile app" width="815" height="315" />&nbsp;</p> <p dir="ltr"><span style="font-size: 12pt;">Fashion wins the latest online shopping trail, the best performing segment alone in UK and USA during 2016. There are enormous numbers of fashion brands doing business through the Internet and the market is ever increasing. The advent of the Internet changed the conventional way of doing small business and the market went high since then. If we look at the fashion industry and the technologies in use, the adoption of Mobile apps among the online fashion shoppers is pretty high.</span></p> <p dir="ltr"><span style="font-size: 12pt;">For any existing clothing brand having a website is a conventional approach to serving the remote clients apart from the physical outlet. But looking at the statistics with 63% of internet users choosing mobile over desktop or mobile web applications, we all understand the convenience of a mobile app for online business. Your customers don’t expect you to be technologically backdated than other rivals where they can get the alternative service anytime. More than 70% of online sales came from fashion retailers in the past year. Mobile users are the prominent drivers of these high numbers. A fully functional customer-oriented mobile app is capable of bringing the most revenue for your business. The obvious question that appears here is how we can leverage any mobile app to spread the business even more and increase sales. Answer is prominent on the following facts;</span></p> <p dir="ltr"><span style="font-size: 26pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/fashion-shopping.webp" alt="Fashion Shopping" width="1000" height="666" /></span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Customer Experience</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">While designing a mobile app for online shopping, making the content interactive and product to pop up is important. If your clothing store already has a website that offers online shopping services, then it’s high time you think of having a mobile app as well. Why? Well, about 65% of the online shoppers are regularly attached to any mobile or tablet devices. You don’t want these potential clients to turn around and look for alternatives because you missed appearing in the battlefield. For fashion retailers, mobile apps give the most opportunity for product representation. Modern card style and smooth navigation panel are the most popular among consumers in terms of getting maximum product update. Over that you let your customers select size, color and type through online with just a finger swipe. This enhances the overall customer experience. &nbsp;&nbsp;</span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Marketing</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">E-commerce business is based on online shoppers. Your customers feel peeved at receiving a marketing call from your retail clothing business, or receiving a marketing SMS or email; While if they chose to load any online fashion app, they might not feel so surprised if that business sends them emails or<a href="http://www.nop-station.com/how-push-notification-grow-up-your-user-engagement"> alarm notification</a> with promotions and special deals. Mobile Apps offer another line of online fashion product marketing, one that users are probably going to be more comfortable with. Your customers will always want to be the first to know about the latest fashion trends and newest product launch updates.</span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Branding</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Apps are another source of branding. Your customers download your business apps out of their own discretion. It stays on their device as long as it serves the purpose. Regular product update, modern and responsive design prioritizing on user interaction can create a positive brand image for your clothing business and online store.</span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Keeping the Business in Mind</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Considering a mobile app to handle your thousands of online shoppers and giving them a proper product view, you only have a single small mobile screen. A number of studies suggest that mobile phone users access Facebook an average of 14 times a day. With your company’s app taking up space on the same screen, that’s 14 times a day they might be reminded of your fashion store. Surely that has got to be a good thing.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/feedback.webp" alt="Feedback" width="1000" height="664" /></span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Customer Feedback</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Mobile apps benefit the fashion retailers collect their customers’ thoughts, reviews and remote business insight on services and product qualities through interactive mobile-only features. They might have complaints or suggestions about your business that can refine your strategies. A constructive review can truly represent your brand towards the newest customers and let you grow.</span></p> <p dir="ltr">&nbsp;<strong><span style="font-size: 12pt;">Loyalty Programs &amp; Easy Checkout</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">The idea of online fashion store has got enough popularity for the easy-to-adopt and interactive services offered by the retailers through the online business platform. Alongside the other popular features, smart notification and easy one-click checkout are the most recent trends. nopStation bring you the advanced push notification system. You can schedule and custom the latest product updates, occasional discounts and offers and even product details to your target clients having this app installed on their devices. Our checkout and online cart are the smartest way of collaborating your customer taking the purchase decision.</span>&nbsp;&nbsp;</p> <p dir="ltr"><strong><span style="font-size: 12pt;">Online Store Management</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Fashion changes more frequent than any other commodities in human life. Keeping up the pace of modern clothing trends with your online store and manage your business has never made so simple. Simply let your customer know about your nopStation mobile app, let them get it downloaded and installed and you collect all your customer behavior and products of interest. This streamlines the buying process for the shoppers and makes things easier in the end.</span></p> <p dir="ltr"><strong><span style="font-size: 12pt;">Online Wardrobe and Fashion Designer</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">The nopStation mobile app is designed with the most user-friendly interface that holds some value-added services as well and customizable for your own fashion brand and clothing line. The best online fashion stores successfully doing eCommerce business such as Macy’s, Topshop, Forever 21, Lyst, Polyvore, Skylight etc., out on the web have their own customized online wardrobe management services. These includes related fashion materials and accessories to make a complete outfit for the day for different seasons. Pop up feature for popular fashion trends is the best match specifically for your own concept fashion store.</span></p> <p dir="ltr"><span style="font-size: 12pt;">With the changing vibes of time, fashion brands are appearing in the market so consecutively, that sometimes it is pretty easy to miss something. Browsing each one of those websites is time-consuming in terms of choosing perfect size, style, pattern, etc. That is why eCommerce aggregators and retailers are turning towards the easiest means of doing business targeting the largest client groups at a time. It is not only convenient enough for the shoppers to have everything in one place but also, it increases sales for sellers. Therefore, a mobile app is a must have for any small and large fashion store of today’s time.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>nopCommerce Mobile App for Fashion Stores</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">If your online store already has a website built on a nopCommerce platform, you are lucky there since we’ve got your back. We bring you the nopCommerce based mobile app, nopStation for your online fashion store. You must be thinking by now why choose nopStation than other nopCommerce mobile apps. We ask you to read the further of this article and you’ll be able to decide all by yourself.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/mobile-fashion-shopping.webp" alt="Fashion shopping with nopCommerce mobile experince" width="377" height="650" /></span></p> <p dir="ltr"><span style="font-size: 12pt;">We offer the most customizable <a href="http://www.nop-station.com">nopStation mobile app</a>&nbsp;for any nopCommerce based website. If you want to learn what’s more in the <a href="http://www.nop-station.com/bsmegamenu-a-nopstation-plugin-that-shows-your-products-in-a-more-organized-way">package</a>, just have a quick surf through our nopCommerce mobile app features. Contact our team for the pricing and further details because we will be more than happy to assist you growing an online business.</span></p>urn:store:1:blog:post:10https://www.nop-station.com/how-push-notification-grow-up-your-user-engagementHow Push Notification Can Grow Up Your User Engagement<p dir="ltr" style="text-align: center;"><span style="font-size: 11pt;"><img src="/images/uploaded/Blog/push-notifications-to-increase-user-engagement.webp" alt="Using push notifications to increase user engagement" width="828" height="315" /></span></p> <p dir="ltr" style="text-align: left;"><span style="font-size: 11pt;">Do you remember the days when all information about your promotion campaigns or new season arrivals is sent via emails and wait for customers to open it? Those days are no more to cherish for today while we receive over countless push notifications on a single day even though we don’t expect. It's not just a message delivery channel, it’s a powerful marketing tactic to boost your customer reach and increase brand awareness.</span></p> <h3><strong>Personalized notification leading 25% more click-throughs:</strong></h3> <p dir="ltr"><span style="font-size: 12pt;">Research shows that sending relative notifications to your customers increases the rate of click-throughs up to 25%. It is truly a new and complementary communication channel to get closer to your customers especially the targeted loyal groups.</span></p> <h3><strong>Why do people use push notifications?</strong></h3> <p dir="ltr"><span style="font-size: 12pt;">Want to know if someone scored on your Fantasy Football team? Worried about traffic? Looking for the latest trend of fashion? Here the push notification comes to save the money and time of your users. So why don't they click if you send them their relative news of interest? Your subscription to the above service providers will simply the hassle from your side and you’ll get the most updated offerings and product information by the time you need it without being asking every time.</span></p> <h3 dir="ltr"><strong><span style="font-size: 11pt;">For businesses, push notifications offer a wealth of benefits:</span></strong></h3> <p><span style="font-size: 12pt;">-Share deals and promotions instantly</span></p> <p><span style="font-size: 12pt;">-Improve customer communication without impacting your schedule</span></p> <p><span style="font-size: 12pt;">-Automate internal processes</span></p> <p><span style="font-size: 12pt;">-Increased visibility by establishing a mobile presence</span></p> <p><span style="font-size: 12pt;"><strong>How do I send them?</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">There is the part where your app needs a developer who will provide you an interface for crafting and sending push notifications. But some mCommerce apps make that task so easy for you!! You don't have to code or need to hire a developer. You just have to target the right person with the right messaging rather than bombard everyone with the same tired, generalized campaigns. Users are more likely to appreciate what you push when they recognize personalization.</span></p> <h3><strong>How do push notifications appear?</strong></h3> <p dir="ltr"><span style="font-size: 12pt;">Basically, both operating systems have banner notifications that pop up at the top of the screen when the device is in use, as well as a notification center that users can access by swiping downward. iOS users enjoy a bit more control as they can customize individual app notifications, from sounds and vibrations to notification type (banner, alert, badge app icon). Overall push notifications are highly personalizable to craft the better user experience.</span></p> <h3><strong>Why you need push notification for your eCommerce mobile app?</strong>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</h3> <blockquote> <p dir="ltr"><span style="font-size: 11pt;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<strong><em> &nbsp; In 2015, push notifications were a game changer</em></strong></span></p> </blockquote> <p dir="ltr"><span style="font-size: 12pt;">Studies show that push notifications have exceeded emails with more than 50% higher open rate &amp; click rate. Having analyzed that, approximately 97% of users open and read notifications. Push notifications also increase engagement with your app and improve user retention rates. Thus, not only they help to drive activity on the topic of your message, also help to increase the revenue you see from your app. Push notifications serve double duty and offer a number of benefits at once. The return on investment here is absolutely staggering for a small business. So why don't you take the advantage of this amazing trend with the least effort?</span></p> <p><span style="font-size: 11pt;"><img src="/images/uploaded/Blog/push-notifications-example.webp" alt="push notification example" width="1000" height="494" /></span></p> <h3><span style="font-size: 11pt;"><strong><span style="font-size: 12pt;">What best practices should I follow?</span></strong></span></h3> <p dir="ltr"><span style="font-size: 12pt;">To grow ahead of other competitors, you simply apply some smart business tactics in the way of adopting push notifications. There are some basic rules for sending push notifications:</span></p> <h3 dir="ltr"><strong><span style="font-size: 11pt;">1. Know your app = Know your user</span></strong></h3> <p dir="ltr"><span style="font-size: 12pt;">You need to know about the target users. If you send a vagitarian person to a meaty cheesy buy one get one free pizza offer, no doubt that they ended up with uninstall your app from their device. So, do a lot of research before you send any push notification.</span></p> <h3 dir="ltr"><strong><span style="font-size: 11pt;">2. How much is too much?</span></strong></h3> <p dir="ltr"><span style="font-size: 12pt;">Often a push depends on a lot of factors because just like in real-life, no-one likes being told the same thing again and again. If you have a push that says the same thing all the time, you can get a lot of description and lose the loyal customers.</span></p> <p dir="ltr"><span style="font-size: 12pt;">Here are some quick guidelines by type of app:</span></p> <ol> <li dir="ltr"><strong>Games:</strong> <span style="font-size: 12pt;">Once a day or less. The most important thing to decide upon here is the time that you send your push. Do players usually play at lunch? The end of the day? Remember, don't overdo it!</span></li> <li dir="ltr"><strong>News apps:</strong> <span style="font-size: 12pt;">3-4 times a day, depending on the news and the relevance to your core editorial line/ audience.</span></li> <li dir="ltr"><strong>Fitness apps:</strong><span style="font-size: 12pt;"> 3-4 times a week. Here the quantity of push notifications you send depends on the type of fitness your app proposes. If you're proposing a daily fitness program then daily reminders are acceptable but as a rule, no-one likes to be nagged especially when it comes to exercise.</span></li> </ol> <h3 dir="ltr"><strong><span style="font-size: 11pt;">3. Timing is everything</span></strong></h3> <p dir="ltr"><span style="font-size: 12pt;">Always target your push notifications by time zone, because no-one likes being woken up at 6 in the morning, however, funny, creative or brilliant the push is. Sending a well-timed push can make a huge difference to your users’ experience and the success of your app. So timing is one the most important person you should take care off!!</span></p> <p><strong><span style="font-size: 11pt;">5. Benchmark</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">By benchmarking, you are able to compare and contrast your push with that of your competitors.Try Batch Insights’ Analyze function for a more in-depth look.</span></p> <p><strong><span style="font-size: 11pt;">6. Push notification length:</span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Remember to keep push notifications short and to the point. This will make your notification instantly readable by the user. As a rule of thumb:</span></p> <p dir="ltr"><span style="font-size: 12pt;">-60-90 characters for Android.</span></p> <p dir="ltr"><span style="font-size: 12pt;">-No more than 120 characters for iOS</span></p> <p dir="ltr"><span style="font-size: 12pt;">This way your push notification will appear in its entirety.</span></p> <p dir="ltr"><span style="font-size: 11pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/push-notifications-ios.webp" alt="push notifications on iOS" width="702" height="373" /></span></p> <p dir="ltr"><span style="font-size: 12pt;">Right away you know a lot about push notifications! Now you have to find out which mCommerce app gives you all these facilities to customize your push notifications. <a href="http://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-website">NopStation </a>comes with highly customizable push notification features. Based on your eCommerce business needs and <a href="http://www.nop-station.com/what-is-nopcommerce">nopCommerce based website</a>&nbsp;design, you can customize notification and product updates for your customers. Scheduled notification, product feature updates, similar product lists, the special day offers with text greetings are highly demanded features for your eCommerce mobile app.</span></p> <p dir="ltr"><span style="font-size: 12pt;">Contact our team for any further query and services. To learn about nopStation, pay a visit to our <a href="http://www.nop-station.com/">website</a>.</span></p>urn:store:1:blog:post:9https://www.nop-station.com/why-nopstation-mobile-app-is-the-best-for-nopcommerce-websiteWhy NopStation Mobile App Is The Best For nopCommerce Website<p><span style="font-size: 12pt;">Today’s online shoppers prefer mobile apps over mobile websites and desktop websites. If you have a Commerce website built on nopCommerce MVC and plan to build an eCommerce app for your online store, it’s time you provide your customer a mobile app to complete your mobile website.</span></p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-mobile-app-overview.webp" alt="An overview of nopStation's mobile apps" width="638" height="359" /></p> <p dir="ltr"><span style="font-size: 12pt;">With emerging popularity for being reliably fast and secure eCommerce platform, nopCommerce claimed a highly notable <a href="http://www.nop-station.com/nopcommerce-mvpnopstation">people’s choice and other CMS awards</a>&nbsp;back in 2016. Since the backend is based on.NET MVC, the nopCommerce developers find the platform most convenient for any eCommerce web application. The most important feature of the platform is the nopCommerce web API integration for mobile based applications. As the most of today’s online shoppers choose any mobile devices twice over a desktop browser, having a Mobile App for your nopCommerce website appears to be more user oriented than before. Now if you are thinking about one of the best Mobile App solutions for your nopCommerce website to add a dimension to your business, nopStation is there to satisfy all your business needs.</span></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation is a powerful eCommerce business-oriented Mobile App for any nopCommerce portal. It is customizable with powerful plugins and convenient for any eCommerce needs in going Mobile. Following provides the deep insights of what nopStation has in store for your nopCommerce based business website:</span></p> <p><span style="font-size: 12pt;"><strong>Native Features Everywhere</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">Since your customers can be favored with diverse mobile device and platforms, nopStation developers have a diverse solution as well. The nopStation mobile app is available both on AppStore and Google Play for all compatible mobile devices. Our native app features will give you the latest version your eCommerce mobile application that complies your customers’ mobile devices. &nbsp;This offers your customer the fastest, most reliable and most responsive experience to your customers.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Powerful Plugins</strong></span></p> <p dir="ltr"><strong><span style="font-size: 11pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-plugins-example.webp" alt="Some of nopStation's plugins" width="1000" height="318" /></span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation comes with free<strong><a href="http://www.nop-station.com/bsmegamenu-a-nopstation-plugin-that-shows-your-products-in-a-more-organized-way"> plugins</a></strong> by default to integrate with your eCommerce site including Quick view plugin, will help your store user to view the detail in a popup without redirecting the page, and Like Product Plugin, you can see the most liked products by your customers from admin panel. To empower your nopStation mobile app, developers can provide you with customizable on demand plugins to best-suited to your nopCommerce website. Our company charges lower than the most other providers with the best service assurance you can get.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Go Mobile in just 1 DAY!</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">Once you decide to have a mobile app for your eCommerce website already hosted using the nopCommerce platform, all you need is to approach talented nopStation developers with your needs. Our dedicated team will serve you the full featured nopCommerce mobile app for your e-business just within 1 Day (24h) span! We prioritize your needs and understand our service values; therefore, we provide you the fastest and most standard service for your business to Go Mobile!</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Easy Navigation</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">You don’t expect your customers to be experience and tech savvy, yet you want the most advanced and desired features in your eCommerce mobile app. We can develop your eCommerce Mobile App with easy navigation panels. Our product is designed by the reliable UX/UI designers to make your eCommerce Mobile App appear more user-friendly with a modern outlook. Hidden navigation panel is the most popular in current days and we adopted that in our nopStation mobile API. &nbsp;</span></p> <p><span style="font-size: 12pt;"><strong>Push Notification</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation comes with highly customizable push notification feature. Based on your eCommerce business needs and nopCommerce based website design you can customize notification and product updates for your customer in the way you need. Scheduled notification, product feature updates, similar product lists, the special day offers with text greetings are highly demanded features for your eCommerce mobile app.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Banner Slider</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">We understand that impressive mobile app look will keep your customer more into your app. Our nopStation mobile app solution in designed with features that let you upload, customize and show a series of amazing product images, special offer promotions and branding campaigns for your e-business.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Category Menu and Customizable Page</strong></span></p> <p dir="ltr"><strong><span style="font-size: 11pt;"><img src="/images/uploaded/Blog/category-and-menu-customization.webp" alt="Category and menu customization options" width="1000" height="500" /></span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">To meet your diverse range of product listing feature needs, we introduced category menu and customizable category page while designing nopStation mobile app. Your customers will easily find out the product they want from the selected category menus or even go to the category page to select from all the available product range those appear below.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Product Details</strong></span></p> <p dir="ltr"><strong><span style="font-size: 11pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/mobile-app-product-category.webp" alt="Mobile App product category" width="638" height="359" /></span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">We understand you want to approach your customer with the best product attire and we hear you. Our popup product details integrated with your nopStation mobile solution will allow your customers sneak into the item description before taking purchase decision. This helps your e-business getting much customer trust and creates brand loyalty.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Shopping Cart</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation Shopping Cart is synchronizable with your nopCommerce online store shopping cart. Therefore, your customers never lose their preferred items added into the cart previously and you never disappoint them your nopStation mobile app service. Your customer gets the best shopping experience throughout the different channels.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Create and Manage User Profiles</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation provides user database management features. With authenticated user credentials, your customer can register, create and manage their shopping profile using your nopStation mobile app. Your customer can get an insight of their purchase history and loyalty services provided to them as well, using our nopStation mobile solution customized for your business needs.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Manageable Wish List</strong></span></p> <p dir="ltr"><strong><span style="font-size: 11pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/mobile-app-wishlist.webp" alt="Mobile App wishlist" width="638" height="359" /></span></strong></p> <p dir="ltr"><span style="font-size: 12pt;">Using nopStation eCommerce mobile app your customers will be able to add/remove and manage the products they want to purchase, on a wishlist anytime. This feature functions as a popup reminder for your customers. Customer wish list in our nopStation mobile app will provide you more customer insight and later assist you analyzing customer behavior and their shopping experience and let you step ahead with perspective marketing strategies.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Hybrid Checkout</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">nopStation provides hybrid checkout for your nopCommerce website. Your customers will find enhanced WebView features during checkout for their transaction comfort. This makes your mobile app easy to use for your customers with all the comfort they want throughout their online shopping experience.</span></p> <p dir="ltr"><span style="font-size: 12pt;"><strong>Secured Payment Gateway</strong></span></p> <p dir="ltr"><span style="font-size: 12pt;">To keep the easiest and most secure transaction channel between you and your customers, the nopStation mobile app supports one mouse click payment process viable with multiple payment gateways.</span></p> <blockquote> <p dir="ltr">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-size: 10pt;">&nbsp; &nbsp;<span style="font-size: 11pt;"><strong>With nopStation, you carry your brand to mobile</strong></span></span></p> </blockquote> <p dir="ltr"><span style="font-size: 12pt;">Our unique and on-demand features, customization will change your eCommerce business experience online. Also, you change your customer shopping experience introducing a fully functional eCommerce Mobile App using nopStation.</span></p> <p dir="ltr"><span style="font-size: 12pt;">Contact our team for any further query and services. To learn about <strong><a href="http://www.nop-station.com/">nopStation</a></strong>&nbsp;pay a visit to our website.</span></p>urn:store:1:blog:post:8https://www.nop-station.com/bsmegamenu-a-nopstation-plugin-that-shows-your-products-in-a-more-organized-way"BSmegamenu”, a Nopstation plugin that shows your products in a more organized way<p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/bs-mega-menu-plugin.webp" alt="BS mega menu plugin from nopStation" width="699" height="259" /></p> <p dir="ltr"><strong>What is a “Mega Menu”?</strong></p> <p dir="ltr">A mega menu is typically defined as a drop down interface that is triggered by the user hovering over a link or defined area. This drop-down usually shows all options in one main, mega-panel and oftentimes groups related topics into categories.</p> <p dir="ltr"><strong>What is BSmegamenu plugin?</strong></p> <p dir="ltr">This plugin is for <a href="http://www.nop-station.com/what-is-nopcommerce">nopCommerce</a>&nbsp;store owner. Anyone who are using nopCommerce can get a mega menu just installing our plugin. This plugin is a piece of software that acts as an add-on to a nopCommerce store and gives the store additional functionality. It can allow a nopCommerce store to display additional content it was not originally designed to display.</p> <p dir="ltr">&nbsp;See Our Top Level Themes:&nbsp;<a href="http://www.nop-station.com/success-story-of-two-free-themes-noproot-e-shoppers">Theme Success Story | NOPROOT &amp; E-SHOPPERS</a></p> <p dir="ltr">Unlike others, <a href="http://www.nop-station.com/mega-menu">BSmegamenu plugin</a>&nbsp;offers an absolute level of customization, with great flexibility, you decide how your products looks and performs on the website. It’s save time because of user friendliness. Besides its cost effective as it’s a free plugin which creates more scope for engagement with the customers.</p> <p dir="ltr">It offers a complete package that connects: Sales, Marketing &amp; Support together.</p> <p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/BS-mega-menu-plugin-list.webp" alt="BS mega menu plugin in the plugin list" width="736" height="374" /></p> <p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/BS-mega-menu-plugin-config.webp" alt="Configuration for BS mega menu plugin" width="783" height="379" /></p> <p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/BS-mega-menu-product-page.webp" alt="BS mega menu plugin on public store" width="740" height="378" /></p> <p dir="ltr"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/BS-mega-menu-code-snippet.webp" alt="Code snippet from BS mega menu source code" width="729" height="384" /></p> <p dir="ltr"><strong>How does BSmegamenu generate sales?</strong></p> <p dir="ltr">BSmegamenu is an absolutely free &amp; a powerful plugin which helps store owners create a better look and professional menu easily without technical knowledge. Customers can view and access products and categories just by hovering over the menu. With this plugin, you are able to create menu using changes like set the widgets zone, manufactured item in configuration option to update it successfully. Besides, the style of the menu can be customized to fit with brand guidelines. What's fancy? Mega Menu ensures your site running normally but not being slower like other extensions.</p> <p dir="ltr">Do you know how long customers stay on web pages? Surprisingly, it’s only 10-20s on average whereas you have a variety of products and categories to show. So as not to let customers leave soon, tell them the shortest way to what they are looking for. BSmegamenu extension is your solution to create the great sitemap right on the main navigation. No technical knowledge required! You can flexibly set up your wanted menu with different content showing-off. &nbsp;One more thing, you don’t need to worry about running a site with “turtle speed”. BSMegaMenu plugin doesn’t affect your site speed for sure.</p> <p dir="ltr"><strong>Features of BSmegamenu:</strong></p> <p dir="ltr">It shows products on the page like-</p> <ul> <li dir="ltr">1st level category products.</li> <li dir="ltr">2nd level category products.</li> <li dir="ltr">3rd level category of the products.</li> <li dir="ltr">Show images of the products category.</li> <li dir="ltr">Show featured products.</li> <li dir="ltr">Show manufactured items according to the number given in the configuration.</li> </ul> <p dir="ltr"><strong>Your site could be best beneficial with BSmegamenu if:</strong></p> <ul> <li dir="ltr">Your site manages a large number of products like big <a href="https://en.wikipedia.org/wiki/E-commerce">e-commerce</a>.</li> <li dir="ltr">You publish and manage a vast amount of content.</li> </ul> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/BS-mega-menu-public-store-view.webp" alt="Fully configured BS mega menu on nopCommerce public store page" width="724" height="370" /></p> <p dir="ltr">&nbsp;</p> <p dir="ltr">To download this BSmegamenu plugin here are the web page link <a href="http://www.nop-station.com/mega-menu">http://www.nop-station.com/mega-menu</a> where you could find “Bsmegamenu” plugin, documentation &amp; You can see on Youtube to configure it.</p> <p><iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/2xYURZFfMwA?list=PL5MXc2E40Bhdu11XYhnZsd_6otGUnqKY0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>&nbsp;</p>urn:store:1:blog:post:7https://www.nop-station.com/success-story-of-two-free-themes-noproot-e-shoppersTheme Success Story | NOPROOT & E-SHOPPERS<p><a href="http://www.nop-station.com/success-story-of-two-free-themes-noproot-e-shoppers"> <img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-theme-success-story-noproot-eshopper.webp" alt="Sucess story of noStation's E-Shopper &amp; Nop Root Themes" width="721" height="267" /> </a></p> <p>NopRoot &amp; E-shoppers are two free open source theme designed by Brainstation-23 using TwitterBootstrap for the NopCommerce community, and they will be open source for all future releases. Currently, these two themes are the most downloaded items in the nopCommerce community, that you can get out of the download numbers. Also is the indicator of these two free items.</p> <h3 style="text-align: center;"><a href="https://www.nop-station.com/nopstation-noproot-theme">NopRoot</a>&nbsp;- (18082 Downloads)</h3> <h3 style="text-align: center;"><a href="https://www.nop-station.com/nopstation-eshopper-theme">EShopper</a>&nbsp;- (22466 Downloads)</h3> <h5>These two themes all these versions of <a href="http://www.nopcommerce.com/">nopCommerce</a>- nopCommerce 3.30 , nopCommerce 3.40 , nopCommerce 3.50 , nopCommerce 3.60 and nopCommerce 3.70. Also, these two themes are highest downloaded items in nopCommerce Community.</h5> <p>Even before <a href="http://www.nop-station.com/">nopStation</a>&nbsp;happened, few of our developers were so interested in the nopCommerce platform that they started working with their passion for developing. As nopCommerce is an open source software for eCommerce, therefore the developers find the platform very exciting as there are many scopes for improvements. In that time TwitterBootstrap had become very popular as a CSS framework, but nopCommerce had no theme based on it. Our developers saw an opportunity here and started to build the nopRoot as open source nopCommerce theme using TwitterBootstrap in their free time. Just after the first month, nopRoot got 1k download and which lead the team Brain Station to release Eshopper, another free theme for the community shortly after nopRoot.</p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nop-root-theme.webp" alt="nopStation's Nop Root theme" width="702" height="260" /></p> <p>Initially, there was no business expectation out of the developed items, and the themes were created to help people out. But eventually, it turned out that the items are getting good responses &amp; was drawing more people towards us who needed help with the platform. The developers who built the theme were also the active participants in nopCommerce forum. Therefore, people demanded custom solutions if we can provide them with that.</p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/eshopper-theme.webp" alt="nopStation's E-Shopper theme" width="708" height="262" /></p> <p>Even before nopStation, we were working on an eCommerce project with one of our US clients. Then after nopRoot &amp; Eshopper we get our Turkish Client and get our horizon widened up with eCommerce service providing.</p> <p>We worked on customization for our very first client, and that lead to our other customers who were looking for customization as well. One &amp; a half year back, we started working on our mobile app development &amp; within a year of work we were up with our mobile app for eCommerce stores in both iOS &amp; Android Platform.</p> <p>We started with free themes which lead to our today's’ nopStation. nopStation started its journey in 2011 and till today growing under Brain Station -23 as a sister concern. The team now got almost 15 people along with the certified developers, manager &amp; marketing people. Hopefully, within 2017, we’ll be able to establish us like a million dollar making company.</p> <p>&nbsp;</p> <h4>Let me run you through the following details of our themes-</h4> <h5>Author</h5> <p>BrainStation-23</p> <h5>Suitable for</h5> <p>Computer, dress, shoe as well as for any other kind of store</p> <h5>Supported versions</h5> <p>nopCommerce 3.30, nopCommerce 3.40, nopCommerce 3.50,nopCommerce 3.60</p> <h5>Supported browsers</h5> <p>This theme is created using <a href="http://getbootstrap.com/">Twitter Bootstrap</a>. It will support all the browsers which are backed by Twitter Bootstrap.</p> <p>&nbsp;</p> <h4>What is included and not included?</h4> <h5>Responsive design</h5> <p>Responsive web design is a web design approach aimed at crafting sites to provide an optimal viewing experience—easy reading and navigation with a minimum of resizing, panning, and scrolling—across a wide range of devices (from mobile phones to desktop computer monitors). <br />Responsive design is supported only in nopCommerce 3.10 (and above)</p> <p>We used Twitter Bootstrap to create this theme but not give any extra effort to make it responsive. Anyone can make it responsive using Twitter Bootstrap quickly. We have the plan to make it responsive in the next release. In the same time, if someone from NopCommerce community can release a responsive theme using our theme that would be great for the community.</p> <h5>Upgrades</h5> <p>We have the plan to improve it and release newer version time to time. Once again we want to say that it is our open source contribution for the NopCommerce community and it will open origin in every future release.</p> <h5>PSD designs and Source Code</h5> <p>The theme can be further customized according to your requirements as all original files are included.</p> <p>We designed this theme without any PSD. We tried to use Bootstrap default layout, and in some cases, we took snippets from <a href="http://bootsnipp.com/">Bootsnipp</a>.</p> <h5>Developed using best nopCommerce practices</h5> <p>We tried our best to use best nopCommerce practices. If we failed in some cases, feel free to suggest us. We will follow your suggestion and apply those in the next release. Once again we want to say that you can change this theme as you like because it is open source and it will be open source.</p> <h5>Fully localizable</h5> <p>We have worked only design area. So it is localizable like other NopCommerce Themes.</p> <p>Dropdown CSS menu, sliders, etc <br />Please note that distinct versions could have slightly modified UI elements.<br />We used default bootstrap dropdown and default NopCommerce sliders in our theme.</p> <h5>Sample data included</h5> <p>We have used default sample data from NopCommerce for this theme</p> <h5>Theme Color Scheme</h5> <p>We have added three color scheme red, blue and green for this theme to match with your branding best.</p> <h5>RTL (Right-To-Left) support</h5> <p>Special thanks to <a href="http://www.nopcommerce.com/profile.aspx?userid=49386">Hezy Ziv</a>&nbsp;for implementing RTL support in our theme.&nbsp;</p>urn:store:1:blog:post:6https://www.nop-station.com/nopcommerce-seminar-nopstationnopCommerce Seminar<p style="text-align: center;"><a href="http://www.nop-station.com/nopcommerce-seminar-nopstation"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-seminar-bangladesh.webp" alt="nopCommerce Seminar in Bangladesh 2016" width="733" height="271" /></a></p> <h2 style="text-align: center;">nopCommerce Seminar in Bangladesh May, 2015</h2> <blockquote> <p style="text-align: center;">Being a dedicated nopCommerce solution provider in Bangladesh, nopStation keeps arranging small &amp; medium seminars on nopCommerce platform &amp; services. On 27th May 2015 nopStation organized a seminar of such. The seminar was a meetup for experienced &amp; talented developers from the top IT &amp; Software companies of Bangladesh, who are very interested in open source eCommerce platform. The panel addressed key issues involved in nopCommerce Platform and especially on eCommerce knowledge, skills, and perspectives to succeed in an increasingly global society. The seminar was conducted by Razib Mahmud, Co-Founder of nopStation who is also a certified developer of nopCommerce.</p> </blockquote> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-seminar-conducted.webp" alt="" width="710" height="263" /></p> <p style="text-align: left;">In the seminar, the panelist talked about the benefits of open source software&nbsp;and talked about the advantages of choosing nopCommerce as an eCommerce software platform. Which are-</p> <p>1.The product is being constantly improved by thousands of developers all across the world. 2. A user can clearly see “what’s in the trunk” and can adapt the product according to his or her needs anytime.</p> <p>Find out more from the <a href="https://www.youtube.com/watch?v=iKgay83zctU&amp;list=PL5MXc2E40BhdIWS7vLs-gXfgiEzK2rUxp">video</a>.&nbsp;</p> <blockquote> <p style="text-align: center;">We all know, open source does not always mean free and there are many paid open source solutions and so-called “freemium” products. Which actually act as gateways to paid versions.Then some platforms come for free but have growing hidden fees like payment percentage, paid bandwidth, and cancellation fees. Above all, the chosen plans tend to grow when the number of orders or revenue of your web-store increases. Therefore people frequently get something unexpected in their bills at the end of the month.</p> </blockquote> <p>But it’s a relief that, nopCommerce is both free and open source. The only fee they charge is for removing “powered by nopCommerce” notice from the footer section.</p> <p>Now you can easily choose an open source platform by going through these particular points-</p> <p>Stability: Is the CMS stable? Will it last for the longer terms? Support: Can I get the needed help? Cost: What’s it going to cost me? Flexibility: How flexible is the platform? Can I move it, change it, or tweak it? Security: Will my sensitive items be safe?</p> <p>&nbsp;</p> <h3>Stability</h3> <p>Since 2008 nopCommerce is growing and growing stronger in eCommerce platform competition. At this moment the platform is powering more than 27.000 sites all over the world and aims for more exposure. nopCommerce is developing steadily and got new version released with half a year. The system was initially developed in ASP.NET stack and since then they are closely following Microsoft trends. Yet the nopCommerce team is well-aware that new technologies must be compatible with all old components.</p> <h3>Support</h3> <p>nopCommerce got two means of support, paid premium support in two languages, and free support from the product team and community from the forum. The premium support can be purchased separately and also includes in a Gold Solution partnership. As for the forum support, the forum is quite active with 1,700 new forum posts and 400 new topics per month. nopCommerce also runs its own developer certification program where people get a warranty of hiring qualified persons even for small projects. An annual conference called nopCommerce Days is also there since 2015, where partners and store owners from all over the world gathered in order to exchange new ideas and support each other. Now, the platform is far more than stable &amp; rapidly developing and conquering new grounds.</p> <h3>Security</h3> <p>An eCommerce platform must be secure both from external attacks as well as guaranteed internal confidentiality, i.e. it must not store or collect shop-owners’ data or any confidential items. Concerning the first point, nopCommerce has a free security patch for the community in case of any threat. Concerning the second point, nopCommerce, being a hosted solution, technically does not keep access to platform’s merchants’ sensitive data like revenue and personal information.</p> <h3>Flexibility</h3> <p>nopCommerce is a very flexible and out of the box solution. It suits small businesses, yet store owners are privileged to have an access to the whole functionality close to enterprise shopping cart for free. Which means they can manage the advanced catalog with no limits on a number of products and their attributes, apply different inventory methods, use a great variety of promotional tools like cross-marketing and tier prices, adjust local tax settings and much more. To get upgrade to an advanced functionality and a simplified mode, it only requires to flick the “basic” and “advanced” switch. So even if you are just a beginner in eCommerce or already managing a million-a-day visitors store, you can adapt all nopCommerce features according to your store needs.</p> <h3>Price</h3> <p>nopCommerce is free itself, but the price of running a store is also comprised of platform implementation prices and the price of plugins and themes you want to use. Nevertheless, if one checks nopCommerce marketplace and compares the prices with those of other popular eCommerce platforms, s/he would notice that nopCommerce can boast of generally lower prices on plugins and same prices for graphic themes.</p> <blockquote> <p style="text-align: center;">And along with these points if an ecommerce platform stands still then you can choose the platform without any hesitation and nopCommerce serves in all these criteria that requires to be the best platform for eCommerce. So without any doubt the platform is one of the best for any eCommerce business.&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> </blockquote> <p><iframe src="https://www.youtube.com/embed/iKgay83zctU?list=PL5MXc2E40BhdIWS7vLs-gXfgiEzK2rUxp" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>urn:store:1:blog:post:5https://www.nop-station.com/nopcommerce-mvpnopstationnopCommerce MVP<p style="text-align: center;"><a href="http://www.nop-station.com/nopcommerce-mvpnopstation"><img src="/images/uploaded/Blog/nopCommerce-mvp-banner.webp" alt="nopCommerce MVP achivement" width="738" height="273" /></a></p> <p style="text-align: center;"><strong>The nopCommerce Most Valuable Person (MVP) is nopCommerce’s way of saying thank you to exceptional, independent community leaders who share their passion, technical expertise, and real-world knowledge on nopCommerce with others.</strong></p> <p><br />Now those who don’t know <a href="http://www.nop-station.com/what-is-nopcommerce" target="nopStation">what is nopCommerce?</a>&nbsp;For them, it’s an open source eCommerce software solution which is built on ASP.net &amp; has strong PHP base as well. Also nopCommerce provides fully customizable shopping cart facility &amp; helps store owners with more advantage and facility than any other eCommerce software available.</p> <p>Nowadays e-commerce business involves buying and selling of goods and services which requires transmission of funds or data, over an electronic network, primarily on the Internet. And all these transactions occur either B2B, B2C, C2C or C2B businesses. Thus the platforms for ecommerce needed to be single as well as unified. Accounting, POS, inventory and order management, marketing, merchandising, customer service and financials on a cloud-based platform all should be unified on an ecommerce platform.</p> <h2><br /><span style="font-size: 26pt;"><strong>nopCommerce as Ecommerce Platform</strong></span></h2> <p>To serve the ecommerce community different platforms have been invented in the past couple of years. And among these platforms nopCommerce is the only prominent ecommerce platform which helps the community for free. The platform is open source &amp; anyone can download it &amp; then can work with the platform customarily with their own requirements. nopCommerce help people using their platform with their full proof documentation &amp; community forum. Additionally, nopCommerce got premium support as well. Any question whether big or small, asked in the community forum got answered as soon as possible. The MVPs &amp; the certified developers are the ones who does answer all the questions in the community forum. Thus people get the expert solution all the time.</p> <p><br />Check out this year’s nopCommerce Days 2016 story on&nbsp;<a href="http://nop-station.com/nopcommerce-days-2016-nopstation" target="_blank" rel="noopener">NopCommerce Days 2016 At&nbsp;Netherlands</a></p> <h2><span style="font-size: 26pt;"><strong>The Process of Becoming nopMVP</strong></span></h2> <p>The MVPs are the people who got selected by the nopCommerce team through their yearly performance &amp; presence in the community forum. Let me give you one of our MVP’s statement &amp; story of how he became nop MVP in 2016.<br /><br /></p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-MVP-Minul-Islam-Sohel.webp" alt="nopStation's Minul Islam Sohel is a nopCommerce MVP" width="738" height="273" /></p> <blockquote> <p>“Becoming nopcommerce MVP is undoubtedly prestigious. But for&nbsp;that, you really need to have the mentality for helping people out. If you want to help people with any sort of problem &amp;&nbsp;<a href="http://www.nopcommerce.com/boards/" target="_blank" rel="nofollow noopener">want to help people in nopcommerce forum</a>, then you are on the track for becoming MVP. You can help people out through nopCommerce forum also can help people outside the forum through blogs and other media.&nbsp;<br />If you are very serious about becoming an MVP then you need to set a goal to help people in nopcommerce community forum first. For that, when you have free time, you have to share your helpful posts &amp; have to answer the questions that will help people with their problem in the community forum. In this way you can also learn the whole infrastructure of nopcommerce. <br />For awarding you with a MVP tag, I think admin see your points and your help posts in the community. You can thus increase you points by giving post and replying comments on another person's post. <br />You can also upload free plugin to nopcommerce forum to gain some points.</p> <p>But one thing you must remember, solving people’s problems, might not get you the MVP tag as quality &amp; quantity of your responses will be judged as well. But one thing for sure you will learn a lot from helping others.”</p> </blockquote> <p>In nopStation we have two <a href="http://www.nopcommerce.com/mvp.aspx" target="_blank" rel="nofollow noopener">nop MVPs</a>.</p> <p><strong>Our 1st MVP, Md. Minul Islam Sohel</strong><br />Started his career as a Software Engineer at <a href="brainstation-23.com" target="_blank" rel="noopener">BrainStation-23</a>. He has skills in .NET technologies, developed multiple e-commerce web applications and migrated other platforms into nopCommerce. He is a big nopCommerce fan and he loves to keep himself updated with the latest technologies.</p> <p><br /><strong>Our youngest MVP, Anik Saha</strong><br />Started his career as Mobile Application Developer in 2013. Since then he has been working on different technologies. Now he is working on the Asp.net Mvc5 application and have developed multiple eCommerce web application and API using Asp.net Mvc5, Wep Api 2 and nopCommerce. He is also a big fan of nopCommerce and a true enthusiast to learn new technologies. Currently he is working in BrainStation-23 and working with nopCommerce Mobile and Web Team.</p> <p style="text-align: center;"><img src="/images/uploaded/Blog/nopStation-nopCommerce-mvps.webp" alt="nopCommerce MVPs in nopStation" /></p> <p style="text-align: center;"><br /><strong>nopStation is a sister concern of BrainStation-23 and provides all sort of ecommerce solutions. Though nopStation is&nbsp;specialised in nopCommerce but we have experience working with other big ecommerce platforms as well.</strong></p>urn:store:1:blog:post:4https://www.nop-station.com/what-is-nopcommerceWhat is nopCommerce?<p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">&nbsp;<img style="display: block; margin-left: auto; margin-right: auto;" src="/Images/uploaded/Blog/what-is-nop.webp" alt="what is nopCommerce" width="812" /> </span></p> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><a href="http://www.nopcommerce.com/"><strong>nopCommerce</strong></a> is an open source <strong>eCommerce</strong> software solution which started its journey in 2008. Since then, the journey has been from ASP.net to strong PHP based solution building. Now nopCommerce provides fully customizable shopping cart facility. Which provides store owners more advantage than any other eCommerce software available. Also, stability &amp; high usability are nopCommerce’s two most adored features. These functionalities have made nopCommerce triumphing in the market within a very short time.</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">What is ecommerce?</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">E-commerce business is buying and selling of goods and services that requires transmission of funds or data, over an electronic network, primarily on the Internet. And these transactions occur either B2B, B2C, C2C or C2B businesses. The platforms for ecommerce needed to be single as well as unified. Accounting, POS, inventory and order management, marketing, merchandising, customer service and financials on a cloud-based platform all should be unified on an ecommerce platform.</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Also Read:&nbsp;<a href="http://www.nop-station.com/nopcommerce-days-2016-nopstation">NopCommerce Days 2016 | NopStation</a></span></h2> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Different ecommerce platforms</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">There are now many platforms for ecommerce like <a href="https://www.shopify.com/" target="_blank" rel="noopener">Shopify</a>, Bigcommerce, 3dcart, Shopping cart elite, 1 shopping cart etc. Which offers 24/7 support or mobile responsiveness or customization features! And most of the time, all the three elements together are hard to find in one platform. And nopCommerce is that one platform which offers all the three features at a time.</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Why nopCommerce is a better platform for ecommerce?</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce software contains both catalog frontend and administration tool backend functions. It also offers shopping cart solution which is very easy to use. And merchants who have outgrown existing systems finds the solution most fitted for their businesses. Web hosting is also a lot easier in nopCommerce. Merchants can host with their current web host or with nopCommerce hosting partners also. Therefore, whether it’s physical or digital goods that one wants to sell over internet, can do it more swiftly than before.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce offers such flexibility &amp; control.</span></strong></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">As nopCommerce is a free platform, extensions and third-party applications can be purchased as add-ons. nopCommerce offers a stack of free staffs like nopCommerce plugins, nopCommerce themes, nopCommerce templates and so on. And expert reviews are saying, nopCommerce is a popular downloadable eCommerce software in 2016. Till now nopCommerce has been downloaded over 1.8 million times &amp; also trusted among 27,000 (over) store owners. And nopCommerce is perfect for online merchants and small/medium businesses.</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce Features</span></h2> <p><span style="font-size: 12pt;"><a href="http://www.nop-station.com/nopcommerce-mobile-app">Mobile commerce</a></span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Multi-store</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Multi-vendor</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Product features</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">SEO</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Checkout</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Marketing</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Payment methods</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Shipping features</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Tax features</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Customer service</span></p> <h2><span style="font-size: 12pt;"><strong><span style="font-family: arial, helvetica, sans-serif;">Short Descriptions of nopCommerce Features</span></strong></span></h2> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Mobile commerce</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">As we are living in mobile-only age, the online store interface must be viewable. Hence, it needs to be convenient on all devices in any resolutions. nopCommerce offers clear and up-to-date responsive design. Thus any online store powered by nopCommerce is guaranteed usable on any device.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Product features</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce has wide range of editable and tweak able product attributes. SKU, quantity, size, price, weight, image, and stock level are the top attributes of nopCommerce. Additionally, customers can add custom attribute easily to the product to have a complete control over the process.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Checkout</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">A good store contains easy checkout. And nopCommerce provides a wide range of checkout options. Like, easy one-page checkout, anonymous checkout and much more. Also nopCommerce has SMS notifications and configurable product measures for the best user experience.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Marketing</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce offers arsenal of marketing tools. Which delivers automated statistics and helps in content marketing. For a successful online store, nop provides discount codes, gift certificates, product rating and reviews options. Also pages created with nopCommerce are adaptable with major product comparison feeds. Google Shopping, PriceGrabber, Yahoo Shopping and become.com are such feeds.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Multi-vendor and multi-store support</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">NopCommerce can operate a multi-vendor marketplace. It can effortlessly re-sell items supplied by other vendors! Vendors do not feel intrusion as they can have dedicated administration panel. Moreover, Multi-store support allows one to operate two or more online stores with different URLs using one administration panel.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Payment methods</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Across the globe, nopCommerce has official technology partnership relations with major payment processors. Which permits exclusive marketing offers and pricing packages available for nopCommerce users. Also nopCommerce is integrated with more than 50 payment methods and gateways. Thus nopCommerce allows one to accept all major credit and debit cards. And as every country has its own payment preference, nopCommerce allows businesses to control payment methods according to country preferences.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Shipping features</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Shipping features includes Calculation, Addresses, Estimate shipping, Packaging slips and Shipping methods. All of these features are absolutely customizable according to customers’ preferences.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Search engine optimization</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Search engine friendly, Sitemap, Micro data, Localizable URLs, Breadcrumbs, URL Canonicalization, Google Analytics integration all are collectively present in nopCommerce SEO feature. Which is why, high visibility of websites (built with nopCommerce) in search engine is confirmed. Also SEO of nopCommerce gives store owners higher search rankings which induce more free traffic to their stores.</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Customer service</span></strong><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Along with all these features, nopCommerce offers a bunch of customer service features as well. Customer attributes, External authentication, Security and permissions, Wishlist, RTL support, EU cookie law are some of the names on the list.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">All these features have made nopCommerce wealthy &amp; capable to build a successful ecommerce store. Also the continuous updates of the features &amp; adding them to the lists have made nopCommerce the most up to date ecommerce platform available for the merchants &amp; the SMB owners.</span></p> <h2><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce integrations with other business systems and applications</span></strong></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">eBay</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">QuickBooks</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Sage Pay</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Kensium Solutions</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Everest ERP</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Composite C1 CMS</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">2 Checkout</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Benefits</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce provides a long list of benefits that make it a popular as an eCommerce solution. Let me tell you some core benefits:</span></p> <blockquote> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>Firstly,</strong> it is an open source shopping cart, which means store owners can set it up easily and quickly for free. It can also be further configured and improved with added tools and functionalities.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>Secondly,</strong> all stores and sites built with nopCommerce is designed to be mobile responsive. So that, it can be fully functional and can be optimized for mobile devices.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>Thirdly,</strong> nopCommerce can run multiple stores from a single installation.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>Fourthly,</strong> it helps selling products that are not in ones inventory with the multi-vendor and drop shipping features.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>And then,</strong> all sites and stores are highly visible and top ranked in search engines through optimization.</span></p> </blockquote> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">User Satisfaction</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">We can see when a businessman makes his/her decision to buy a shopping cart software, it’s really important to see an expert review. At the same time, it’s also important to find out about real people &amp; companies point of view about the product buying process. They (businessmen) need to find out if the people or the companies who are buying the products are satisfied with the purchasing process or not. And with our research, we have found out there aren’t any negative remarks about nopCommerce on any social sites or in any other existing sites so far. With this information in one’s hand, businessmen’s buying decision will be so easy and swift that, they won’t have to regret. </span></p> <p><br /><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Not only that for further services this vendor offers-</span></strong></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">EMAIL</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">PHONE NO. &amp; </span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">TICKETS Support.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Now to shine with the eCommerce stores, I would like to give you some tips &amp; tricks. So that you can see your business grow in no time.</span></p> <h3><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Tips &amp; tricks</span></strong></h3> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">For a successful launch of your online store, you need to follow these simple S’s of ecommerce</span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">The Three S's of E-Commerce are-</span></strong></p> <h4><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Storage Space:</span></h4> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Some e-commerce site builders put limitation on sales. So you need to choose the one that offers you the inventory space and bandwidth which fits your needs. Because, any best ecommerce platform will let your online shop sell online without limitations.</span></p> <h4><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Safety Protocols:</span></h4> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Always choose a program that offers strong scam protection and Secure Socket Layer (SSL) encryption. This is both necessary for the protection of you and your customers. SSL technology makes it possible to send online payments securely. So, SSL is a must-have on all e-commerce sites.</span></p> <h4><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Site Design:</span></h4> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">A user-friendly interface is a must have for e-commerce solution. Site function tools should be clear &amp; it should be easy as well for the customers to go after their desired options. Therefore, you need to choose a top notch site builder to build your online store. You always have to remember the needs of your customers. And accordingly have to place well-designed menus, filters, and sorting options for making your site user friendly.</span></p> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">What do you need to know before launching your online store?</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">An e-commerce site builder lets you build, customize, and run an online store. A complete e-commerce solution and the best ecommerce sites will come with the tools to walk you through the entire process. From hosting, design, pricing and payment options, marketing tools to reports. All these badges you need to use for obtaining the best ecommerce stores.</span><br /><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Consider how much you'll sell. If you expect heavy traffic, an e-commerce solution that offers lots of online storage space, inventory, and bandwidth is a must. Then, decide the level of customization you'd like, to ensure the best ecommerce platform for your store. Many e shop site builders offer attractive templates which are ready-to-use. Then there are others with HTML for more seasoned web designers. Thus always look for must-have features such as payment security and sales reports. Equally, be sure to provide secure payment and shipping options for your customers. Look closely at the tools such as, the ability to create discounts, loyalty programs, or gift-wrap options on your ecommerce website and be careful about the charge for extras. All of these attentions will influence the success of your online shop and how you sell online. Lastly, adopt a program that is easy to use and has a solid customer support team. A well-designed ecommerce builder should be simple yet effective. And the less time you have to spend figuring out the program, the more time you'll have to run your business.</span></p> <blockquote> <p style="text-align: center;"><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">From downloads to documentation, nopCommerce.com offers a comprehensive base of information, resources, and support to the nopCommerce community. So, undoubtedly nopCommerce is a complete solution providing platform for any size &amp; type of online stores.</span></strong></p> </blockquote> <h2><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Final Thoughts</span></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">The ecommerce business world is likely to change a lot in upcoming years. In the long run fresh ways of doing ecommerce will arise. And to catch up, marketers will put their heart and soul into refining and fine-tuning existing methods.</span></p> <blockquote> <p style="text-align: center;"><strong><span style="font-size: 12pt;">So, here we are at the crossroads. Standing for new challenges which will emerge, and working for bigger success stories.</span></strong></p> </blockquote>urn:store:1:blog:post:3https://www.nop-station.com/nopcommerce-days-2016-nopstationNopCommerce Days 2016 | NopStation<p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-days-2016.webp" alt="" width="678" height="342" /></p> <blockquote> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Before sharing <a href="http://nop-station.com">nopStation</a>’s experience on ‘<strong><a href="http://days16.nopcommerce.com/raisul-kabir">nopCommerce Days</a></strong>’. First, let me tell you what is ‘<strong>nopCommerce</strong> Days’. Well, ‘nopCommerce Days’ is actually the annual meeting of nopCommerce community. Every year it takes place in Amsterdam, Netherlands in October.</span></p> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">And those who doesn’t know what <a href="https://en.wikipedia.org/wiki/NopCommerce" target="_blank" rel="noopener">nopCommerce</a>&nbsp;is. For them to know, nopCommerce is an open source <strong>ecommerce software</strong>. It contains both a catalog frontend and an administration tool backend. It is a customizable shopping cart. Which gives high usability as well as stability.</span></p> </blockquote> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopCommerce-founder-Andrei-speech.webp" alt="nopCommerce founder's speech" width="665" height="360" /></span></p> <p style="text-align: center;"><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce Founder,&nbsp;Andrei Mazulnitsyn's Speech</span></strong></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopCommerce was founded in 2008. Since then, it has been growing as the leading <a href="https://www.asp.net/" target="_blank" rel="noopener">ASP.NET</a>&nbsp;(later developed strong PHP-based solutions as well) ecommerce solution. This year it has powered<strong> 25,000</strong> live sites all over the world. Moreover, it has been able to provide most flexibility, richest features &amp; most logical structures till now.&nbsp;</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">&nbsp;</span></p> <blockquote> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em><strong>The mission of ‘nopCommerce Days’ is to strengthen the nop community. Also to connect developers, store-owners, agencies, users and partners into nop ecosystem.</strong></em></span></p> </blockquote> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">This year also, the annual meeting took place in Amsterdam on 20th and 21st of October. And the event&nbsp;this year was&nbsp;even bigger &amp; better than last year. They also invited more people across the world to take part in the meet up. While last year, the meet took place with developers only.&nbsp; And they got 65 delegates across 14 countries. But this year, the organizers took a step ahead &amp; managed to gather all the big elephants working with nopCommerce. This year nopCommerce days got covered more topics regarding the industry &amp; the developments.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">The conference was divided into three segments. First segment covered the development part of nopCommerce. There they featured the most experienced developers of nopCommerce. Second segment covered the store owners. There they introduced the industry experts. Who shared their ecommerce marketing experience with the conference attendees! This first two segments were held simultaneously. After the two segment, in the final segment there was panel discussion. And to attend the panel discussion many IT hulks were present at the conference.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">To present nopStation our <a href="https://www.linkedin.com/in/raisul">CEO Mr. Raisul Kabir</a>&nbsp;went for the conference. He was also invited as a speaker at the conference. There he got chance to talk about Biponee. To know more about Biponee, visit.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">At about 3pm on October 20, Raisul Kabir got the floor for his speech. Right after Milen Kovachev’s (nop-template’s founder) speech. In his 40 minutes time, he tried to cover the story for <a href="http://www.nop-station.com/the-journey-of-a-successful-nopcommerce-startup-biponee" target="_blank" rel="noopener">Biponee’s (ecommerce startup) journey along with the story of founding nopStation</a>. The end of Biponee led to nopStation’s starting back in 2010. And since then nopStation has been working on nopCommerce.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/bs23-ceo-sharing-story.webp" alt="Brainstation 23 CEO sharing nopStation's nopCommerce story" width="687" height="516" /></span></p> <p style="text-align: center;"><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">nopStation CEO, Raisul Kabir Sharing Story of Biponee (Ecommerce Startup)&nbsp;</span></strong></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">With the passage of years, nopStation has&nbsp;been able to get attached with more&nbsp;<a href="http://nop-station.com/about-us">global clients</a>. Eventually has launched&nbsp;our very own&nbsp;<a href="http://nop-station.com/nopcommerce-mobile-app">Android &amp; iOS native Apps</a>, <a href="http://nop-station.com/nopcommerce-themes">themes</a>&nbsp;and <a href="http://nop-station.com/nopcommerce-plugins">plugins</a>. The very first client that nopStation had was from USA. And they needed help on <a href="http://nop-station.com/nopcommerce-custom-solution">customization</a>. Then after customizing according to client’s requirements, more customization demand from other clients were coming.<em><strong> And in this way, nopStation has become the one &amp; only company who offers customization for nopCommerce store owners.</strong></em></span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Mr. Kabir shared his experience&nbsp;of the event like this-</span></p> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>"It was a great pleasure to meet the man who brought nopCommerce into life (about Andrei Mazulnitsyn). Also his whole team was a breath of fresh air. It was a pleasure to meet nopTemplate founders MILEN KOVACHEV &amp; BOYKO BONEV personally. Such young &amp; talented fellows. I was really happy when I find out nopStation is quiet known among the nopCommerce community. And thus the welcome was an warm one that sure I didn’t expected before I went for the event.</em></span></p> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/bs-23-ceo-with-nopCommerce-founder.webp" alt="Brainstation 23 CEO with the nopCommerce founder" width="660" height="494" /></span></p> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><strong>nopCommerce Founder, Andrei Mazulnitsyn &amp;&nbsp;<strong>nopStation CEO, Raisul Kabir</strong></strong></span></p> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/bs-23-ceo-with-boyko.webp" alt=" Brainstation 23 CEO with Boyko Team" width="663" height="497" /></span></p> <p style="text-align: center;"><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Raisul Kabir With One Of The Founders of nopTemplates&nbsp;Boyko Bonev(2nd to right)&nbsp;</span></strong></p> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>Our reason to attend the event was-</em></span></p> <ol style="text-align: left;"> <li><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To get to meet the right people in the industry</em></span></li> <li><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To evaluate ourselves with the existing market for competitive analysis &amp;</em></span></li> <li><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Find out the updates &amp; trends</em></span></li> </ol> <p style="text-align: left;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><em>And after attending the conference &amp; meeting people in the event, I can gladly say our journey was&nbsp;successful so far. And we got what we needed."</em></span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">&nbsp;</span></p> <blockquote> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">So, we can say, nopCommerce Day was an amazing experience for nopStation so far. We learned a lot from the event. Also it was wonderful to know that, nopCommerce market has the potential to grow even bigger in near future. So our fingers are crossed. Hopefully, wherever nopCommerce goes, we will be walking by their side along the journey.</span></p> <p style="text-align: center;"><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Cheers!</span></p> </blockquote>urn:store:1:blog:post:2https://www.nop-station.com/the-journey-of-a-successful-nopcommerce-startup-biponeeBiponee – Journey of a successful e-commerce in nopCommerce<p style="text-align: left;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/Biponee-nopCommerce-success-story.webp" alt="Biponne's nopCommerce succuess story as an eCommerce brand" width="764" height="430" /></p> <p style="text-align: left;">&nbsp;</p> <p style="text-align: justify;"><strong><span id="docs-internal-guid-094ab85f-14f2-02e6-ba9c-f0273ec1a29f">Biponee is a quite successful e-commerce site of <a href="http://brainstation-23.com/">Brain Station-23</a>, a quite successful software company of Bangladesh. We choose to use nopCommerce as the technology base to work on instead of building from scratch or using any other more popular open source platform. This helped us grow and really scale quickly. Here, I’m going to explain our technology decisions and journey, successes and challenges.</span></strong></p> <h3 style="text-align: left;">&nbsp;</h3> <h3>Starting of Biponee</h3> <p style="text-align: justify;"><span id="docs-internal-guid-094ab85f-14f4-8ddb-ac56-478872eb81e4">Brain Station-23 Ltd is one of the top software outsourcing company in Bangladesh, receiving multiple awards recognizing so. While doing outsourcing we were thinking, what can we do next and we planned to make an e-commerce site. E-commerce was growing heavily and decided to use our technical capability and strength to utilize the market trend. In 2012 board approved of it and just working on it for 3 months, our site was ready.</span></p> <h3 style="text-align: justify;"><span id="docs-internal-guid-094ab85f-14f4-f818-ab2f-7e959d3c748c">Picking nopCommerce as base</span></h3> <p style="text-align: justify;"><span id="docs-internal-guid-094ab85f-14f5-3987-5ab6-58c61686019e">Our vision was to make Biponee #1<a href="https://en.wikipedia.org/wiki/E-commerce"> e-commerce</a> site in Bangladesh. So, we were looking for a platform that very easy to use, very easy to customize and robust technology support. So, we were looking for .net instead of PHP.</span></p> <h3 style="text-align: justify;"><span id="docs-internal-guid-094ab85f-14f5-8646-f537-c22be348618b">Why asp.net</span></h3> <p dir="ltr" style="text-align: justify;">Brain Station-23 has a very strong foothold in asp.net, more than 60% of the 150 people company (in 2017) works in asp.net projects. Initially, in 2006, we were PHP focused company. Because I myself loved and worked in PHP and I was Zend Certified Engineer also. But, we found larger clients and enterprise clients were more looking for asp.net, so we started working on it and eventually became one of the best. We now have multiple Microsoft MPV, NopMVP and lots of MCP. So, asp.net became kind of home ground for us.</p> <p style="text-align: left;"><img style="display: block; margin-left: auto; margin-right: auto;" src="images/uploaded/Blog/view-on-multiple-devices.webp" alt="Multi-device views for the website" width="890" height="482" /></p> <p style="text-align: left;">&nbsp;</p> <p dir="ltr" style="text-align: justify;">Another reason being, in <a href="http://asp.net/">ASP.net</a>, it is easier to make a better performing application because the code runs directly from ram by compiled dll. On the other hand, PHP being scripting language is loaded from a file system and then for every time it’s interpreted. That’s the default system. It can be optimized and make to perform awesome, but it’s difficult and not many people can do that. In ASP.net, by default, it starts running faster. In PHP, if beautiful, scalable and object-oriented frameworks are used, then in order to create a lot of classes, you need to use a lot of files. Loading all these files makes it, by default, slow. Then again, it can be made faster, just need that expertise which we didn’t have at that time.</p> <p dir="ltr" style="text-align: justify;">Finally, another reason was resource availability. Not only in Bangladesh, all over the world, general asp.net developers get more salary than asp.net and that results in better developers moving toward asp.net. So, more talented developer become, by default, available in asp.net than PHP. Also, somehow, better developer tend to love ASP.net or Java more than PHP. In our company, we don’t make any such discrimination, because in our company, we just hire talented people. A language is just a tool – in our company. But generally, more better developer becomes available for two above reasons. I know personally many PHP developers, who earn lot more money than asp.net developer and I have lot of respect for PHP (since I myself also am a PHP developer). But, this created a challenge. I have lost some great developers during our company’s PHP age, because they wanted to move to some company where asp.net is used.</p> <p dir="ltr" style="text-align: justify;">That said, it’s changing. I recently found talented developers, who have love and passion for PHP and is doing very good. So, it’s changing. Back at that time, I had this talent problem. I needed talented people and it was difficult to find those talents in PHP and easier to find in asp.net</p> <p dir="ltr" style="text-align: justify;">So, with above these things, we decided to use ASP.net</p> <h3><span id="docs-internal-guid-094ab85f-14f9-237b-66ca-0624b3aafffe">Why Open Source</span></h3> <p dir="ltr" style="text-align: justify;">With our capability, it was very easy for us to make a software from scratch. We have made projects for many startups and big companies (like British Telecom) which is used by millions of people. So, making an app from scratch, where I know everything made the most sense. There are a couple of reasons for which we decided to go open source, while many goes other way.</p> <p dir="ltr" style="text-align: justify;">Not reinventing the wheel – There is no reason why we should reinvent the wheel, all the same features are needed, category management, product management, login module, order processing etc. Not to mention, there are hundreds and thousands of people are using it, testing it, fixing bugs, fixing security whole, adding new features, common plugins are easily available – lots of benefits of open source project. And we found that it helped us great extent. We could do all these. But, even being an outsourcing company, where our cost is most probably the lowest among all other outsourcing countries considering the high talent we have, it would cost us lot of money to build and test such application.</p> <p dir="ltr" style="text-align: justify;">Faster time to market – since we didn’t reinvent the wheel, we could go to market very quickly. We knew what we are using is the best possible way to do e-commerce. We just modified based on our country needs and potential customer needs. Thus we could make the first version to go live within just 3 months, with just one junior developer with senior supervision and guidance.</p> <p dir="ltr" style="text-align: justify;">Technology advantage – when we make an application, it’s not unusual to have bugs or security issues which need to be tested, found out and resolved. When we are using an open source, those security issues are already solved. Bear in mind that, we are a very good and strong company. So, we can make a secured application. But, even the most secured application can have a security flaw, which is why internationally so many hacks happen all over the world. So, when it’s an open source project, most security flaws are already tested and fixed, since it’s being used by thousands of company. While writing this article, I know there are more than 20,000 websites using nopCommerce.</p> <p style="text-align: left;"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-native-mobile-app.webp" alt="nopStation's Native Mobile Apps" width="734" height="413" /></p> <p style="text-align: left;">&nbsp;</p> <h3 style="text-align: left;"><span id="docs-internal-guid-094ab85f-14f9-fcd6-9f33-84c0642e7505">Why nopCommerce</span></h3> <p dir="ltr" style="text-align: justify;">When looking for open source, we thought of Magento, but for above reasons we decided not to use. Magento has very strong and beautiful architecture, which makes it slow. I have seen companies suffering with hundreds of product, but I have the vision to have hundreds of thousands. During that time, it had more than 200 tables. So, I felt, managing and customizing it is going to be quite challenging. It’s very easily customizable without code. But, if we want more than the customized software, where we code to make special changes, it’s going to be very difficult.</p> <p dir="ltr" style="text-align: justify;">We found nopCommerce during that time had less than 100 tables with very beautiful and easy to understand MVP architecture. With that, we can quickly enter into the core codebase and modify to whatever we need and however we need them. Making plugin is very easy – create a new MVP project and add to the solution. Making and customizing theme was also very easy. Besides, we already have been working on nopCommerce since 2010.</p> <p dir="ltr" style="text-align: justify;">We looked into other ASP.net open source e-commerce project but none were as much popular as nopCommerce.</p> <p dir="ltr" style="text-align: justify;"><strong><span id="docs-internal-guid-094ab85f-14fb-0549-3b01-b20471d5b563">Server cost, license cost, Microsoft, fear!!</span></strong></p> <p dir="ltr" style="text-align: justify;">One fear for us, really, was server cost. For all other projects - it’s client’s project, the client has to pay the server cost and license cost for the server, the client decides whether to use asp.net or PHP and we just follow that. We didn’t have to decide technology before most of the time. Now, when we are making our own site. So, these were a big challenge for us. What’s going to be the cost long run? Because we can’t just change technology after a while. In the same technology, we can refactor and modify to harness the power, but if the technology is changed, it would not be possible to just refactor.</p> <p dir="ltr" style="text-align: justify;">However, we found out our fear was actually wrong. We are the big believer of lean startup, don’t spend money when not needed! So, we started with Arvixe shared hosting for only $8/month during that time. That went on for a couple of months. As sell started to grow, we went to $27/month with professional asp.net hosting in Arvixe. As sale grew further, we went to VPS of Arvixe for I think $40/month that time. Finally, when that exceeded, we started having a good amount of traffic, we went to Amazon Web Services. Finally, when we sold off, our server cost was somewhere $160/month where we had all license cost covered.</p> <p dir="ltr" style="text-align: justify;">Also, we applied for Bizspark in Microsoft. That enabled us to have some further license. So, with no cost, a asp.net based startup can launch, hurray!!</p> <h3 dir="ltr">Fees for commercial use</h3> <p dir="ltr" style="text-align: justify;">This is one interesting thing about nopCommerce. For using nopCommerce for commercial use, the license cost is very low. Around $70 per domain. So, we had no fear there. Because Magento commercial license was like insanely expensive back then.</p> <p dir="ltr"><strong>Faster and easier customization made us grow faster than competitors</strong></p> <p dir="ltr" style="text-align: justify;">So, we launched our Biponee site. As customers started to come, we found we need to develop different things for changing customer needs and faster business operation. With such beautiful architecture, it was very easy for us to customize to meet changing customer need. We made lots of plugins and modified a number of free plugins to meet our need best way. To give some example –</p> <ul style="list-style-type: square;"> <li dir="ltr"><strong>Bulk product edit –</strong> we created a plugin for easily editing all the searched products in a faster manner.</li> <li dir="ltr"><strong>Vendor extension plugin –</strong> we had 80+ vendors who were giving us the product. We made a plugin for them for their monitoring of sales.</li> <li dir="ltr"><strong>Quick order processing –</strong> we made a number of plugins for quickly processing order based on the need of our vendors and our couriers.</li> </ul> <blockquote> <p style="text-align: justify;"><span id="docs-internal-guid-094ab85f-14fb-8353-31a3-ed98a30b1c28"><br />So, with all these, it became easier for us to become one of the top e-commerce site. However, technology is just 20-30% of the business, of course the main reason for success was operations. But, without proper technology support the company suffers. We made sure that it doesn’t happen.</span></p> </blockquote> <p dir="ltr" style="text-align: justify;">&nbsp;</p>urn:store:1:blog:post:1https://www.nop-station.com/getting-ready-for-nopcommerce-day-2016Backpacking for nopCommerce days 2k16 | NopStation<div> <p align="center"><a href="http://www.nop-station.com/getting-ready-for-nopcommerce-day-2016"><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-become-gold-partner.webp" alt="nopStation is the #1 nopCommerce Gold solution partner" width="720" height="356" /></a></p> <p style="text-align: center;" align="center"><span style="font-family: arial, helvetica, sans-serif; font-size: 11pt;"><strong>"We are thrilled to be present at the second annual conference of the nopCommerce community ‘</strong> <a href="http://days16.nopcommerce.com/"><strong>nopCommerce Days’16</strong></a> <strong> ’. Last year nopCommerce organized their first summit for the community in Amsterdam on 31st of October. The event was entitled as ‘Nop Dev Days’ and was focused on to developers. This year they are focusing not only on the developers as well as on store-owners, agencies, users and partners. Trying to bring the whole community into nop ecosystem. This initiative will surely make strong bond within nopCommerce community." </strong></span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">&nbsp;</span></p> <p>&nbsp;</p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/bs23-ceo-raisul-kabir.webp" alt="BS23 CEO Raisul Kabir" width="722" height="528" /></p> <h2><span style="font-family: arial, helvetica, sans-serif;"><strong>About our </strong> <strong>Speaker</strong></span></h2> <p><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">This year meet up will take place again in Amsterdam on 20th and 21st of October. On behalf of nopStation our CEO, Raisul Kabir will be there as a speaker in the conference. He will share his experience with nopCommerce within last few years. How he get to know nopCommerce &amp; how prospecting he finds the platform all will be covered by his speech.</span></p> <p><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">Our CEO, <strong>Mr. Raisul Kabir</strong> being an EEE graduate from BUET started his own IT Company Brain Station 23 Ltd. in 2006 and now in 2016 not only the company is a pride for the nation but also have achieved good global responses. Brain Station 23 Ltd. is now a name which have spread out to Netherlands, Denmark, Switzerland, Canada, UK and US. Hopefully our branch nopStation will be a global tag shortly!</span></p> <h2><strong>Setup a </strong> <strong>Meeting</strong></h2> <p><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">We are very eager to help you with all our heart. Therefore, please mention your preferable time when we can grab a cup of coffee and discuss on the solution you need. Also you can leave your contacts with our 'contact us' page &amp; we'll be responding as quickly as possible.&nbsp;</span></p> <p align="center">&nbsp;</p> <h2 style="text-align: center;" align="center"><span style="font-family: arial, helvetica, sans-serif;"><a href="http://www.brainstation-23.com/project/biponee-e-commerce-site/"><strong>Biponee</strong></a> <strong> &amp; rise of </strong> <a href="http://dev.nop-station.com/"><strong>nopStation</strong></a> </span><strong> <br /><br /></strong></h2> <p><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">"Biponee" is Bangladesh's number one ecommerce site and nopStation is proud to have credit for creating such nopCommerce Site in Bangladesh. Our CEO in his speech will speak about "Biponee" &amp; its successful journey in the market. The uniqueness along with details will be revealed. Also he will share nopStation's journey till now.</span></p> <h2 style="text-align: center;" align="center"><span style="font-family: arial, helvetica, sans-serif;"><strong>Nop day is our day</strong></span></h2> <p style="text-align: center;" align="center"><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">We believe, nopCommerce day is our day as we have bigger plans &amp; strong wills to make a difference with nopCommerce. </span><br /><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;"> For the day especially we are up with-</span></p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="/images/uploaded/Blog/nopStation-mobile-apps-nopCommerce.webp" alt="" width="704" height="528" /></p> </div> <div> <table style="margin-left: auto; margin-right: auto;"> <tbody> <tr> <td><img src="/images/uploaded/Blog/launch-of-our-new-website.webp" alt="website accouncement" width="550" height="280" /></td> <td><img src="/images/uploaded/Blog/launch-of-our-new-theme.webp" alt="theme announcement" width="550" height="280" /></td> </tr> </tbody> </table> &nbsp;</div> <div> <h2><strong>First work with </strong> <strong>nopCommerce</strong> <strong>:</strong></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 11pt;">We first internationally went after nopCommerce with “Procomarketing”. 2010 August was the time we took the project in. It’s a project we took for an American Store owner whose 8 shops are running with our solutions. After ‘procomarketing’ we got involved with several other projects. Then with Biponee's success &nbsp;we became more interested in nopCommerce. From 2010 till now we’ve grown as a team of 12 devoted minds.</span></p> </div> <div> <h2><strong>Journey </strong> <strong>so far:</strong></h2> <p><span style="font-size: 11pt; font-family: arial, helvetica, sans-serif;">nopCommerce related work from our end was soon needed an individual entity. Thus nopStation started it's journey. Our first release of nopStation web page came into light in 2014. The early story is an interesting one. One of our PM and developer Razib Mahmud was working on nopRoot theme in his free time. Then with the help of 3 interns he completed the theme. After the theme released within weeks it crossed 1000 downloads. The community responses were also incredible. Being inspired from the success of nopRoot we later released 'shopper' theme. As of 26th July 'noproot' had been downloaded 15755 times and 'e-shopper' 18808 times. So, to start business out of nopCommerce was mandatory. After doing much research we found that there are demand of native nopCommerce app. So, we planned to develop and sell nopCommerce. Now we are selling apps for android, iOS and windows.</span></p> <h2><strong>After</strong> <strong> 5 years:</strong></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 11pt;">We always encourage our developer to contribute in nopCommerce community. So that we can add value to the community. Also our developers will learn more and will be apt in Problem solving. By giving our best for the community we want to prove ourselves able for any ground breaking projects ahead. After 5 years we now have 2 nopMVP and 3 nopCertified developers in our team. They are not only skilled but gives their best for staying updated and upgraded. All these people in our team want to bring a difference in modern marketing through nopCommerce based products. Within these years we’ve come up with successful apps in both iOS and android platforms. We have developed outstanding themes and have developed many distinct plugins.</span></p> <h2><strong>nopCommerce market </strong> <strong>currently:</strong></h2> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 11pt;">nopCommerce markets have now grown to its full potential. In 2008 nopCommerce team started their journey for developing ASP.NET e-commerce solutions. They knew that the e-market scenario are not going to be the same again. With highly flexible model, rich features, and logical structure nopCommerce become popular shortly. Now in 2016 it powers more than 25.000 live sites all over the world.</span></p> </div> <p style="text-align: center;" align="center"><span style="font-family: arial, helvetica, sans-serif; font-size: 11pt;"><strong> After realizing ecommerce platforms' future nopCommerce took an initiative in 2008. Which nopStation understood right after they get to know about nopCommerce. The Journey had begun since 2010 and still going strong with the passage of time.</strong></span></p>