Gadgetto Posted January 24, 2020 Author Share Posted January 24, 2020 8 hours ago, d'Hinnisdaël said: I think there will be cases where custom fields will differ by product template, so the order might not be guaranteed and it's probably better to name them after their content (custom_field_size instead of custom_field_1). But how do you determine the option n° for Snipcart — if you move around the field in the template, should it keep its ID to keep order records consistent, or does that not matter as long as it's named properly? Taking this example from Snipcart docs ... data-item-custom1-name="Print label" data-item-custom1-required="true" data-item-custom2-name="Size" data-item-custom2-options="Small|Medium|Large" data-item-custom2-value="Medium" data-item-custom3-name="Gift" data-item-custom3-options="true|false" ... this could be translated to this naming convention: snipcart-item-c-{fieldname}-{param} (The "c" is to avoid naming collisions with existing snipcart-item fields) snipcart-item-c-printlabel snipcart-item-c-size snipcart-item-c-gift The n° option could be detected/added automatically by the field order within a template. But would this be flexible enough? If we'd use this convention: snipcart-item-c1-{fieldname}-{param} snipcart-item-c2-{fieldname}-{param} snipcart-item-c3-{fieldname}-{param} We would block the reusability of fields in multiple templates. Link to comment Share on other sites More sharing options...
Gadgetto Posted January 24, 2020 Author Share Posted January 24, 2020 1 hour ago, szabesz said: What do you mean by saying "start with"? Is the example above a prefix or the complete fieldname? Yep it should be a prefix. Sorry for my bad English ... Link to comment Share on other sites More sharing options...
Gadgetto Posted January 24, 2020 Author Share Posted January 24, 2020 1 hour ago, szabesz said: What do you mean by saying "start with"? Is the example above a prefix or the complete fieldname? Why not? 🙂 Good question! 🙂 Its probably the best way to have a separate "order" template. But then wouldn't I also need a separate "Order" page? Link to comment Share on other sites More sharing options...
d'Hinnisdaël Posted January 24, 2020 Share Posted January 24, 2020 1 hour ago, Gadgetto said: Taking this example from Snipcart docs ... data-item-custom1-name="Print label" data-item-custom1-required="true" data-item-custom2-name="Size" data-item-custom2-options="Small|Medium|Large" data-item-custom2-value="Medium" data-item-custom3-name="Gift" data-item-custom3-options="true|false" ... this could be translated to this naming convention: snipcart-item-c-{fieldname}-{param} (The "c" is to avoid naming collisions with existing data-item fields) snipcart-item-c-printlabel-name="Print label" snipcart-item-c-printlabel-required="true" snipcart-item-c-size-name="Size" snipcart-item-c-size-options="Small|Medium|Large" snipcart-item-c-size-value="Medium" snipcart-item-c-gift-name="Gift" snipcart-item-c-gift-options="true|false" The n° option could be detected/added automatically by the field order within a template. But would this be flexible enough? Are you sure that's the final markup? Whenever I had to use custom fields, the attribute names were kept as custom1, custom2, etc. So the example from the Snipcart docs are copy-paste and not meant to be changed to the fieldnames you have. It's of course possible that both work and Snipcart will detect the fields either way. Just checking. This is an example from an existing shop I'm running: <?php if ($cart_has_options): ?> data-item-custom1-name="<?= $cart_option_name ?>" data-item-custom1-options="<?= join('|', $cart_option_data) ?>" data-item-custom1-value="<?= $cart_option_value ?>" <?php endif; ?> Link to comment Share on other sites More sharing options...
Gadgetto Posted January 24, 2020 Author Share Posted January 24, 2020 7 hours ago, d'Hinnisdaël said: Are you sure that's the final markup? Whenever I had to use custom fields, the attribute names were kept as custom1, custom2, etc. So the example from the Snipcart docs are copy-paste and not meant to be changed to the fieldnames you have. It's of course possible that both work and Snipcart will detect the fields either way. Just checking Sorry, I didn’t mean this as the final html markup. I meant the naming convention for PW fields. I edited my post above. Link to comment Share on other sites More sharing options...
szabesz Posted January 24, 2020 Share Posted January 24, 2020 11 hours ago, Gadgetto said: Its probably the best way to have a separate "order" template. But then wouldn't I also need a separate "Order" page? Each pw order page could store the data of the related extra order fields. Order pages could be saved under Admin (page id 2) > Snipcart Orders > [order#n] similar to the way PW saves repeaters "hidden" under the Admin page. Link to comment Share on other sites More sharing options...
Gadgetto Posted January 25, 2020 Author Share Posted January 25, 2020 8 hours ago, szabesz said: Each pw order page could store the data of the related extra order fields. Order pages could be saved under Admin (page id 2) > Snipcart Orders > [order#n] similar to the way PW saves repeaters "hidden" under the Admin page. A single order template with a single order page should be enough (for handling custom order fields). Or do you mean creating a page for each order? Link to comment Share on other sites More sharing options...
szabesz Posted January 25, 2020 Share Posted January 25, 2020 13 hours ago, Gadgetto said: Or do you mean creating a page for each order? Yes I do. I thought there is "custom data" related to each order but if not, then that is a different story. Link to comment Share on other sites More sharing options...
Gadgetto Posted January 26, 2020 Author Share Posted January 26, 2020 On 1/24/2020 at 9:43 AM, d'Hinnisdaël said: That's what I've done in the past: create an order template with fields that I map to custom options. Also good to have the consent text editable by site editors. Regarding "custom order fields": It seems you have some experience integrating Snipcart into PW. I'm following your suggestion by preinstalling a "snipcart-order" template and a "snipcart-order" page under Admin / Setup / SnipWire. The goal is, that an admin could add PW fields to this page which should later be mapped (or "translated") to the required Snipcart markup. But how should a PW field look like to get the required values from? Here is a sample Snipcart custom order field markup (taken from @Noborus sample) which should be generated from a PW field: data-cart-custom1-name="By checking this box, I have read and agree to the <a href=\'https://www.processwire.com\' class=\'js-real-link\' target=\'_blank\'>Terms & Conditions</a>" data-cart-custom1-options="true|false" data-cart-custom1-required="true" One idea is, that I simply add a Textarea field where an admin could enter the config string from above. SnipWire will then render this to the <script> tag. BTW, in this case we wouldn't even need a template/page/field. I could simply add a Textarea to module config where these strings could be stored. What do you think? Link to comment Share on other sites More sharing options...
Gadgetto Posted January 26, 2020 Author Share Posted January 26, 2020 21 hours ago, szabesz said: Yes I do. I thought there is "custom data" related to each order but if not, then that is a different story. Ah, ok! Snipcart custom order fields are global and valid/used for each order/cart. 1 Link to comment Share on other sites More sharing options...
Noboru Posted January 26, 2020 Share Posted January 26, 2020 Hi @Gadgetto, for me, a text(area) field for custom order fields would be sufficient. Especially with regard to API version 3, in which custom order files are handled completely differently: now called "cart custom fields", see https://docs.snipcart.com/v3/setup/cart-custom-fields Link to comment Share on other sites More sharing options...
d'Hinnisdaël Posted January 27, 2020 Share Posted January 27, 2020 19 hours ago, Gadgetto said: One idea is, that I simply add a Textarea field where an admin could enter the config string from above. SnipWire will then render this to the <script> tag. BTW, in this case we wouldn't even need a template/page/field. I could simply add a Textarea to module config where these strings could be stored. This might just be enough, but will this work reliably with multi-language setups? The way I've done it in the past is by creating a repeater matrix field that has a string, an integer and a bool type for creating and editing options. But you'd have to create a field on installation and the matrix module isn't free, so I guess that's out of the question? Link to comment Share on other sites More sharing options...
Gadgetto Posted January 27, 2020 Author Share Posted January 27, 2020 1 hour ago, d'Hinnisdaël said: This might just be enough, but will this work reliably with multi-language setups? The way I've done it in the past is by creating a repeater matrix field that has a string, an integer and a bool type for creating and editing options. But you'd have to create a field on installation and the matrix module isn't free, so I guess that's out of the question? Yep, multi-language will require to use PW fields (at least to keep things simple). So I’ll stay with installing a cart template and a cart page where admins could add their custom cart fields. In the first version, I’ll solve this with a textarea field where the custom field config can be stored as is. 1 Link to comment Share on other sites More sharing options...
d'Hinnisdaël Posted January 27, 2020 Share Posted January 27, 2020 57 minutes ago, Gadgetto said: Yep, multi-language will require to use PW fields (at least to keep things simple). So I’ll stay with installing a cart template and a cart page where admins could add their custom cart fields. In the first version, I’ll solve this with a textarea field where the custom field config can be stored as is. Sounds about right. Unfortunately, I've been too busy to try out the module properly and give more useful feedback 👽 Link to comment Share on other sites More sharing options...
Gadgetto Posted January 28, 2020 Author Share Posted January 28, 2020 UPDATE 2020-01-28 I just added the Snipcart "Custom Order Fields" feature! Thank's @Noboru & @d'Hinnisdaël & @szabesz for your help and hints! Custom order fields can be added/configured by editing a hidden config page under Admin > Setup > SnipWire > Custom Cart Fields. The corresponding template/page/field resources are preinstalled by SnipWire installer. If you update to the new module versions, those resources will be added too! The config page has a single textarea field where you can add the configuration strings for your custom cart fields: (multi language support is also available) ... can also be edited and enabled/disabled from within SnipWire module config. The config from the screenshot above leads to the custom step "Order Info" in checkout process: The Snipcart docs for Custom Order Fields (v 2.0) can be read here:https://docs.snipcart.com/v2/configuration/custom-fields Next step is to implement custom product fields! When this is done, I'll release the first official version. SnipWire will then be added to the ProcessWire module directory (as far as @ryan accepts it). 3 1 Link to comment Share on other sites More sharing options...
Gadgetto Posted January 30, 2020 Author Share Posted January 30, 2020 UPDATE 2020-01-30 SnipWire 0.8.0 (beta) first public release! It is done! After almost 1 year of hard work and a lot of help from the usual suspects I just released the first public version! Please note that this is still a beta so please test, test, test before you use this plugin in a real project. The module can be loaded via PW modules directory (just submitted - in review I think) or directly via GitHub. More infos will be added soon ... 3 5 Link to comment Share on other sites More sharing options...
Gadgetto Posted February 1, 2020 Author Share Posted February 1, 2020 UPDATE 2020-02-01 SnipWire is now available via ProcessWire's module directory! https://modules.processwire.com/modules/snip-wire/ 3 Link to comment Share on other sites More sharing options...
Gadgetto Posted February 3, 2020 Author Share Posted February 3, 2020 UPDATE 2020-02-03 SnipWire 0.8.1 (beta) released! This update mainly serves to move all custom classes into their own namespaces! This should fix the annoying class naming conflicts with other modules. Its now time to put some effort into the SnipWire docs! 2 Link to comment Share on other sites More sharing options...
Gadgetto Posted February 7, 2020 Author Share Posted February 7, 2020 I'm just struggling with a problem regarding my MarkupSnipWire module (which is a part of SnipWire) and maybe I can get some hints here. MarkupSnipWire is an autoloader module which - amongst other things - writes CSS and JS output required by Snipcart on page render. One of the required JS params is the currency in which the Snipcart shopping cart should run. By default it uses the "first" currency from SnipCarts module config. I now want to implement a kind of "currency switcher" which should allow to (as the name says) switch the currency from within a ProcessWire template on the fly. So MarkupSnipWire should be able to receive the currency string (ISO 3 letters) and internally switch the used currency formats. What would be the best method to send a param to an autoloader module? If you have a look at the module code you can see there is a renderCSSJS method which is triggered by a hook after pager render in init(). https://github.com/gadgetto/SnipWire/blob/3d7af17a37fb20dcdd4038cd99339ecb704e5aef/MarkupSnipWire/MarkupSnipWire.module.php#L154 When this method is called, the $this->currency property already needs to be set. A setCurrency method is already available! The goal is to let a developer use the SnipWire API variable in his templates like this: $snipwire->setCurrency('usd'); Link to comment Share on other sites More sharing options...
bernhard Posted February 7, 2020 Share Posted February 7, 2020 Can't you just save the currency in the user's $session ? Link to comment Share on other sites More sharing options...
Gadgetto Posted February 7, 2020 Author Share Posted February 7, 2020 26 minutes ago, bernhard said: Can't you just save the currency in the user's $session ? Hey @bernhard, this is not the problem. In front-end we could set the currency via POST, GET or SESSION or even via a API call $snipwire->setCurrency('usd'); But I'd like to set a parameter for MarkupSnipWire so that the module internally uses the desired currency for output rendering. Link to comment Share on other sites More sharing options...
dragan Posted February 7, 2020 Share Posted February 7, 2020 @Gadgetto First of all a big thank you for creating such a module! I have installed it just now for the first time. I followed the installation / configuration steps, defined templates etc. But in the frontend I get an error when trying to access mysite.com/snipcart-shop/ Any ideas what went wrong? I'm using latest PW dev, and AdminTheme UIKit is installed + active. Link to comment Share on other sites More sharing options...
Gadgetto Posted February 7, 2020 Author Share Posted February 7, 2020 11 minutes ago, dragan said: Any ideas what went wrong? I'm using latest PW dev, and AdminTheme UIKit is installed + active Hi @dragan, this is a front-end problem: The sample templates, which come as an additional installation, are based on the Regular site profile which is based on Markup regions output strategy and UIKit CSS framework. ukIcon is a function in _uikit.php which is part of the regular site profile. If you are using another profile or output strategy, you'll need to adapt the template source. If you like to run a quick test - just install PW using the "regular" profile. Link to comment Share on other sites More sharing options...
dragan Posted February 7, 2020 Share Posted February 7, 2020 Thank you. I'm using the multilanguage as base... getting the _uikit.php from Github did the trick! Link to comment Share on other sites More sharing options...
Gadgetto Posted February 7, 2020 Author Share Posted February 7, 2020 Just now, dragan said: Thank you. I'm using the multilanguage as base... getting the _uikit.php from Github did the trick! Great! Just let me know if you need some help in using SnipWire as the docs are in the early stages at best... 😀 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now