Presented here is a record of problems and issues found in my attempt to create an eCommerce site based on the PDG Commerce software. I'm placing it here so that it remains part of the public record in case PDG Software eventually removes it from its forum and to ensure that it is searchable. Note that I'm only including my part of the exchanges. It was the only part, in general, but I don't want to quote others out of context. For the full rundown, see the PDG Software Forums.
The templates include the text "Valid CSS" and a link to actually go validate it. Unfortunately, it does not validate, even after I navigate to the correct form and validate by URI. There are four errors in style.css. Close, but it's still deceptive advertising, both for my customers and PDG's.
It would really be great if all buttons used in the templates (and any related to functionality not demonstrated in the templates, e.g., password recovery) were supplied in graphic form. Otherwise the blank button needs to be edited with a font to match all the others, which is something better done once by PDG rather than separately by multiple customers.
It is also important because there is little or no documentation that explains which actions by commerce.cgi take arguments of the text button variety (buttonName=buttonValue) or the image button variety (buttonName.x!=null) or both.
Some of the buttons in question are recover password, estimate shipping, reorder, and verify purchase.
This doesn't happen every time, but when it does it is very inconvenient, since the solution I found requires refreshing the PDG Commerce Administrator page and navigating to the previous work. Certain buttons on the Product Options page cause new windows to be opened that contain little visible information, but seem to prevent the proper information to be directed to the main window for update. The buttons are Add, Add Invalid Combination Rule, and Submit Default Option among possible others. These buttons are at Full Product Listing -> Available Products -> Details -> Options. At least once it happened just after pressing the Details button of that page.
FWIW, using IE 8, even in compatibility mode, be sure to check the box for getting notifications of replies to topics while editing the message, not afterwards. Pressing the "Get Notification" button afterwards results in either an error on the page or an error message on a new page. Some messages can also not be modified for some reason, not even by the owner.
New page error:
Error: Untrapped Error :
Died at ./Sources/Notify.pl line 222.
Error on web page:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1; .NET CLR 3.0.30729)
Timestamp: Sat, 12 Dec 2009 05:10:05 UTC
Message: 'document.postmodify.notify' is null or not an object
Line: 204
Char: 3
Code: 0
URI: http://msgboard.pdgsoft.com/yabbfiles/ajax.js
For one of my contacts I have set the shipping State to Non-Us / Non-Canada when I registered or updated the registration. On page refreshes it is stable and results in code like
document.pdgcontact.Constate.selectedIndex=0;
If I go to checkout and then choose the shipping information I just verified, the state list is not filled in, because the code that is generated is
pdgshipstate[2]=-1;
That's not an option!
After the user clicks submit leaving it as is, the server then complains about the missing state with instructions to press the back button and fill it in.
If the user hits the back button, the state is now automatically filled in, but with a value taken from somewhere else, perhaps the billing address, which is totally different.
Bugs, bugs, bugs...
On the page for updating user account settings (UserUpdate.html) I can specify a state like Minnesota, but when the page refreshes and I go back to that particular contact using the list, Mississippi displays. Wrong!
The CUSTOMER tag (in Verify.html) is responsible for both inserting text related to billing and shipping addresses as well as hidden form fields so that this information can be propogated to ThankYou.html.
The default Verify.html presents information in an order which is not handy. You're supposed to begin by verifying information that appears at the very bottom and them return to the top to enter payment information. One way around this is to move the CUSTOMER tag to the top. On my page that's outside the form. So, it needs to be added again inside the form, but hidden so that the text does not appear while the hidden fields do. So far, so good.
The problem is that only the first substitution for CUSTOMER receives the hidden fields. The second receives only the text. Subsequently, the data is not passed on to thankYou.html and addresses do not appear in the emails.
I think is is very reasonable to assume that the same content is substituted each time and that this other behavior needs to be corrected. Please do.
CheckOut.html (in Header_Footer_XHTML) will not work correctly with preexisting shipping addresses because the code generated to react to selection changes in the shipping address assumes a form named my_form. However, that form does not exist until the progammer adds that attribute to the form (name="my_form").
If I attempt to order an item, my cart is shown and I can update the quantity. I do a shipping cost estimate. The updated page does not allow quantity changes. That's OK, I guess. However, if I now press the update button which is still showing, my cart is emptied. That's not OK! I'm not even shown the empty cart page.
I have a product with a base price and one set of options with three selections and price changes to match: cheap (-0.01), normal (0.00), and expensive (+0.01). The page that is generated from Sample-Item.htm includes a drop-down list with the three selections. None of the selections is specified as being selected, so the first (cheap) is chosen by default by the browser without any onchange event. The price displayed, however, is the normal price, which is coded into the realtimeprice control. This is incorrect behavior.
The price displayed in realtimeprice control should either be calculated on the server to match the first/defeault selection or, even better in case the first selection might not be the default, the selection should be queried when the page has loaded and the realtimeprice value set accordingly.
For extra credit, it should be possible to set the initial selection in the administrator (without any invalid combination rules).
To work around it, make sure that the base price matches one of the selections and put that selection first. This ruins my ordering of selections by price, unfortunately.
Code like this will help:
var form=document.forms["name you give to form"];
RecalcPrice<!---SKU--->(form);
The PDG software enforces the policy of unique usernames, but not unique email addresses, which is probably a good idea. So, if I register two users (e.g., one person working two different jobs or accounts) and use the same email address, that is allowed. It is a problem, however, if I forget the passwords or usernames and try to retrieve them using the email address. I only receive information about one of the accounts, not all of them that match the email address. This needs to be fixed.
In version 5, at least for me, this action (emailaccountinfo) produces some garbage output which then messes up the html in the resulting page. Something is being written to stdout which should go to stderr. Before the html page arrives, this appears:
/home/content/t/h/e/thesocceradv/dead.letter... Saved message in /home/content/t/h/e/thesocceradv/dead.letter
Fix requested.
It's not an error message. It appears to be normal output to stdout from sendmail. It should not be mixed in with output from commerce.cgi.
Something is wrong somewhere, but dead.letter is no help. Neither is anyone at GoDaddy.com, a company which I can strongly recommend _against_.
In any case, sendmail is sending some output to stdout. PDG software should not be forwarding it to the web page. This behavior should be corrected.
As a work around I was able to find a different copy of sendmail on the server which does not produce the undesired output, at least if no errors occur. If something goes wrong, my web page will be trashed.
Extract from a template file that exemplifies the care taken in constructing them:
<meta name="ROBOT" content="NOINDEX,NOFOLLOW" />
<!---PDG_HEAD_INSERT--->
<meta name="robots" content="index, follow" />
How about a proofreading feature?
In the Commerce Administratior I choose Product Management and then Categories. In the Product Categories tab I click on a category so that View Products appears. I click on that causing a PDG Commerce Available Products tab appears. I click on a subcategory under Current Category. Now I try to close the current tab by clicking the X. A dialog appears titled Message from webpage. The message is Out of memory at line: 7.
Fix feature requested.
Templates with these tags need to be fixed:
!---SRCIPT_NAME---
!---sCRIPT_NAME---
My control panel is at
https://domain.com/cgi/commconfig.cgi?login=action
but when I log off, commconfig takes me to
https://domain.com/cgi-bin/commconfig.cgi?login=action
instead. I would like a feature that returns the browser to the correct page.
After an amount of inactivity it seems that I am being logged off my store. This is intended procedure, but the tag BABBLE_EXPIRE_DATA is supposed to let the user (me) know what happened. Nothing is being substituted for the tag. Even though I can normally browse my site as a guest, I am prevented from accessing any pages other than login and register. Worse, I can't recover a password because I put that form on a different page.
First I need some message to show up in place of BABBLE_EXPIRE_DATA and then I need the option of letting the user continue to shop as a guest and recover shopping cart contents when they eventually login.
Has anyone else experienced this?
OK, something is substituted for the tag: <input type="hidden" name="loginrestart" value="yes" />
<input type="hidden" name="display" value="about" />
I suppose that I can check for the existence of this information when the page is loaded and then insert some text into a span in order to inform the user myself. I'd rather have a matching tag for that.
However, how can I let the user continue shopping as a guest, as if he/she had logged out?
I bring up an alert box to let the user know what is going on. It would also be nice to let the user choose between formally logging out and then browsing uninhibited by login or staying at the login page and resubmitting that.
Logging the user out by including a hidden form and submitting it has so far only resulted in an error page, and only half of one. I assume that commerge.cgi is crashing somewhere in the middle of generating it. Is there a better way of forcing a user logout?
This seems to work, however:
window.location="!---SCRIPT_NAME---?logout=action";
Thanks. This had to do with the customer logout. It is essential to ensure that
[automatically] logged out != locked out
Just to be sure I've got this straight...
Images cannot be uploaded through webconnector.
If I name my images according to item number, UPC, or ALU and ftp them to the appropriate server directory, PDG can use them if the "image file source" and settings for the image file are correct.
...unless I have multiple images for a single item number. The software will not automatically find multiple images like item_1.jpg, item_2.jpg. If I have multiple images for an item, I will need to use the administrator to configure each picture for each product.
Is this correct?
Is anyone able to split the shipping and billing address with this (splitaddress) action from a UserUpdate template in version 5? I only get half an error page. It appears that commerce.cgi is crashing in the middle of generating it. My form is more or less as follows:
<form method="post" action="!---SCRIPT_NAME---" id="pdgcontact" onsubmit="return validateContactForm(this);" class="pdgcontactForm">
<input type="hidden" name="customerID" value="!---USERID---" />
<input type="hidden" name="targetcontact" />
<label for="">*Contact:<!---DISPLAY_CONTACT_SELECT--->
<input type="image" src="/PDGCommTemplates/Header_Footer_XHTML/images/separate_contact.gif" alt="Split Address" name="splitaddress" value="Split Address" onclick="return validateButton(this);" />
</form>
The usebillforship and useshipforbill do seem to work using the same strategy.
I'll report this as broken if nobody has evidence of it working.
The tree of categories in version 5 is made with the tag in the subject, !---PROD_CAT_UNORDERED_LIST---. This is not documented in version 4 manuals as far as I can tell. I need to know how the order of this tree is determined and how that can be influenced. I need my categories to show in a specific order. I can either adjust category names or IDs to get the desired order or add arguments to the tag. I don't want to have to reverse engineer to figure it out.
Thanks. That looks right, unfortunately. I was confused by the automatic gift certificate that duplicated the gift certificates that came in from QBPOS with a category code that was then out of order.
All the more reason to write version 5 documentation... especially if there are any options or arguments involved.
This is unfortunate, because although I can make the initial category code such that the tree builds in the right order, the codes will probably have little relationship to the category names and I cannot readily change the codes to change the order without losing links to products. The table needs an extra column for display order.
Thanks. The mystery is solved. Hope to be enlightened about the unknowns (options, arguments).
If I use an in the Company & Page Information of the Commerce Administrator for something like Home or AboutUs and click Submit Changes, it gets turned into a plain space when the screen updates. Other HTML works fine. The change seems to be propogated to SavedSkins and messes up my site's web pages.
Just in case: that's & n b s p ; without the spaces.
PDG had better check the confusing design of this control. The display in the tab should not change when the text is submitted. Since tags such as <h1> are not interpreted in this display, neither should the character entities.
Using the HTML view does help to verify that the character is still present, whether it is a space or showing in the tabbed version. As soon as I close the HTML view, despite having made no changes, the reappears in the tab. (Good!) However, also despite having made no manual changes, my nice XHTML-compliant <h1> and other tags are automatically converted into non-compliant <H1> tags. (Bad!)
The only way to get changes from the HTML editor to the tab so that the submit button can be pressed seems to be through the WYSIWYG mode, by unpressing the HTML button. That preserves the instances that I have inserted, but if I have used ", they are replaced by simple " marks. If I submit those changes and then return to HTML mode, the " is gone.
This control is messed up and needs a thorough review.
Has anyone figured out a way to get the display action to produce any more than the standard eight pages: tracking, contact, aboutus, search, home, user1, user2, and user3. I could really use a user4 and it would be great to use something like
http://www.mywebstore.com/cgi-bin/commerce?display=user&template=user4
I believe I've exhausted the possibilities of PASSTHROUGH, DISPLAY_TEMPLATE, INCLUDE, and the like, but may have missed something. Display seems to ignore additional arguments. Help!
That's it! Thanks!