<?xml version="1.0"?>
<rss version="2.0"><channel><title>PadLoper Latest Topics</title><link>https://processwire.com/talk/forum/62-padloper/</link><description>PadLoper Latest Topics</description><language>en</language><item><title>ProcessWire Commerce Features</title><link>https://processwire.com/talk/topic/31316-processwire-commerce-features/</link><description><![CDATA[<p>
	ProcessWire Commerce is a free, open-source fully featured e-commerce module (plugin) for building and managing fully functional online shops (stores) in ProcessWire. It is flexible, extensible, highly customisable, scalable, robust, multilingual by design and battle tested. The current features are:
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Core Features</span></span></strong>
</p>

<ol style="background-color:rgb(255,255,255);color:rgb(85,85,85);font-size:16px;">
	<li>
		Product Management: Create and manage unlimited product listings with options for unlimited variations, pricing, and descriptions. Support for 4 product types: Physical with shipping, physical without shipping, digital and services/events. Optionally track stock.
	</li>
	<li>
		Order Management: Process and manage orders, handle refunds, print invoices and communicate with customers. Frontend order placement and backend manual order creation.
	</li>
	<li>
		Shipping Options: Configure shipping methods, rates, handling and zones based on location and product type. Rates can be tiered and based on weight, price, quantity or flat. Support for '<em>rest of the world</em>' shipping.
	</li>
	<li>
		Tax Management: Calculate and apply taxes automatically based on location and product type. Prices can include/exclude taxes. Tax overrides can be added to product categories (collections) and/or shipping.
	</li>
	<li>
		Analytics &amp; Reporting: Gain insights into sales, customer behavior, and product performance. 
	</li>
	<li>
		Payment Gateways: Integrate with numerous payment processors to securely accept online payments. Invoice, Stripe and PayPal included by default. Easily add your preferred gateway.
	</li>
</ol>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Optional Features</span></span></strong>
</p>

<ul style="background-color:#ffffff;color:#555555;font-size:16px;">
	<li>
		Inventory Management: Track stock levels, manage back-orders, and set up low stock notifications.
	</li>
	<li>
		Product Categories (collections).
	</li>
	<li>
		Product Tags.
	</li>
	<li>
		Product Attributes (for product variants, e.g. colour, size, etc).
	</li>
	<li>
		Product Types:  'Phones', 'Books', 'Shirts' and so on.
	</li>
	<li>
		Product Brands: Create and manage shop product brands/vendors/manufacturers.
	</li>
	<li>
		Product Properties:  Further describe products based on various properties such as 'Colour', 'Grade', 'Weight', etc.
	</li>
	<li>
		Product Dimensions:  For instance, 'Centimetres', 'Kilograms', 'Litres', etc. For use with Product Properties.
	</li>
	<li>
		Downloads; Digital products or files that accompany a product such as 'tickets', 'manuals', and so on.
	</li>
	<li>
		Discounts:  Redeemed by customers or applied automatically at checkout. Support for four types: Fixed, Percentage, Shipping and Buy X get Y (last one is WIP). Discounts can be applied to whole order, parts of it, to select customers or countries.
	</li>
	<li>
		Customer Management: Create and manage unlimited customers. Can be created at checkout (using the API and/or hooks) or manually in the backend. Email customers directly from admin. Customers can have multiple addresses.
	</li>
	<li>
		Customer Groups: Create and manage unlimited customer groups Add customers to as many customer groups as needed. Customer groups can be targeted for marketing, promotions, etc.
	</li>
	<li>
		Legal Pages: Create and manage legal pages such as 'Shipping Policy', etc.
	</li>
	<li>
		Gift Cards: WIP.
	</li>
	<li>
		Move some pages from /admin/shop/ to a parent in the home tree.
	</li>
</ul>

<p>
	 
</p>

<p>
	<span style="color:#d35400;"><span style="font-size:16px;"><strong>With your help, we can add more features <span class="ipsEmoji">😀</span>!</strong></span></span>
</p>
]]></description><guid isPermaLink="false">31316</guid><pubDate>Tue, 17 Jun 2025 13:46:50 +0000</pubDate></item><item><title>E-Commerce Solution</title><link>https://processwire.com/talk/topic/31619-e-commerce-solution/</link><description><![CDATA[<p>
	Dear Community Members,
</p>

<p>
	I am new to ProcessWire and web development. I have just finished basic web development (frontend) and PHP. And now I am exploring ProcessWire. I want to develop a portfolio project for my uncle's business. He wants an e-commerce website with the following features:
</p>

<ol>
	<li>
		All the common e-commerce functionalities.
	</li>
	<li>
		B2B and B2C features.
	</li>
	<li>
		CRM.
	</li>
	<li>
		Some custom workflow implementation.
	</li>
	<li>
		Some custom requirements like:
		<ol>
			<li>
				An email verification feature for the clients.
			</li>
			<li>
				For registering a b2b client, they need to submit a registration form where they are supposed to upload a business document. The admin (shop owner) looks at the document and categorises the client as a b2b wholesaler or b2b retailer. 
			</li>
			<li>
				Wholesalers and retailer sees different prices for products, and similarly do the B2C clients.
			</li>
			<li>
				Appointment scheduling for consultation with payment for booking an appointment.
			</li>
		</ol>
	</li>
</ol>

<p>
	I am doing my best to explore all the resources in the ProcessWire website and documentation. It has been over a week I am looking for a perfect solution and I have come up to the following solutions:
</p>

<ol>
	<li>
		The basic e-commerce functionalities can be handled by Modules like ProcessWire Commerce or RockCommerce.
	</li>
	<li>
		Workflow implementation can be done using the hooks.
	</li>
</ol>

<p>
	I am not experienced with the above solutions; I just looked at the website, the docs and found them from those resources. If my choices are wrong, please correct me with proper guidance. You may have already crossed the problems and issues that a new developer faces while implementing these modules.
</p>

<p>
	For other functionalities, I am still actively looking for some solutions. If you are familiar with such cases, please guide me. I have a dream of starting my own digital agency, and I am selecting ProcessWire as my primary CMF for delivering the websites and web applications to my clients.
</p>

<p>
	Thanks in advance!!
</p>

<p>
	A big Thanks to the ProcessWire team for such a powerful and valuable open-source CMS framework!!!!
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">31619</guid><pubDate>Mon, 12 Jan 2026 23:50:51 +0000</pubDate></item><item><title>Can I upgrade Padloper in place?</title><link>https://processwire.com/talk/topic/31484-can-i-upgrade-padloper-in-place/</link><description><![CDATA[<p>
	Hello, I have "inherited" the administration of this ProcessWire site, which includes an active Padloper store with several products. Looking at the modules page, I assume that this is probably a very old version (not sure if I should be looking somewhere else).
</p>

<p>
	How can I upgrade to a more up-to-date/stable version, without having to rebuild the whole shop and inventory from scratch? When I click "check for updates", I get an error that "That module is not currently tracked by the modules directory".
</p>

<p>
	Thank you for your help
</p>

<p>
	George
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2025_10/Screenshot2025-10-04at12_46_13.png.a78303fc8d42d96a2a648e2c19665541.png" data-fileid="28447" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="28447" data-ratio="75.08" width="999" alt="Screenshot2025-10-04at12_46_13.thumb.png.4c0335782c326ee69bcf4ee338d1789b.png" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2025_10/Screenshot2025-10-04at12_46_13.thumb.png.4c0335782c326ee69bcf4ee338d1789b.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" /></a>
</p>
]]></description><guid isPermaLink="false">31484</guid><pubDate>Sat, 04 Oct 2025 09:54:45 +0000</pubDate></item><item><title>Not a single Demo page is working</title><link>https://processwire.com/talk/topic/31417-not-a-single-demo-page-is-working/</link><description><![CDATA[<p>
	I tried to figure out how PwCommerce could work and was happy I found those demo pages on GitHub. Only that not a single one works, even if I renamed all Padloper with PwCommerce. E.g.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">$cart = $pwcommerce-&gt;cart;
 bd($cart);</span></pre>

<p>
	$cart = '' and producing an error. Sorry, I know that this is free software but at least for me it is the same useless as was Mediamanager for which I paid without ever being able to use it thanks to the lack of documentation. And yes, I get the idea that for 100 EUR per hour you might help me set it up working.
</p>
]]></description><guid isPermaLink="false">31417</guid><pubDate>Sun, 17 Aug 2025 16:18:10 +0000</pubDate></item><item><title>Migrating to ProcessWire Commerce from Padloper</title><link>https://processwire.com/talk/topic/31314-migrating-to-processwire-commerce-from-padloper/</link><description><![CDATA[<p>
	<strong><span style="color:#d35400;">NOTE: Here and elsewhere referencing ProcessWire Commerce, Padloper refers to Padloper 2. Padloper 1 was retired 3 years ago. </span></strong>
</p>

<p>
	--------------
</p>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">New Site</span></span></strong>
</p>

<ul>
	<li>
		Install ProcessWire Commerce.
	</li>
	<li>
		The current (outdated and incomplete!) <a href="https://docs.kongondo.com/" rel="external nofollow">Padloper docs</a> are still helpful. Note though that configuring ProcessWire Commerce is accessed via <strong><span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;">/admin/shop/configure-pwcommerce/</span></span></strong>.
	</li>
	<li>
		For template  files and hooks, please note the following:
	</li>
</ul>

<p>
	<span style="color:#2980b9;"><strong><span style="font-size:16px;">Changes</span></strong></span>
</p>

<p>
	<span style="color:#2980b9;"><em>Template Files</em></span>
</p>

<p>
	All instances of <strong><span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;">$padloper</span></span></strong> should be replaced by <span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>$pwcommerce</strong></span></span>. For instance <span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>$padloper-&gt;getCart()</strong></span></span> should become <span style="color:#7f8c8d;"><strong><span style="font-family:'Courier New', Courier, monospace;">$pwcommerce-&gt;getCart()</span></strong></span>. 
</p>

<p>
	All instances of '<span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>pad_</strong></span></span>' should be replaced by '<span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>pwcommerce_</strong></span></span>'. For instance '<span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>pad_price_total</strong></span></span>' should become '<span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>pwcommerce_price_total</strong></span></span>'.
</p>

<p>
	<span style="color:#2980b9;"><em>Hooks</em></span>
</p>

<p>
	Your hooks, e.g. in ready.php should be renamed as follows: 
</p>

<p>
	All instances of <span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;"><strong>Padloper::someHookedMethod</strong></span></span> should become <span style="font-family:'Courier New', Courier, monospace;"><span style="color:#7f8c8d;"><strong>PwCommerce::someHookedMethod</strong></span></span>. <span style="color:#d35400;">Please note the spelling is case-sensitive</span>.
</p>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Existing Site</span></span></strong>
</p>

<ul>
	<li>
		<strong>DO NOT</strong> UNINSTALL Padloper!
	</li>
	<li>
		<strong>DO NOT</strong> INSTALL ProcessWire Commerce!
	</li>
	<li>
		<strong>Download and install</strong> the <em>Padloper to ProcessWire Commerce migration tool</em> <a href="https://github.com/kongondo/ProcessMigratePadloperToPWCommerce/" rel="external nofollow">from this repo</a>.
	</li>
	<li>
		Please <strong>READ </strong>all the instructions!
	</li>
	<li>
		Template Files: As above.
	</li>
	<li>
		Hooks: As above.
	</li>
</ul>

<p>
	Any issues please let us know below. Include info about:
</p>

<ul>
	<li>
		ProcessWire version (please note ProcessWire Commerce/Padloper's admin GUI is broken in new admin theme,  i.e., ProcessWire 3.0.248 (or newer).
	</li>
	<li>
		Padloper version.
	</li>
	<li>
		Site language(s).
	</li>
	<li>
		PHP version.
	</li>
	<li>
		MySQL version.
	</li>
</ul>

<p>
	For issues with the migration tool itself, please raise an issue in the project repo. Include the above environment information please.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;"><span style="color:#d35400;"><strong>Whilst I have thoroughly tested the migration tool (on a multilingual site), usage of the migration tool is at your own risk! </strong></span></span>
</p>
]]></description><guid isPermaLink="false">31314</guid><pubDate>Tue, 17 Jun 2025 12:36:47 +0000</pubDate></item><item><title>ProcessWire Commerce: Help Needed</title><link>https://processwire.com/talk/topic/31312-processwire-commerce-help-needed/</link><description><![CDATA[<p>
	ProcessWire Commerce will be here later today. As mentioned in earlier discussions, my hope is that this will very much become a community project. ProcessWire Commerce is a mature project that powers hundreds of shops, big and small. There still some work needed to make it better. This is where <strong>you </strong>can chime in, to the extent you can.
</p>

<p>
	<span style="color:#d35400;">Please note: I don't have it all figured out yet. With your help, we can figure it out together, including the contribution process.</span>
</p>

<p>
	Below are the things that currently need to be worked on.
</p>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Documentation</span></span></strong>:
</p>

<ul>
	<li>
		Frontend documentation - for frontend developers:  End-to-end how to work with ProcessWire Commerce in the frontend to build a shop. 
	</li>
	<li>
		Backend documentation - for shop editors. How to use the GUI to configure, build, run and manage a shop.
	</li>
	<li>
		API documentation - for documenting how ProcessWire Commerce is built, developing for it and contributing.
	</li>
</ul>

<p>
	<span style="color:#d35400;">Still considering if/how to how to host documentation. Suggestions welcome.</span>
</p>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Fix Bugs</span></span></strong>
</p>

<ul>
	<li>
		Identify, report and suggest bug fixes. <span style="color:#d35400;"><strong>Please file bug reports in the repo here</strong></span> - <a href="https://github.com/kongondo/ProcessWireCommerce/issues" rel="external nofollow">https://github.com/kongondo/ProcessWireCommerce/issues</a>.
	</li>
	<li>
		Fork the project, fix bugs and submit PRs.
	</li>
</ul>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Tutorials</span></span></strong>
</p>

<ul>
	<li>
		Help write ProcessWire Commerce tutorials for different audiences.
	</li>
	<li>
		Help create demos.
	</li>
</ul>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Ecosystem</span></span></strong>
</p>

<ul>
	<li>
		Help grow the project.
	</li>
	<li>
		Star it on <a href="https://github.com/kongondo/ProcessWireCommerce" rel="external nofollow">GitHub</a>.
	</li>
	<li>
		Create add-ons.
	</li>
	<li>
		Build migration tools.
	</li>
	<li>
		Create a logo for ProcessWire Commerce.
	</li>
	<li>
		Help write unit tests (???)
	</li>
</ul>

<p>
	<strong><span style="color:#16a085;"><span style="font-size:20px;">Site Profiles</span></span></strong>
</p>

<ul>
	<li>
		Help develop an official, multi-lingual, modern site profile/theme to be used to showcase ProcessWire Commerce.
	</li>
	<li>
		Contribute site profiles or themes.
	</li>
</ul>

<p>
	 
</p>
]]></description><guid isPermaLink="false">31312</guid><pubDate>Tue, 17 Jun 2025 11:33:10 +0000</pubDate></item><item><title>Repeaterfield on product template</title><link>https://processwire.com/talk/topic/30272-repeaterfield-on-product-template/</link><description><![CDATA[<p>
	Hi <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>,
</p>

<p>
	I have a repeaterfield on my product template. When I enable product variants the JS for InputfieldRepeater will trigger based on 'InputfieldRepeaterItem' class, causing errors and the variant's content gets hidden.
</p>

<p>
	InputfieldPadloperRuntimeMarkup.module
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="com">// @note @kongondo: we need this class 'InputfieldRepeaterItem' so InputfieldImage.js will read the ajax postUrl from our data-editUrl here</span><span class="pln">
$wrap</span><span class="pun">-&gt;</span><span class="pln">addClass</span><span class="pun">(</span><span class="str">'InputfieldPadloperRuntimeMarkupItem InputfieldNoFocus InputfieldRepeaterItem'</span><span class="pun">);</span></pre>

<p>
	You have any ideas to prevent this? (I'd rather not change Fieldtype Repeater module itself, which I have done in the meanwhile)
</p>
]]></description><guid isPermaLink="false">30272</guid><pubDate>Mon, 05 Aug 2024 13:53:14 +0000</pubDate></item><item><title>ProcessWire Commerce: Documentation</title><link>https://processwire.com/talk/topic/31315-processwire-commerce-documentation/</link><description><![CDATA[<p>
	Thread to discuss the state, suggestions, contributions, etc. regarding documentation for ProcessWire Commerce. The <a href="https://docs.kongondo.com/" rel="external nofollow">minimal Padloper documentation</a> found here can be a starting point.
</p>

<p>
	I'll try my best to write the documentation. <span style="color:#d35400;"><strong>I need your help though</strong>.</span> Please note the caveats in the 'open-sourcing Padloper' thread. I.e., I'll do what I can when I can. Your help is vey much appreciated. I'll prioritise assisting documentation contributors, to help point them in the right direction. 
</p>

<p>
	Documentation should cover:
</p>

<ol style="background-color:rgb(255,255,255);color:rgb(85,85,85);font-size:16px;">
	<li>
		Frontend documentation - for frontend developers:  End-to-end how to work with ProcessWire Commerce in the frontend to build a shop. 
	</li>
	<li>
		Backend documentation - for shop editors. How to use the GUI to configure, build, run and manage a shop.
	</li>
	<li>
		API documentation - for documenting how ProcessWire Commerce is built, developing for it and contributing.
	</li>
</ol>

<p>
	Thank you! You contribution is much appreciated!
</p>
]]></description><guid isPermaLink="false">31315</guid><pubDate>Tue, 17 Jun 2025 12:52:45 +0000</pubDate></item><item><title>Hookable methods in PWCommerce</title><link>https://processwire.com/talk/topic/31345-hookable-methods-in-pwcommerce/</link><description><![CDATA[<p>
	Hi everyone! <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a> I’ve been really enjoying testing PWCommerce and exploring its features. I'm currently digging into hookable methods, especially around extending things like the custom checkout customer form. <span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">I've reviewed </span><a href="https://github.com/kongondo/Padloper2Starter/tree/demo-2" style="background-color:rgb(255,255,255);font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';" rel="external nofollow">Demo 2</a><span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">, </span><a href="https://github.com/kongondo/Padloper2Starter/tree/demo-3" style="background-color:rgb(255,255,255);font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';" rel="external nofollow">Demo 3</a><span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">, and the </span><a href="https://docs.kongondo.com/hooks.html" style="background-color:rgb(255,255,255);font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';" rel="external nofollow">hook documentation</a><span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">, and also tried several example hooks shared in the forums, always keeping in mind the transition from </span><em style="color:rgb(53,60,65);font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">Padloper</em><span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';"> to </span><em style="color:rgb(53,60,65);font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">PWCommerce</em><span style="font-family:'-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">. That said, I haven’t been able to get any of those hooks to actually trigger, not even a simple log entry. I suspect this might be due to class or method name changes under the hood, but I'm not entirely sure. Does anyone know if there is an up-to-date way to inspect which classes and hookable methods are currently available in PWCommerce? </span>A class map, autoload overview, or even a debugging tip would be super helpful! Thanks in advance!
</p>
]]></description><guid isPermaLink="false">31345</guid><pubDate>Mon, 07 Jul 2025 13:02:24 +0000</pubDate></item><item><title>Introducing ProcessWire Commerce</title><link>https://processwire.com/talk/topic/31317-introducing-processwire-commerce/</link><description><![CDATA[<p>
	<span style="font-size:20px;"><span style="color:#9b59b6;"><strong>Padloper is dead! Long live Padloper! </strong></span></span>
</p>

<p>
	<span style="font-size:18px;"><span style="color:#d35400;">It is official! Padloper is now ProcessWire Commerce.</span></span>
</p>

<p>
	ProcessWire Commerce is a free, open-source <a href="https://processwire.com/talk/topic/31316-processwire-commerce-features/" rel="">fully featured</a> e-commerce module (plugin) for building and managing fully function online shops (stores) in ProcessWire. It is flexible, extensible, highly customisable, scalable, robust, multilingual by design and battle tested. 
</p>

<p>
	<span style="color:#16a085;"><strong><span style="font-size:18px;">Pro Support</span></strong></span>
</p>

<p>
	ProcessWire Commerce is designed to be easy to develop with and to use. For some, you might need extra reassurance that professional help will be available if you need it. Or, you might have a question about how to perform a certain thing or wish to support the project to ensure that any issues are dealt with quickly. Or you might want to sponsor a particular feature. If this is you, Pro Support and custom development can be <a href="https://processwireshop.pw/products/development-pro-support/" rel="external nofollow">purchased from my website</a>.
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Community Support</strong></span></span>
</p>

<p>
	These forums.
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Donations</strong></span></span>
</p>

<p>
	If you value my work or my work helps support your work or you just want to say thanks, <a href="https://processwireshop.pw/products/thank-you/" rel="external nofollow">please consider donating</a>. Thanks!
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Requests</strong></span></span>
</p>

<p>
	Modalities are still being worked out. Please note:
</p>

<ol>
	<li>
		I'll add features at my own pace; if and when I can (reasons for this discussed elsewhere in the forums). I'll focus on security, PRs and maintaining the project and major bug fixes.
	</li>
	<li>
		I hope community will contribute.
	</li>
	<li>
		Sponsored (pay for a feature) features: This can be by individuals or community driven. Please contact me for availability.
	</li>
</ol>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Known Bugs</strong></span></span>
</p>

<ol>
	<li>
		ProcessWire Commerce Admin GUI is broken in the <a href="https://processwire.com/blog/posts/new-processwire-admin-redesign/" rel="external">new admin theme</a>, i.e., ProcessWire 3.0.248 (or newer).
	</li>
	<li>
		Save + Exit and similar broken on some pages at some recent ProcessWire version. 
	</li>
	<li>
		Manually order creation broken (backend).
	</li>
</ol>

<p>
	<span style="color:#d35400;"><strong>Please file bug reports in the repo here</strong></span> - <a href="https://github.com/kongondo/ProcessWireCommerce/issues" rel="external nofollow">https://github.com/kongondo/ProcessWireCommerce/issues</a>.
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Contributing</strong></span></span>
</p>

<p>
	This is a community project. All contributions are welcome! We are still working out how the 'how'.
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Documentation</strong></span></span>
</p>

<p>
	Please see <a href="https://processwire.com/talk/topic/31315-processwire-commerce-documentation/" rel="">this thread</a>.
</p>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Other Important Stuff</strong></span></span>
</p>

<ol>
	<li>
		<a href="https://processwire.com/talk/topic/31314-migrating-to-processwire-commerce-from-padloper/" rel="">Migrating</a> from Padloper.
	</li>
	<li>
		<a href="https://processwire.com/talk/topic/31312-processwire-commerce-help-needed/" rel="">Community help</a> request.
	</li>
</ol>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Tech Stack</strong></span></span>
</p>

<ol>
	<li>
		ProcessWire (PHP).
	</li>
	<li>
		Vanilla JS
	</li>
	<li>
		htmx
	</li>
	<li>
		Alpine JS
	</li>
	<li>
		Tailwind CSS
	</li>
	<li>
		MySQL
	</li>
</ol>

<p>
	<span style="color:#16a085;"><span style="font-size:18px;"><strong>Download</strong></span></span>
</p>

<p>
	<a href="https://github.com/kongondo/ProcessWireCommerce" rel="external nofollow">Here you go</a>!
</p>
]]></description><guid isPermaLink="false">31317</guid><pubDate>Tue, 17 Jun 2025 14:22:39 +0000</pubDate></item><item><title>Padloper Becoming Open Source</title><link>https://processwire.com/talk/topic/31177-padloper-becoming-open-source/</link><description><![CDATA[<div style="background-color:#ffffff;color:#666666;font-size:large;">
	I am considering open-sourcing Padloper (and my other commercial modules). Please read and hopefully participate in the discussion in the Beer Garden (away from Google's prying eyes).
</div>

<div style="background-color:#ffffff;color:#666666;font-size:large;">
	 
</div>

<div style="background-color:#ffffff;color:#666666;font-size:large;">
	<iframe allowfullscreen="" data-embedauthorid="894" data-embedcontent="" data-embedid="embed5892085795" style="height:240px;max-width:502px;" data-embed-src="https://processwire.com/talk/topic/31176-open-sourcing-padloper/?do=embed"></iframe>
</div>

<div style="background-color:#ffffff;color:#666666;font-size:large;">
	 
</div>

<div style="background-color:#ffffff;color:#666666;font-size:large;">
	Thanks.
</div>
]]></description><guid isPermaLink="false">31177</guid><pubDate>Sun, 06 Apr 2025 12:53:21 +0000</pubDate></item><item><title>Padloper 011 Released</title><link>https://processwire.com/talk/topic/31109-padloper-011-released/</link><description><![CDATA[<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<span style="color:#2980b9;"><span style="font-size:22px;"><strong>Padloper 011</strong></span></span>
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	Padloper 011 (aka Padloper 2 version 011) is ready for download.
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<span style="color:#c0392b;"><span style="font-size:18px;"><strong>Requirements</strong></span></span>
</p>

<ol style="background-color:#ffffff;color:#555555;font-size:16px;">
	<li>
		<span style="color:#c0392b;">PHP&gt;= 8.2.0</span>
	</li>
	<li>
		<span style="color:#c0392b;">ProcessWire&gt;=3.0.200</span>
	</li>
</ol>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<strong><span style="font-size:18px;">New Features</span></strong>
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	The main new feature is <strong>webhooks</strong> for order payments. This should work with any payment provider that supports webhooks. In Padloper, this is currently implemented for Stripe. Documentation to follow.
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<strong><span style="font-size:18px;">Maintenance</span></strong>
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	Lots of bug fixes related to language and variants. I'll add list here later.
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	<strong><span style="font-size:18px;">Upgrading</span></strong>
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	Replace all files (not overwrite!). This is because some files have been deprecated, renamed or moved. Safest way to upgrade is to get rid of all existing Padloper files and folders under /site/modules/Padloper/ and then copy over the new 011 files and folders then do a module refresh.
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	 
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	Any questions or issues, please let me know.
</p>

<p style="background-color:#ffffff;color:#555555;font-size:16px;">
	Thanks.
</p>
]]></description><guid isPermaLink="false">31109</guid><pubDate>Tue, 11 Mar 2025 23:01:33 +0000</pubDate></item><item><title>Unable to install Padloper due to errors</title><link>https://processwire.com/talk/topic/30777-unable-to-install-padloper-due-to-errors/</link><description><![CDATA[<p>
	Hello <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>
</p>

<p>
	I purchased Padloper this afternoon and was eager to test it out. Unfortunately due to errors I am stuck.
</p>

<p>
	PW 2.0.242 on PHP 8.2.10 with only Language Support Module installed and one second language.<br />
	This is what I get when installing Shop:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="27505" data-ratio="78.27" width="948" alt="image.png.f396085f0d3346168b455387b846762b.png" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_12/image.png.f396085f0d3346168b455387b846762b.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" />
</p>

<p>
	As you can see, the SHOP menuitem in Admin is there.<br />
	So I ignored the error and tried to install some of the shop options, and got:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="27506" data-ratio="44.17" width="840" alt="image.png.128a2e05c11a494dcf399634578b828d.png" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_12/image.png.128a2e05c11a494dcf399634578b828d.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" />
</p>

<p>
	Out of clues I tried different PHP versions... but no success <span class="ipsEmoji">😢</span>
</p>

<p>
	Due to sufficient database backups I always can go back to pre-installs.
</p>

<p>
	Any hint?
</p>
]]></description><guid isPermaLink="false">30777</guid><pubDate>Sat, 14 Dec 2024 15:41:03 +0000</pubDate></item><item><title>Re-generate product variants not working</title><link>https://processwire.com/talk/topic/30703-re-generate-product-variants-not-working/</link><description><![CDATA[<p>
	Hi <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>,
</p>

<p>
	I'm not sure if this worked before or it is broken since updating.
</p>

<p>
	If I have a product that already has some variants, I can't seem to 'regenerate' additional variants. The button does not show. Could you check if this is the case? (I'm on version 11)
</p>

<p>
	Next to that I'm also getting <em>Uncaught TypeError: Cannot read properties of null (reading 'length') </em>from <em>Inputfieldtextags.js </em>when I have more then 1 Attribute selected.
</p>
]]></description><guid isPermaLink="false">30703</guid><pubDate>Tue, 03 Dec 2024 08:52:09 +0000</pubDate></item><item><title>Custom Fields for a Product</title><link>https://processwire.com/talk/topic/30764-custom-fields-for-a-product/</link><description><![CDATA[<p>
	Hi <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>
</p>

<p>
	I have a question, how can I add a group of custom fields for a product, that is, I require the client to provide me with additional information when selecting a product.
</p>

<p>
	For example, the client wants to buy a bracelet and wants to personalize it with his name, how do I make the bracelet product add an input field, where he can put the text he wants on his bracelet.
</p>

<p>
	Do you have any examples in the Starter Demos?
</p>

<p>
	Regards,
</p>
]]></description><guid isPermaLink="false">30764</guid><pubDate>Wed, 11 Dec 2024 16:36:03 +0000</pubDate></item><item><title>Padloper 010 Released</title><link>https://processwire.com/talk/topic/30275-padloper-010-released/</link><description><![CDATA[<p>
	<span style="font-size:22px;"><strong><span style="color:#16a085;">Padloper 010</span></strong></span>
</p>

<p>
	Padloper 010 (aka Padloper 2 version 010) is ready for download.
</p>

<p>
	<span style="color:#c0392b;"><span style="font-size:18px;"><strong>Requirements</strong></span></span>
</p>

<ol>
	<li>
		<span style="color:#c0392b;">PHP&gt;= 8.2.0</span>
	</li>
	<li>
		<span style="color:#c0392b;">ProcessWire&gt;=3.0.200</span>
	</li>
</ol>

<p>
	<strong><span style="font-size:18px;">Maintenance</span></strong>
</p>

<p>
	Padloper 010 is mainly a maintenance release:
</p>

<ol>
	<li>
		Fixes money rounding <a href="https://processwire.com/talk/topic/30007-tax-rounding-issue-and-proposed-solution/" rel="">bugs</a> found in <a href="https://processwire.com/talk/topic/29975-padloper-009-released/" rel="">Padloper 009</a> (and earlier). 
	</li>
	<li>
		Adds the Money for PHP <a href="https://www.moneyphp.org/" rel="external nofollow">Library</a> to handle monetary values in an easy and powerful way.
	</li>
	<li>
		Fixes money math issues when prices include tax.
	</li>
	<li>
		For the sake of internal maintenance, reorganises files and directory structure. 
	</li>
</ol>

<p>
	<strong><span style="font-size:18px;">Money Matters</span></strong>
</p>

<p>
	Specifically regarding '<em>prices include tax</em>', and I will be adding this to the docs, it is important that you display your prices in the frontend in a way that doesn't confuse consumers. This is not unique to Padloper but a general e-commerce issue. This means making careful decisions around displaying unit vs total prices as well as whether to include notes about potential rounding pence/cents issues in your shop's policy documents. Due to rounding issues (pence, cents, etc) when it comes to money, especially if quantity is more than 1, the math might look off. I.e., <span style="color:#8e44ad;">(item * quantity) + tax</span> IS NOT NECESSARILY EQUAL TO <span style="color:#2980b9;">(item + tax) * quantity</span>. See <a href="https://www.clever-age.com/en/vat-how-to-apply-it-correctly-on-an-e-commerce-site-or-a-marketplace-in-europe/" rel="external nofollow">this article</a> for a thorough discussion.
</p>

<p>
	<strong><span style="font-size:18px;">Breaking Changes</span></strong>
</p>

<p>
	There are a few unavoidable breaking changes due to code rationalisation.
</p>

<p>
	<u><span style="font-size:16px;">API</span></u>
</p>

<p>
	Some API had to be changed for maintenance and usage simplicity reasons. This affects checkout, cart and discounts. For instance:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">namespace</span><span class="pln"> </span><span class="typ">ProcessWire</span><span class="pun">;</span><span class="pln">


</span><span class="com"># OLD API</span><span class="pln">
$checkout </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">checkout</span><span class="pun">;</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> $checkout</span><span class="pun">-&gt;</span><span class="pln">render</span><span class="pun">(</span><span class="pln">$options</span><span class="pun">);</span><span class="pln">

</span><span class="com"># NEW API</span><span class="pln">
</span><span class="com">// $response = $padloper-&gt;render($options);// this will be deprecated in a future release</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">renderCheckout</span><span class="pun">(</span><span class="pln">$options</span><span class="pun">);</span><span class="pln">


</span><span class="com">##########</span><span class="pln">

</span><span class="com"># OLD API</span><span class="pln">
$cartRender </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">cartRender</span><span class="pun">;</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> $cartRender</span><span class="pun">-&gt;</span><span class="pln">editCart</span><span class="pun">();</span><span class="pln">

</span><span class="com"># NEW API</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">editCart</span><span class="pun">();</span><span class="pln">

</span><span class="com">##########</span><span class="pln">

</span><span class="com"># OLD API</span><span class="pln">
$cartRender </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">cartRender</span><span class="pun">;</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> $cartRender</span><span class="pun">-&gt;</span><span class="pln">viewCart</span><span class="pun">();</span><span class="pln">

</span><span class="com"># NEW API</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">viewCart</span><span class="pun">();</span></pre>

<p>
	<u><span style="font-size:16px;">HOOKS</span></u>
</p>

<p>
	Backend hooks rename:
</p>

<pre class="ipsCode">// OLD NAMING FORMAT
PadloperProcessRenderXXX
e.g. PadloperProcessRenderOrders

// NEW NAMING FORMAT
PadloperAdminRenderXXX
e.g. PadloperAdminRenderOrders</pre>

<p>
	Other hooks rename:
</p>

<pre class="ipsCode">// OLD NAMING FORMAT
PadloperXXX::methodName
e.g. PadloperUtilities::getProductWeight, PadloperCart::getProductPrice

// NEW NAMING FORMAT
Padloper::methodName
e.g. Padloper::getProductWeight, Padloper::getProductPrice</pre>

<p>
	 
</p>

<p>
	<strong><span style="font-size:18px;">Upgrading</span></strong>
</p>

<p>
	Replace all files (not overwrite!). This is because some files have been deprecated, renamed or moved. Safest way to upgrade is to get rid of all existing Padloper files and folders under /site/modules/Padloper/ and then copy over the new 010 files and folders then do a module refresh.
</p>

<p>
	<strong><span style="font-size:18px;">New Features</span></strong>
</p>

<p>
	The two new features are:
</p>

<ol>
	<li>
		<span style="color:#7f8c8d;"><span style="font-family:'Courier New', Courier, monospace;">$padloper-&gt;money()</span></span>; More information will be added to docs.
	</li>
	<li>
		Bank Name as a property (<span style="font-family:'Courier New', Courier, monospace;"><span style="color:#7f8c8d;">bankAccountName</span></span>) in the return value of $padloper-&gt;getShopBankDetails();. See request in this <a href="https://processwire.com/talk/topic/28555-feature-request-add-bank-account-details-under-general-settings/" rel="">topic</a>.
	</li>
</ol>

<p>
	<strong><span style="font-size:18px;">Next Steps</span></strong>
</p>

<p>
	As mentioned in Padloper 009 topic, the focus now will be the documentation.
</p>

<p>
	Any questions or issues, please let me know.
</p>

<p>
	Thanks.
</p>
]]></description><guid isPermaLink="false">30275</guid><pubDate>Tue, 06 Aug 2024 17:14:03 +0000</pubDate></item><item><title>Unable to process order payment due to session change</title><link>https://processwire.com/talk/topic/30295-unable-to-process-order-payment-due-to-session-change/</link><description><![CDATA[<p>
	Hi <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>,
</p>

<p>
	We are experiencing a lot of problems with orders that result in 500 errors after payment has been done and user is being redirected to the shop. First a couple but now very frequently. I found out this happens when users go to the website inside Facebook for example. They buy a product and get redirected to their default browser. (Usually the client is being redirected to their bank app) The browser is not aware of the session and the order is not being updated. This also happens when a user uses another browser then the default.
</p>

<p>
	Using 009 and Stripe as payment provider.<br />
	<br />
	I believe this is where it happens;<br />
	Cannot instantiate abstract class ProcessWire\PadloperPayment<br />
	<br />
	TraitPadloperProcessOrderCaptureOrder.php:18<br />
	$this-&gt;setPaymentProvider($this-&gt;session-&gt;paymentProviderID);<br />
	<br />
	I hope you can help me with this issue.
</p>
]]></description><guid isPermaLink="false">30295</guid><pubDate>Sun, 11 Aug 2024 12:11:26 +0000</pubDate></item><item><title>Padloper 009: Discounts Feature</title><link>https://processwire.com/talk/topic/29971-padloper-009-discounts-feature/</link><description><![CDATA[<p>
	<span style="background-color:#ffffff;color:#555555;font-size:16px;">An example of how to use new discounts feature in Padloper 009 in the frontend.</span>
</p>

<p>
	<span style="background-color:#ffffff;color:#555555;font-size:16px;">Important things to note:</span>
</p>

<ol>
	<li>
		<span style="background-color:#ffffff;color:#555555;font-size:16px;">You can validate and apply discounts programmatically or by capturing details using your custom form.</span>
	</li>
	<li>
		<span style="background-color:#ffffff;color:#555555;font-size:16px;">Padloper does not output a discount input since discounts are an optional feature.</span>
	</li>
	<li>
		<span style="background-color:#ffffff;color:#555555;font-size:16px;">Padloper provides a discount API that allows you to validate, apply, invalidate, remove, etc. discounts from an order.</span>
	</li>
	<li>
		<span style="background-color:#ffffff;color:#555555;font-size:16px;">You can submit your discount code form to the server however you wish, i.e. ajax or non-ajax.</span>
	</li>
</ol>

<p>
	<span style="color:#2980b9;"><span style="background-color:rgb(255,255,255);font-size:16px;">The example below applies a discount with code 'SAVE10'. This is a 10% whole order discount. The example uses htmx (ajax). The form is in the checkout page but the ajax endpoint can be a single place, e.g. your home page.</span></span>
</p>

<p>
	<u><span style="background-color:#ffffff;color:#555555;font-size:16px;">Example Apply Discount Form Screenshots</span></u>
</p>

<p>
	<em>Discount form on checkout page</em>
</p>

<p>
	<img alt="326010892_2024-08-31111613_apply_discount_003.png.04cd85bffc7b4ece26ba3e3f1af7ada3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27119" data-ratio="50.92" style="height:auto;" width="654" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_08/326010892_2024-08-31111613_apply_discount_003.png.04cd85bffc7b4ece26ba3e3f1af7ada3.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" />
</p>

<p>
	<em>Discount validation failed</em>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="27117" href="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_08/2105542451_2024-08-31103513_apply_discount_001.png.438d023e15b5fbf18788fb3cf61d77ba.png" rel=""><img alt="220098758_2024-08-31103513_apply_discount_001.thumb.png.d79d8d7ea59ee9889be8147ffeaf5df5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27117" data-ratio="75.08" style="height:auto;" width="999" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_08/220098758_2024-08-31103513_apply_discount_001.thumb.png.d79d8d7ea59ee9889be8147ffeaf5df5.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<em>Discount applied successfully</em>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="27118" href="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_08/862518728_2024-08-31105813_apply_discount_002.png.790c66a0eca29ae04a143d154c6fcff2.png" rel=""><img alt="1982156970_2024-08-31105813_apply_discount_002.thumb.png.51f3a1a66159c3a55bbf34cadedd1ceb.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27118" data-ratio="75.08" style="height:auto;" width="999" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_08/1982156970_2024-08-31105813_apply_discount_002.thumb.png.51f3a1a66159c3a55bbf34cadedd1ceb.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<u><font color="#555555">Example Apply Discount Ajax Form Handling </font></u>
</p>

<p>
	<font color="#555555">Please see the comments in the code.</font>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">namespace</span><span class="pln"> </span><span class="typ">ProcessWire</span><span class="pun">;</span><span class="pln">

</span><span class="com">// part of checkout template file. (/checkout/ page)</span><span class="pln">

</span><span class="com">// HANDLE HTMX AJAX REQUESTS</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$config</span><span class="pun">-&gt;</span><span class="pln">ajax</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
	$out </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">

	</span><span class="com">/////////////////////////</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$input</span><span class="pun">-&gt;</span><span class="pln">post</span><span class="pun">-&gt;</span><span class="pln">order_apply_discount_code</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="com">// HANDLE DISCOUNTS APPLY/REDEEMING</span><span class="pln">
		</span><span class="com">// -----------------------</span><span class="pln">
		$out </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
		</span><span class="com">// HANDLE REQUIRED INPUTS FOR DISCOUNT: code, email and country</span><span class="pln">

		</span><span class="com">// 1. code</span><span class="pln">
		</span><span class="com">// CUSTORM FORM TEXT INPUT FOR DISCOUNT CODE ('order_apply_discount_code')</span><span class="pln">
		$dirtyCode </span><span class="pun">=</span><span class="pln"> $input</span><span class="pun">-&gt;</span><span class="pln">post</span><span class="pun">-&gt;</span><span class="pln">order_apply_discount_code</span><span class="pun">;</span><span class="pln">
		$code </span><span class="pun">=</span><span class="pln"> $sanitizer</span><span class="pun">-&gt;</span><span class="pln">sanitize</span><span class="pun">(</span><span class="pln">$dirtyCode</span><span class="pun">,</span><span class="pln"> </span><span class="str">"text,selectorValue"</span><span class="pun">);</span><span class="pln">
		</span><span class="com">// 2. customer email</span><span class="pln">
		$customerEmail </span><span class="pun">=</span><span class="pln"> $sanitizer</span><span class="pun">-&gt;</span><span class="pln">email</span><span class="pun">(</span><span class="pln">$input</span><span class="pun">-&gt;</span><span class="pln">post</span><span class="pun">-&gt;</span><span class="pln">order_apply_discount_customer_email</span><span class="pun">);</span><span class="pln">
		</span><span class="com">// 3. customer country</span><span class="pln">
		$customerShippingCountryID </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $input</span><span class="pun">-&gt;</span><span class="pln">post</span><span class="pun">-&gt;</span><span class="pln">order_apply_discount_customer_shipping_country</span><span class="pun">;</span><span class="pln">


		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$code </span><span class="pun">&amp;&amp;</span><span class="pln"> $customerEmail </span><span class="pun">&amp;&amp;</span><span class="pln"> $customerShippingCountryID</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
			</span><span class="com">// GOOD TO GO: all required values are present</span><span class="pln">

			</span><span class="com">// VALIDATE AND SET THE DISCOUNT TO THE ORDER IF VALID</span><span class="pln">
			</span><span class="com">/** @var WireData $result */</span><span class="pln">
			$result </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">validateAndSetDiscount</span><span class="pun">(</span><span class="pln">$code</span><span class="pun">,</span><span class="pln"> $customerEmail</span><span class="pun">,</span><span class="pln"> $customerShippingCountryID</span><span class="pun">);</span><span class="pln">
			</span><span class="com">// -------</span><span class="pln">
			</span><span class="com">// prepare message</span><span class="pln">

			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$result</span><span class="pun">-&gt;</span><span class="pln">isValid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
				</span><span class="com">// discount validation passed</span><span class="pln">
				$discountType </span><span class="pun">=</span><span class="pln"> $result</span><span class="pun">-&gt;</span><span class="pln">discountType</span><span class="pun">;</span><span class="pln">
				$discountValue </span><span class="pun">=</span><span class="pln"> $result</span><span class="pun">-&gt;</span><span class="pln">discountValue</span><span class="pun">;</span><span class="pln">

				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$padloper</span><span class="pun">-&gt;</span><span class="pln">isFixedDiscount</span><span class="pun">(</span><span class="pln">$discountType</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					</span><span class="com">// FIXED DISCOUNTS</span><span class="pln">
					$discountValueAsCurrency </span><span class="pun">=</span><span class="pln"> $padloper</span><span class="pun">-&gt;</span><span class="pln">getValueFormattedAsCurrencyForShop</span><span class="pun">(</span><span class="pln">$discountValue</span><span class="pun">);</span><span class="pln">
					</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$padloper</span><span class="pun">-&gt;</span><span class="pln">isFixedPerOrderDiscount</span><span class="pun">(</span><span class="pln">$discountType</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
						</span><span class="com">// fixed per order discount</span><span class="pln">
						$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A discount of {$discountValueAsCurrency} will be applied on the order at checkout."</span><span class="pun">;</span><span class="pln">
					</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
						</span><span class="com">// fixed per item discount</span><span class="pln">
						$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A discount of {$discountValueAsCurrency} will be applied on each eligible item at checkout."</span><span class="pun">;</span><span class="pln">
					</span><span class="pun">}</span><span class="pln">
				</span><span class="pun">}</span><span class="pln"> elseif </span><span class="pun">(</span><span class="pln">$padloper</span><span class="pun">-&gt;</span><span class="pln">isPercentageDiscount</span><span class="pun">(</span><span class="pln">$discountType</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					</span><span class="com">// PERCENTAGE DISCOUNTS</span><span class="pln">
					</span><span class="com">// @note: you can be more spefic, e.g. whole order percentage versus selected items percentage discount. See the API docs for discount methods in Padloper</span><span class="pln">
					$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A discount of {$discountValue}% will be applied on eligible items at checkout."</span><span class="pun">;</span><span class="pln">

				</span><span class="pun">}</span><span class="pln"> elseif </span><span class="pun">(</span><span class="pln">$padloper</span><span class="pun">-&gt;</span><span class="pln">isFreeShippingDiscount</span><span class="pun">(</span><span class="pln">$discountType</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					</span><span class="com">// FREE SHIPPING DISCOUNT</span><span class="pln">
					$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Free shipping will be applied at checkout."</span><span class="pun">;</span><span class="pln">
				</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					</span><span class="com">// BOGO DISCOUNT</span><span class="pln">
					</span><span class="com">// TODO</span><span class="pln">

				</span><span class="pun">}</span><span class="pln">

				</span><span class="com">// just in case this discount has already been applied to this order</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$result</span><span class="pun">-&gt;</span><span class="pln">isAlreadyApplied</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"This discount has already been applied to the order. {$message}"</span><span class="pun">;</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
			</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
				</span><span class="com">// DISCOUNT VALIDATION FAILED</span><span class="pln">
				</span><span class="com">// @note: $result-&gt;notice will give you the exact reason validation failed.</span><span class="pln">
				$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sorry, the specified discount cannot be applied to this order. Please amend your basket and/or your customer details."</span><span class="pun">;</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
			</span><span class="com">// MISSING DISCOUNT CODE AND/OR CUSTOMER EMAIL AND/OR CUSTOMER SHIPPING COUNTRY</span><span class="pln">
			$message </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Please ensure that you specify a discount code, your email address and shipping country"</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">

		</span><span class="com">// OUTPUT RESPONSE FOR HTMX</span><span class="pln">
		</span><span class="com">// @note: currently this message replaces existing ones; you can change this using htmx attributes such as oob, target, etc</span><span class="pln">
		$out </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"&lt;p class='mt-3'&gt;$message&lt;/p&gt;"</span><span class="pun">;</span><span class="pln">

	</span><span class="pun">}</span><span class="pln">
	</span><span class="com">// -----------</span><span class="pln">
	echo $out</span><span class="pun">;</span><span class="pln">
	</span><span class="com">// exit;</span><span class="pln">
	$this</span><span class="pun">-&gt;</span><span class="pln">halt</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">// ---------------</span><span class="pln">
</span><span class="com">// USUAL CONTENT</span><span class="pln">

</span><span class="com">// Primary content is the page body copy</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> $page</span><span class="pun">-&gt;</span><span class="pln">body</span><span class="pun">;</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<font color="#555555">Thanks.</font>
</p>
]]></description><guid isPermaLink="false">29971</guid><pubDate>Sun, 05 May 2024 16:16:24 +0000</pubDate></item><item><title>Adding discount feature to custom checkout form</title><link>https://processwire.com/talk/topic/30347-adding-discount-feature-to-custom-checkout-form/</link><description><![CDATA[<p>
	I'm having a little trouble setting up the discount feature. I'm using is_custom_form, I tried adding a discount field to the form, but withouth success . Does anybody have this working already? <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/2189-alexm/?do=hovercard" data-mentionid="2189" href="https://processwire.com/talk/profile/2189-alexm/" rel="">@alexm</a> maybe? Any pointers are welcome.
</p>
]]></description><guid isPermaLink="false">30347</guid><pubDate>Wed, 28 Aug 2024 08:03:03 +0000</pubDate></item><item><title>Feature Request - Add bank account details under General Settings</title><link>https://processwire.com/talk/topic/28555-feature-request-add-bank-account-details-under-general-settings/</link><description><![CDATA[<p>
	Hey <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a> hope all is well. Here's a little feature request that I think may tie in nicely, especially for those using PaymentInvoice as an option.
</p>

<p>
	A fieldset for Bank Account Details that would store Bank Name, Sort Code and Account Number. This could then be automatically displayed on invoices, which is more or less a necessity to have on invoice if you are offering people to check out using Invoice as the payment option.
</p>

<p>
	<span class="ipsEmoji">??</span>
</p>
]]></description><guid isPermaLink="false">28555</guid><pubDate>Wed, 31 May 2023 10:54:19 +0000</pubDate></item><item><title>Tax Rounding issue (and proposed solution)</title><link>https://processwire.com/talk/topic/30007-tax-rounding-issue-and-proposed-solution/</link><description><![CDATA[<p>
	Hi <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>
</p>

<p>
	I'm just testing the tax calculations and the rounding doesn't seem to be handled quite right. 
</p>

<p>
	The product is £3.50 and charge taxes on this product is enabled.<br />
	The store also has 'All taxes are included in stated prices' checked under tax settings and tax is set at 20%.
</p>

<p>
	On cart page the total for 10 of this item is £35.
</p>

<p>
	Once I get to the checkout confirmation the total after the tax calculation is £34.92 (see screenshot)
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_05/1728510808_Screenshot2024-05-16at23_25_11.png.a4b46bac5ac6d64d650a94cdc5f91201.png" data-fileid="26361" data-fileext="png" rel=""><img alt="Screenshot 2024-05-16 at 23.25.11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26361" data-ratio="75" style="height:auto;" width="1000" data-src="//processwire-forums.s3.us-west-2.amazonaws.com/monthly_2024_05/1457123365_Screenshot2024-05-16at23_25_11.thumb.png.c5718792689a0cda7245a80087c22586.png" src="https://processwire.com/talk/applications/core/interface/js/spacer.png" /></a>
</p>
]]></description><guid isPermaLink="false">30007</guid><pubDate>Thu, 16 May 2024 22:25:51 +0000</pubDate></item><item><title>Padloper 009 Released</title><link>https://processwire.com/talk/topic/29975-padloper-009-released/</link><description><![CDATA[<h1 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Padloper 009</span></b>
</h1>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">I am pleased to announce the release of Padloper 009! It has been a minute! I apologise for the delay. </span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Padloper 009 introduces a number of new features, bug fixes (especially in Multilingual sites) and improves overall code efficiency.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Credits</span></b>
</p>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Before I get into the details, I would like to say massive thanks for all who have contributed to this release in various ways. You have contacted me via the forums, via PM and via email to report bugs, test Padloper and suggest and sponsor new features. In particular, I would like to thank (in no specific order) <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/6639-spinbox/?do=hovercard" data-mentionid="6639" href="https://processwire.com/talk/profile/6639-spinbox/" rel="">@Spinbox</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/2189-alexm/?do=hovercard" data-mentionid="2189" href="https://processwire.com/talk/profile/2189-alexm/" rel="">@alexm</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/505-joe_g/?do=hovercard" data-mentionid="505" href="https://processwire.com/talk/profile/505-joe_g/" rel="">@joe_g</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/2795-ank/?do=hovercard" data-mentionid="2795" href="https://processwire.com/talk/profile/2795-ank/" rel="">@ank</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/3937-csaggocom/?do=hovercard" data-mentionid="3937" href="https://processwire.com/talk/profile/3937-csaggocom/" rel="">@csaggo.com</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/5468-jan-fromm/?do=hovercard" data-mentionid="5468" href="https://processwire.com/talk/profile/5468-jan-fromm/" rel="">@Jan Fromm</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/1-pete/?do=hovercard" data-mentionid="1" href="https://processwire.com/talk/profile/1-pete/" rel="">@Pete</a>, <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/3906-sonia-margoll%C3%A9/?do=hovercard" data-mentionid="3906" href="https://processwire.com/talk/profile/3906-sonia-margoll%C3%A9/" rel="">@Sonia Margollé</a> and <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/4360-kalimati/?do=hovercard" data-mentionid="4360" href="https://processwire.com/talk/profile/4360-kalimati/" rel="">@kalimati</a></span></b>. <b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Whilst I will not name those who contacted me privately, please accept my gratitude for your help. Apologies if I forgot to give anyone a mention! Massive thanks to <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/2-ryan/?do=hovercard" data-mentionid="2" href="https://processwire.com/talk/profile/2-ryan/" rel="">@ryan</a> for ProcessWire.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Padloper 009 is the most battle-tested Padloper yet! It has been tested and developed on high volume sites, sites that require lots of customisations and multilingual sites whose default language is not English. This robust development has helped fix bugs that I would not have been aware of otherwise as well as new ideas and features to improve the API, workflow and GUI of Padloper. Many of the suggested features have made it into this version. A few others are planned for the future.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">There is a lot to talk about in this version. Below I’ll just give a summary of the changes and where necessary, create separate topics to discuss some of the new features.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Although Padloper 009 has undergone thorough testing, there might, inevitably, be some bugs. If you find one, please let me know in the forums under a separate topic. Thanks!</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Changes</span></b>
</p>

<h2 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:16pt;vertical-align:baseline;">Features</span></b>
</h2>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Home</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Customisable dashboard. You can render your own dashboard by creating a template partial named ‘</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">padloper-process-render-shop-home.php</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’ and placing it at ’</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/site/templates/padloper/backend/padloper-process-render-shop-home.php</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’. Please see this <a href="https://processwire.com/talk/topic/29970-padloper-009-customisable-dashboards/" rel="">thread</a> for more details.</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Orders</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Customisable single order view. You can render your own dashboard by creating a template partial named ‘</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">padloper-process-render-orders.php</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’ and placing it at ’</span><span style="color:#0033cc;"><span style="background-color:transparent;font-size:11pt;vertical-align:baseline;">/site/templates/padloper/backend/padloper-process-render-orders.php</span></span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’. Please see this <a href="https://processwire.com/talk/topic/29970-padloper-009-customisable-dashboards/" rel="">thread</a> for more details.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Order status actions: Can be applied manually for order, payment and shipping status.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Quick filters e.g. ‘open’, ‘cancelled’, ‘abandoned’, etc. </span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Products</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Configurable pricing fields. Sales and Normal Price (e..g WooCommerce) vs Price and Compare Price (e.g. Shopify). Please see this <a href="https://processwire.com/talk/topic/29974-padloper-009-configurable-product-price-fields/" rel="">topic</a> for more details.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Categories can optionally be named ‘Collections’. Configurable via ‘</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/admin/shop/configure-padloper/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			Bulk clone existing products.
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			Allow duplicate titles for products. 
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Discounts (new)</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">4 discount types: Orders, products, free shipping and BOGO (Buy One/Get One - unfinished; see below). Can be applied manually or automatically at checkout. Please see this <a href="https://processwire.com/talk/topic/29971-padloper-009-discounts-feature/" rel="">thread</a> for more details.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add/remove via  ‘</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/admin/shop/configure-padloper/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’. </span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Part sponsored by <a href="https://www.nifty.solutions/" rel="external nofollow">Nifty Solutions</a>. Thanks <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/1-pete/?do=hovercard" data-mentionid="1" href="https://processwire.com/talk/profile/1-pete/" rel="">@Pete</a>!</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Customers and Customer Groups (new)</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Customer creation and management. Please see this <a href="https://processwire.com/talk/topic/29972-padloper-009-customers-and-customer-groups/" rel="">thread</a> for more details.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Customer Groups. This feature will be expanded in the future. Please see the above thread for more info.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add/remove via  ‘</span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/admin/shop/configure-padloper/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">’. </span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">General Settings</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Redone interface</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add ‘from email’ settings..</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add bank details settings..</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add order ‘least and most’ sales thresholds for orders’ quick filters.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Settings for ‘low stock’ and ‘price fields’ for products.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Add tab ‘user interface’ with settings for shop navigation (can have side menu and/or dropdown navigation) and search features (can use quick filters and/or advanced filter).</span></b>
		</p>
	</li>
</ol>

<p>
	 
</p>

<p>
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Other Backend</span></b>
</p>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Quick filters on various dashboards.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Custom Dashboards for Home and Orders. More to be added in future.</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Frontend</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Custom shop root page. This allows you to move product-related pages and legal pages to live under a frontend-accessible page. Configurable via /admin/shop/configure-padloper/. Please see this <a href="https://processwire.com/talk/topic/29973-padloper-009-custom-shop-root-page/" rel="">topic</a> for more details. For instance, </span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/myshop/products/, /collections/, /products/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">, etc. This means you can directly access products on the frontend using their real paths/urls instead of using URL segments. This setting can be changed anytime via configuring Padloper at </span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/admin/shop/configure-padloper/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Custom URL segments for checkout out. E.g. instead of </span><span style="color:#0000ff;"><span style="background-color:transparent;font-size:11pt;vertical-align:baseline;">/checkout/success/</span></span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">, </span><span style="color:#0000ff;"><span style="background-color:transparent;font-size:11pt;vertical-align:baseline;">/checkout/confirmation/</span></span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">, etc., you can have custom, multilingual segments, e.g. </span><span style="color:#0000ff;"><span style="background-color:transparent;font-size:11pt;vertical-align:baseline;">/checkout/order-success/</span></span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">, </span><span style="color:#0000ff;"><span style="background-color:transparent;font-size:11pt;vertical-align:baseline;">/checkout/tilaus-menestys/</span></span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">, etc.</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Miscellaneous</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Various UI improvements.</span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Dashboards tables sorted by title by default.</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Breaking Changes</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Template partials for the frontend have been moved from </span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/site/templates/padloper/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;"> to </span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">/site/templates/padloper/frontend/</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">.</span></b>
		</p>
	</li>
</ol>

<h3 dir="ltr">
	<b><span style="background-color:transparent;color:#434343;font-size:13.999999999999998pt;vertical-align:baseline;">Deprecated</span></b>
</h3>

<ol>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">‘Search Feature’ on the home dashboard has been removed. Use ProcessWire in-built search instead. Padloper hooks into it to group padloper related results. </span></b>
		</p>
	</li>
	<li dir="ltr" style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">
		<p dir="ltr">
			<b><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">PadloperProcessOrder::orderSaved</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;"> now becomes </span><span style="background-color:transparent;color:#0000ff;font-size:11pt;vertical-align:baseline;">PadloperProcessOrder::orderSavedHook</span><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">.The new approach is to have all hooks in one please for easier maintenance and usage.</span></b>
		</p>
	</li>
</ol>

<h2 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:16pt;vertical-align:baseline;">Bug Fixes</span></b>
</h2>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Please see the </span><a href="https://processwire.com/talk/topic/27208-bugs-and-fixes/" rel=""><span style="background-color:transparent;color:#1155cc;font-size:11pt;vertical-align:baseline;">bug fixes topic</span></a><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">.</span></b>
</p>

<h1 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">How to Get It</span></b>
</h1>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Padloper 009 is available at <a href="https://processwireshop.pw/products/padloper/" rel="external nofollow">https://processwireshop.pw/products/padloper/</a>. For those renewing subscriptions, you will have to wait a bit, apologies. I am finalising work on renewal codes. I am hoping this will be ready by tomorrow. Any issues with the (revamped ?) site please let me know <span class="ipsEmoji">?</span>.</span></b>
</p>

<h1 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Upgrading</span></b>
</h1>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">This is a major upgrade. Lots of code has been moved around. Best way to upgrade files is to empty the contents of the root Padloper folder and upload the contents of the new version there. There are no data model changes affecting existing features but as always, back up your site(s) first!</span></b>
</p>

<h1 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Next Steps</span></b>
</h1>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">In addition to fixing any bugs that show in 009, these are the plans for the next 3-6 months, possibly more, in order of priority. No new features will be introduced until these are completed.</span></b>
</p>

<h2 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:16pt;vertical-align:baseline;">Documentation</span></b>
</h2>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Documentation will cover all topics including installation, backend and frontend use and the API. ‘How to guides’ will consist of short videos with corresponding textual content on a dedicated Padloper site.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:16pt;vertical-align:baseline;">Discounts</span></b>
</p>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Finish work on the Buy One Get One (BOGO) Discount and automatic discounts.</span></b>
</p>

<p>
	<b><span style="background-color:transparent;color:#000000;font-size:16pt;vertical-align:baseline;">Gift Cards</span></b>
</p>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Finish work on Gift Cards.</span></b>
</p>

<h1 dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:20pt;vertical-align:baseline;">Road Map</span></b>
</h1>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">I will talk about this when the ‘next steps’ tasks have been completed.</span></b>
</p>

<p dir="ltr">
	 
</p>

<p dir="ltr">
	<b><span style="background-color:transparent;color:#000000;font-size:11pt;vertical-align:baseline;">Thanks!</span></b>
</p>
]]></description><guid isPermaLink="false">29975</guid><pubDate>Sun, 05 May 2024 16:43:10 +0000</pubDate></item><item><title>Order of displaying products</title><link>https://processwire.com/talk/topic/29137-order-of-displaying-products/</link><description><![CDATA[<p>
	Is there a way to change the order of the products in the webshop.
</p>

<p>
	Thanks,
</p>

<p>
	Ank
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">29137</guid><pubDate>Tue, 17 Oct 2023 21:48:22 +0000</pubDate></item><item><title>Presale question: Multiple carts?</title><link>https://processwire.com/talk/topic/30222-presale-question-multiple-carts/</link><description><![CDATA[<p>
	Hey, I have a presale question. Does Padloper 2 supports multiple carts?<br />
	For example, one cart will only handle the physical products and the other cart only the digital products. I need those 2 carts to be separated. Is that even possible?
</p>
]]></description><guid isPermaLink="false">30222</guid><pubDate>Thu, 18 Jul 2024 03:05:23 +0000</pubDate></item><item><title>Padloper 2 add CSV export to order bulk edit</title><link>https://processwire.com/talk/topic/29042-padloper-2-add-csv-export-to-order-bulk-edit/</link><description><![CDATA[<p>
	Hey <a contenteditable="false" data-ipshover="" data-ipshover-target="https://processwire.com/talk/profile/894-kongondo/?do=hovercard" data-mentionid="894" href="https://processwire.com/talk/profile/894-kongondo/" rel="">@kongondo</a>,
</p>

<p>
	thank you for your wonderful work so far! I'm almost done implementing a shop for a local café and roastery in germany. We try to archive a csv export on the order bulk edit menu and i couldn't really find a good way to implement this, could you help with that? Is there a hook to use?
</p>

<p>
	The idea is to generate a csv file with shipment data of the selected orders if the state is changed to e.g. 'order delivered'. This could be used to generate dhl shipping labels. Then the shipping info doesn't have to be manually transferred.
</p>

<p>
	Kind regards,<br />
	Guido
</p>
]]></description><guid isPermaLink="false">29042</guid><pubDate>Fri, 22 Sep 2023 09:00:17 +0000</pubDate></item></channel></rss>
