Page 1 of 4

X3 Cart Plugin [under construction] 🚧

Posted: 01 May 2022, 09:28
by mjau-mjau
Cart demo can be found here:
cart.photo.gallery

Dear folks, I'm in the middle of creating a new X3 "cart" plugin, as requested and as promised [1, 2, 3]. I am making this post while creating the plugin, because I am looking for feedback. Basically, the cart plugin allows website visitors to check/add images to cart, and then the cart offers two distinct features (you can enable one, or both):
  • "Send order" for selected cart items. Email gets sent to website owner.
  • Download selected cart items.
To get an idea of what it looks like (without design!), please see screenshot:
Image

Cart Download
This option basically allows the visitor to download all selected items as a zip file. It wasn't initially the plan to include this feature, but it goes nicely alongside the cart plugin. It can of course be enabled or disabled, regardless of the "order" option, which is the main concept of the cart plugin. The download feature is pretty straight-forward, and I do not require any feedback.

Cart Send Order
This option allows visitors to "send order" for selected cart items, in which case the website owner (you) will receive an email with a list of images selected by user. This feature is generic/multi-purpose, and allows the website owner (you) to serve a response, for example print, serve originals or retouch photos (etc). The cart can be enabled/disabled on a per-page basis. As I started the development, several questions arose, and I would appreciate any feedback:

Cart details and display order

As in the screenshot above, the cart items will generally include a preview image, file name and path. I can't think of any other details. The cart may of course include items from multiple galleries. When user adds a new item to cart, it will get added to TOP of the cart, as that is most intuitive and easy to track ... This means that the display order in the cart will NOT match the order of images in the gallery of course. * If cart items get added into the middle of the cart to match gallery order, it would be impossible for the user to track new items they add.

User submission identification?
How do you intend to identify the user that has submitted the order? In some cases, it may be a "protected" gallery, or you may be in direct contact with a user who is about to submit an order, in which case identification is easy. However, how to identify unknown requests? As far as I can think, we will need name, email and perhaps even message input fields that must be populated by the user when submitting the order. I don't see any other way to identify the user that makes the order.

Dummy orders
Unless you enable the cart only for protected galleries, you may get "dummy" orders from unknown users. This could be random visitors, fake emails (users testing functionality), or even known users that send multiple orders (maybe their first order was wrong). There is no logical way for X3 to solve this. When you get an email order, you will either ignore it or reply by using your own logic.

Global cart or per-page cart?
The cart will be "global" by default, meaning the visitor can add cart items from multiple galleries before submitting the order. I am hoping there is no need for isolated per-page carts, as that would be very complicated to implement. In such case, when navigating between pages, the cart would have to empty and update itself to show only selected items from current gallery. Seems confusing for the visitor also.

Orders storage JSON
For convenience, I have already implemented a method to store all orders in JSON format /config/cart/order.{DATE}.json. This is mainly backup, as it allows you to lookup orders without using email. It would be possible to build an interface for this from the panel, although that would be a lot of work :tired_face:

Changed file names and deleted files
There is no way for X3 to track changes to file paths that may affect existing cart orders. For example, if you delete, move or rename images, you may be breaking links in existing cart order emails (and stored JSON files). In most cases, you will deal with orders as soon as they are received, so it won't be a problem.

Email template
When an order is submitted, X3 will send an email to website owner (you) with a clickable list of all images. I can't see what else we can add to the email template to make it more useful. Basically, it would look something like this:
Code
{name}
{email}
{page} (because it might be useful, even if images are added from multiple galleries)

{message} (because you might need special instructions from the client)

[b]Cart[/b]
link/to/image1.jpg
link/to/image2.jpg
link/to/image3.jpg
Do we need custom template option?

This cart feature is not without logical challenges. Is there anything else required? Any useful feedback appreciated!

Re: X3 Cart Plugin [under construction] 🚧

Posted: 01 May 2022, 16:59
by gxlucas
any way to limit number in the card per costumer or per gallery ?

Re: X3 Cart Plugin [under construction] 🚧

Posted: 02 May 2022, 00:02
by mjau-mjau
gxlucas wrote: any way to limit number in the card per costumer or per gallery ?
It could be an option, although I don't quite see the point. If there is a limit, it means client may attempt to add to cart, but nothing will get added. Or there be some alert that displays "Your cart is full! Please remove some items if you want to add new ones.".

Re: X3 Cart Plugin [under construction] 🚧

Posted: 02 May 2022, 08:27
by GeoPal
This is a great functionality and at the same time not too complicated. Thanks for adding it, I can think of at least  2 scenarios where I can use it. No suggestions so far. Maybe only to be able easily to replace text "Order" and "Cart" with something else as per different use. Like you said, it could be order, send images for retouching, request original resolution, etc.
G

Re: X3 Cart Plugin [under construction] 🚧

Posted: 03 May 2022, 10:29
by Vulcano
Sounds great and also good thoughts about the cart plugin.

I´m thinking of using the plugin as proofing solution for the clients, therefore it should also be nice, that the selected picture names could be exported to a txt file. The txt file should be in 2 different formats:
Client selected DSC0122.jpg DSC0134.jpg DSC0145.jpg

Format 1 for Capture One users: DSC0122 DSC0134 DSC0145
Format 2 for Lightroom users: DSC0122, DSC0134, DSC0145

It could also be a possibility to include the (selected) format into the mail, which the photographer will get.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 03 May 2022, 22:47
by mjau-mjau
Vulcano wrote:I´m thinking of using the plugin as proofing solution for the clients, therefore it should also be nice, that the selected picture names could be exported to a txt file. The txt file should be in 2 different formats:
Client selected DSC0122.jpg DSC0134.jpg DSC0145.jpg

Format 1 for Capture One users: DSC0122 DSC0134 DSC0145
Format 2 for Lightroom users: DSC0122, DSC0134, DSC0145
It's not clear what this txt file is for. Can you import it into Capture One and Lightroom and then it automatically opens the files or something? How does it know the image paths? I just see an array of files names without path and extension.
GeoPal wrote:replace text "Order" and "Cart"
Yep. All texts will be replaceable.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 04 May 2022, 01:37
by Vulcano
mjau-mjau wrote:It's not clear what this txt file is for. Can you import it into Capture One and Lightroom and then it automatically opens the files or something? How does it know the image paths? I just see an array of files names without path and extension.
With the file names you can automatically select all files in Capture One/Lightroom, which the client marked. It's not necessary to include image paths, it's just working with the file names. This could also be solved, that the file names can be sent as text in the body of the mail, so it's not necessary to include a extra txt file. 

It's mainly for password protected galleries, which is normally one shooting with a client. This feature would save enormously time, when a customer selected e.g. 30 out of 300 pictures. So you would have the selection of the customer via seconds.


I will copy you the relevant text passage from the PicDrop website, that it is more clear for you:

Many image editing programs allow you to use the file search to display exactly the images of an image selection you or your clients made in picdrop. This saves you the trouble of searching for each individual file. Here we show you how to do it:

Copy the filter text to your Clipboard (Annotation: These are the file names without extension)

Capture One:
  • Open in the menu bar the item Select > Select by > File name list ...
  • Paste the text from the clipboard into the search field. 
  • Select "Space" as separator under the search field and "Ignore file extension".
  • Click OK. 
  • Only the searched images will be displayed in the browser.
Lightroom:
  • Open the folder of the shooting in Lightroom’s Library mode.
  • Press the "<" key (to the left of the Z) to display the filters at the top.
  • Select the "Text" category there.
  • Select "Filename" and "Contains" from the drop-down menus.
  • Paste the filenames from your clipboard into the search field.
  • Now you will only see the images you have saved in the selection
I hope it is now more clear for you.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 04 May 2022, 03:20
by mjau-mjau
Yep, thanks ... I understand the array of files names will work as a search filter in the specific app.

It's actually easy to store a *.txt file on server with these values, but it would probably be most convenient to simply include the array directly in the email? Then you can just copy-paste.

Regardless of the above, I decided I will build an interface in the X3 control panel for "orders" (stored as /config/cart/order.*.json). From the interface, you can view/delete orders, and I can add buttons to copy order as array and download.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 04 May 2022, 05:09
by Vulcano
mjau-mjau wrote: It's actually easy to store a *.txt file on server with these values, but it would probably be most convenient to simply include the array directly in the email? Then you can just copy-paste.
Yes, that's right. If the array would be included in the email, then only copy-paste must be done. That would be the easiest way. The only thing it should be the right format for the photographer. Lightroom (the most common tool) needs commas between the file names and Capture One (many photographers like me use this program) needs spaces between the file names.

Maybe there is a switch in the settings to decide between Lightroom and Capture One or that the file names would not be included in the mail, when a photographer doesn't need the feature. ;-)

Re: X3 Cart Plugin [under construction] 🚧

Posted: 04 May 2022, 05:29
by Vulcano
mjau-mjau wrote:
gxlucas wrote: any way to limit number in the card per costumer or per gallery ?
It could be an option, although I don't quite see the point. If there is a limit, it means client may attempt to add to cart, but nothing will get added. Or there be some alert that displays "Your cart is full! Please remove some items if you want to add new ones.".
I think gxlucas maybe is also thinking in my kind of way of using the new feature. (Easy communication with the client after a shooting.) :sweat_smile:

When you are a hobby photographer, you make many TFP Shootings. Often there is a contract, where is defined, how many pictures the model will get from the shooting. Therefore it would be nice, when the model cannot choose more pictures than defined in the contract. If the model chooses more pictures, there should be a message displayed that the limit is reached and that he/she can delete some to choose other pictures.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 05 May 2022, 00:06
by mjau-mjau
Vulcano wrote:Often there is a contract, where is defined, how many pictures the model will get from the shooting. Therefore it would be nice, when the model cannot choose more pictures than defined in the contract. If the model chooses more pictures, there should be a message displayed that the limit is reached and that he/she can delete some to choose other pictures.
Alright, I can easily add this as an option, although the design/implementation will be basic.

The only challenge with this (and 100s of other cart-options) is that I can't really anticipate how to combine everything flawlessly into the interface. In the case of a "limit", it would most likely just be an alert popup on page that displays when user exceeds the cart limit. I would also be thinking that the "limit" should perhaps be on a per-gallery basis, but that would only work if we empty the cart when navigating between pages (it doesn't make sense to have a per-gallery limit if the cart contains items from multiple pages).

Re: X3 Cart Plugin [under construction] 🚧

Posted: 07 May 2022, 20:26
by MaciejK
Great new feature!!

Dummy Orders
To avoid unwanted orders e.g. spam like or someone “just playing” with the feature it may be solved like this:
User issuing order receives email with confirmation link. Only after confirming order by clicking the link the owner of the gallery receives order on his email.

It would be very nice or even must to have some interface in the panel with placed orders.

Price/format selection
I guess this is already not so basic feature but maybe it is possible to implement some selection of format/price defined per image. This will be helpful for placing print orders.

Contact sheet
In order to have visual identification of ordered pictures: In addition to picture list some kind of thumbnails or contact sheet included in order email.  Option to be configurable.

Online payments
This I would be the most complicated feature, so the client can pay on line for ordered prints.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 08 May 2022, 00:55
by mjau-mjau
MaciejK wrote:It would be very nice or even must to have some interface in the panel with placed orders.
Yes, there will be a basic "orders" interface available in the panel.
MaciejK wrote:Dummy Orders
To avoid unwanted orders e.g. spam like or someone “just playing” with the feature it may be solved like this:
User issuing order receives email with confirmation link. Only after confirming order by clicking the link the owner of the gallery receives order on his email.
I don't know about this. There are so many things that could go wrong, including misconfigured email, delays and spam. Besides, this isn't really user-friendly ... Have you ever made an online order where you have to wait for a verification email first? Also, this may not solve duplicate/spammy orders as the user may still verify. Then there is the technical aspect, as we need to store "orders" (json format) inside /verified/ and /unverified/ folders.

Too many complications, and just another reason why this is a basic generic cart. You can just delete orders as you like from the panel instead. You won't receive spam, as it's not really a visible contact form, but you may of course receive
dummy orders as long as it's public.
MaciejK wrote:Price/format selection
I guess this is already not so basic feature but maybe it is possible to implement some selection of format/price defined per image. This will be helpful for placing print orders.
And you want dropdown selection for each image to select the price and feature? Then all this should display in the cart somehow? Unfortunately, this is one of the reasons it's just "cart" and not "shopping cart" or "e-commerce". If I was to build something like this, in reality, it would need a long time and many developers. Maybe something to consider for X4, but I can't just slap it on top of X3.
MaciejK wrote:Contact sheet
In order to have visual identification of ordered pictures: In addition to picture list some kind of thumbnails or contact sheet included in order email.  Option to be configurable.
To avoid complications with emails (html, spam, layout) images will be listed as links. The "orders" interface in the control panel will show thumbnails. When you say "contact sheet", do you mean some kinda separate page that displays all images in the order? It is possible to create some unique page for each order, but I think this is overkill when orders can be viewed from the panel
MaciejK wrote:Online payments
This I would be the most complicated feature, so the client can pay on line for ordered prints.
Unfortunately, this categorizes with my response above about "price/format selection". It's just too complicated considering all the flexibility each user wants in regards to image x print options x prices x currencies x taxes x delivery (tangible/intangible) x payment platforms, and how they need to communicate with server for success verification. X3 simply doesn't have the foundation for this.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 12 May 2022, 09:28
by metallissimus
I really like your approach and the simple text list feature for filtering in LR etc.

One more feature I can think of: Adding comments to individual items in the cart. That could also serve as a basic solution for specifying print sizes etc.

For my personal needs a per-page cart would probably make more sense than a global one, but I guess that highly depends on one's use case and I understand it's too much to ask for both.

Re: X3 Cart Plugin [under construction] 🚧

Posted: 12 May 2022, 09:52
by mjau-mjau
metallissimus wrote:One more feature I can think of: Adding comments to individual items in the cart. That could also serve as a basic solution for specifying print sizes etc.
Could you use native X3 image descriptions for this? Also, these comments would only display after adding an item to the cart? I'm not sure what exactly it would be used for except some additional cart-related information for each items.

There is also the issue about storing this info in case user refreshes the browser or returns. We can store cart-items (array of image paths) in browser localStorage.
metallissimus wrote:For my personal needs a per-page cart would probably make more sense than a global one, but I guess that highly depends on one's use case and I understand it's too much to ask for both.
Yes, I kinda tripped on this conundrum the last few days ... This cart thing is way more complicated than I anticipated. Even dedicated Shopify websites have one global cart, but in this case we are looking at per-page cart or global cart, and the developers-nightmare-scenario where some users somehow want a global cart but some pages with unique page-only cart.

It wouldn't actually be a problem creating the cart strictly for a per-page basis, which might even be the most popular requirement for X3 users. However, it seems illogical to exclude a global cart option, which is currently how it works. Anyway, just thinking aloud here :stuck_out_tongue_closed_eyes: I think I somehow need to include a page unique cart option.