Jump to content

Mark Russell

Members
  • Content count

    139
  • Joined

  • Last visited

Everything posted by Mark Russell

  1. Product Sort Contribution I needed the capability of sorting by product similar to the way in which categories are sorted. I read through many posts of how people use different techniques to accomplish product sort (i.e. putting a number such as 1., 2., 3. etc in front of the Product Name); however, none quite met what I was looking to accomplish. So, I put together this contribution with the following features: - product sort entry on the product entry page in admin - product and category sort order displayed on each of the category pages in admin (next to the red and green status indicators) - ability to set the column sort order on the admin/configuration/product_listing page - ability to set the column to being visible or not on the admin/configuration/product_listing page - ability to use product sort order as the default catalog display whether or not the column is actually made visible - maintain the native column sort capability in the catalog (click on column heading to get ascending/descending sort), though I did remove the "+" and "-" indicators <<<<< I built this contribution on the fully loaded snapshot from Phesis dated September 14th, 2002. >>>>>>>>> Find it here: http://www.oscommerce.com/community/contributions,911 Mark
  2. Mark Russell

    2Checkout V2 Instructions

    I got my cart to work with 2CO V2. I'm running a real old version of OSC - a snapshot from Sept 02, so I guess 2CO's claim that V2 will work with MS2 V2 is not true. Here's what I did: Change pm2checkout.php code. Note: newer versions of OSC will look different than this, but the overall concept of the script is the same. The 'for' loop is to capture multiple products in the cart, if needed. The reason to pass c_prod, c_name, etc is so 2CO can read those variables off the pass through URL, match them in the 2CO database and list the items on the order page when the customer hits the order page at 2CO. See the jpg down below. The 'demo' variable is to put the cart in/out of test mode. The id_type of '1' identifies that the product passed through has a an id assigned by me. A '2' would be for a system-assigned prod_id. Note: I'm passing through the product name in the description field also. function process_button() { global $HTTP_POST_VARS, $CardNumber, $order, $i; for ($i=0; $i<sizeof($order->products); $i++) { $process_button_string .= tep_draw_hidden_field('c_prod_' . $i, $order->products[$i]['model'] . ',' . $order->products[$i]['qty']); $process_button_string .= tep_draw_hidden_field('c_name_' . $i, $order->products[$i]['name']); $process_button_string .= tep_draw_hidden_field('c_price_' . $i, $order->products[$i]['price']); $process_button_string .= tep_draw_hidden_field('c_description_' . $i, $order->products[$i]['name']); // input name as the description } $process_button_string .= tep_draw_hidden_field('x_login', MODULE_PAYMENT_2CHECKOUT_LOGIN) . tep_draw_hidden_field('x_amount', number_format($order->info['total'], 2)) . tep_draw_hidden_field('x_invoice_num', date('YmdHis')) . tep_draw_hidden_field('demo', N) . tep_draw_hidden_field('id_type', 1) . tep_draw_hidden_field('x_first_name', $order->customer['firstname']) . tep_draw_hidden_field('x_last_name', $order->customer['lastname']) . tep_draw_hidden_field('x_address', $order->customer['street_address']) . tep_draw_hidden_field('x_city', $order->customer['city']) . tep_draw_hidden_field('x_state', $order->customer['state']) . tep_draw_hidden_field('x_zip', $order->customer['postcode']) . tep_draw_hidden_field('x_country', $order->customer['country']['title']) . tep_draw_hidden_field('x_email', $order->customer['email_address']) . tep_draw_hidden_field('x_phone', $order->customer['telephone']) . tep_draw_hidden_field('x_ship_to_first_name', $order->delivery['firstname']) . tep_draw_hidden_field('x_ship_to_last_name', $order->delivery['lastname']) . tep_draw_hidden_field('x_ship_to_address', $order->delivery['street_address']) . tep_draw_hidden_field('x_ship_to_city', $order->delivery['city']) . tep_draw_hidden_field('x_ship_to_state', $order->delivery['state']) . tep_draw_hidden_field('x_ship_to_zip', $order->delivery['postcode']) . tep_draw_hidden_field('x_ship_to_country', $order->delivery['country']['title']) . tep_draw_hidden_field('x_receipt_link_url', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'NONSSL')) . tep_draw_hidden_field('x_email_merchant', MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT); return $process_button_string; } Upload Product File - I used the contribution Easy Populate to download a complete tab-delimited .txt file. I then opened in Excel and escaped all the commas (,) with (\,). I also modified the file to meet 2COs file spec available here: https://www2.2checkout.com/2co/admin/product_upload. I then saved as a CSV and opened in Textpad. I removed the header column and added my 5-digit SID to the first line (commented out below) . The first couple of lines of the product file are below. Alex (arm1tage) wisely pointed out the following "I've learned the c_prod and associated variables have to be passed once in a LIVE transaction so they are entered into 2CO's database, before they show up in the cart details. So for those of you that do not see the itemized list, it is because you have not had a live sale of that item yet. One way around this is to upload your inventory in a .CSV file." That was critical for me because I was expecting the itemized products to show up on the 2CO order page upon the products being passed through in the URL. They don't. They have to already be in the 2CO database. Product File: MYSID A-1044,Ivory Velvet Bow Clip,,2.99,,,1,Ivory Velvet Bow Clip A-1005,Hair Accesory - Yellow Flower Hair Elastic,,3.99,,,1,Hair Accesory - Yellow Flower Hair Elastic A-1005,Hair Accesory - Yellow Flower Hair Elastic,,3.99,,,1,Hair Accesory - Yellow Flower Hair Elastic A-1013,Harlequin Headband,,4.99,,,1,Harlequin Headband Test Mode - V2 does not work like V1 where you use the drop-down menu in the admin area to turn test mode on/off. You have to pass the variable 'Y' to indicate a test transaction. Test Credit Card - use 597910143452349, any expiration date in the future, and 000 for the security code. Pass Through URL - when you hit the Confirmation button on checkout_confirmation.php and hit the first page at 2CO, the pass through URL should be in the browser address bar. Mine looked like the following for the successful transaction. (I modified some of the variables.) (Removed 'http://w' to prevent this from being a link)ww.2checkout.com/2co/buyer/purchase?TCOID=c393c06c94e930f050f18563b086b1?=&c_prod_0=S-6063,2&c_name_0=Girls socks - Light Blue and white stripes and flowers Size 6.5&c_price_0=2.9900&c_description_0=&c_prod_1=S-4013,1&c_name_1=White Sunflower Lace Cuffed Girls Socks Size 4 - 5.5&c_price_1=4.4900&c_description_1=&x_login=MYSID&x_amount=13.76&x_invoice_num=20050401084151&demo=Y&id_type=1&x_first_name=joe&x_last_name=schmo&x_address=377 Anywhere Dr &x_city=Somewhere&x_state=California&x_zip=90210&x_country=United States&x_email=joe@domain.com&x_phone=5555551212&x_ship_to_first_name=joe&x_ship_to_last_name=schmo&x_ship_to_address=377 Anywhere Dr &x_ship_to_city=Somewhere&x_ship_to_state=California&x_ship_to_zip=90210&x_ship_to_country=United States&x_receipt_link_url=http://www.mydomain.com/checkout_process.php&x_email_merchant=FALSE&x=43&y=19 I hope this helps. Mark
  3. Mark Russell

    2Checkout V2 Instructions

    Tim, The easypolpulate step gets you the Product Detail section with the itemized products. Hope that answers your question. Mark
  4. Mark Russell

    2Checkout V2 Instructions

    Products do get inserted into the db on the fly. However, the first time a product is purchased and passed to 2CO (i.e. it isn't already in the 2CO db) that product will not show up as an itemized entry on the order page for that purchase only. Subsequent purchases of that same product will be itemized on the order page. Uploading a full product file to start ensures that all products get itemized on the order page from the start. That's all... Mark
  5. Mark Russell

    2Checkout V2 Instructions

    Lia, Those fields are not required, so I decided in my case not to upload them with my products. The Approved URL is the URL to redirect the buyer to when the purchase succeeds. - I didn't enter this URL because 2CO already has my redirect URL to checkout_process.php. This redirect works and I didn't want to take the chance that entering the URL with products would screw something up. The Pending URL is the URL to redirect the buyer to when the purchase cannot be immediately determined. - I guess it would be good to redirect back to my shop if something went wrong in the checkout process, but again, I just wanted to get it to work. Also, if something happens during checkout that requires redirect back to my shop, I figure there's a good chance I'll lose the customer anyway. I may upload this URL in the future and point them back to checkout_confirmation. Maybe they'd try again... Mark
  6. Mark Russell

    2Checkout V2 WORKING with OSC 2.2MS2!

    Alex, Thanks for the info on the inventory upload and how the products won't show up until they are actually in the 2CO db. I'm going to try and upload my product catalog and then test. Should I then see itemized products for the TEST transaction or are you saying that the only way to see itemized products is if the transaction is LIVE? Mark
  7. Mark Russell

    2Checkout V2 WORKING with OSC 2.2MS2!

    I've converted to V2 and actually booked an order from a customer today. My shop passed the correct demographic and sale parameters to 2CO. 2CO passed back to my shop and the order was captured in the db. Problem is though, I haven't yet successfully passed the product data to 2CO (c_prod, c_name, c_price, etc). I'm starting to think the problem is with 2CO. Here's the string that I am passing to them: (Removed 'http://w' to prevent this from being a link)ww.2checkout.com/2co/buyer/purchase?TCOID=c393c306c94e930f5050f18563b086b1∏=&c_prod_0=S-6063,2&c_name_0=Girls socks - Light Blue and white stripes and flowers Size 6.5&c_price_0=2.9900&c_description_0=&c_prod_1=S-4013,1&c_name_1=White Sunflower Lace Cuffed Girls Socks Size 4 - 5.5&c_price_1=4.4900&c_description_1=&x_login=MYSID&x_amount=13.76&x_invoice_num=20050401084151&demo=Y&id_type=1&x_first_name=joe&x_last_name=schmo&x_address=377 Anywhere Dr 200&x_city=Somewhere&x_state=California&x_zip=90210&x_country=United States&x_email=joe@domain.com&x_phone=5555551212&x_ship_to_first_name=joe&x_ship_to_last_name=schmo&x_ship_to_address=377 Anywhere Dr &x_ship_to_city=Somewhere&x_ship_to_state=California&x_ship_to_zip=90210&x_ship_to_country=United States&x_receipt_link_url=http://www.mydomain.com/checkout_process.php&x_email_merchant=FALSE&x=43&y=19 This looks ok to me except maybe for the TCOID and I don't have the prod_desc in yet. I don't know why having the TCOID would be an issue though because I did successfully book a sale on V2 with this as the pass through. Anyone have any thoughts / comments on why 2CO is not capturing the product? My pm2checkout.php code is below. Thanks, Mark function process_button() { global $HTTP_POST_VARS, $CardNumber, $order, $i; for ($i=0; $i<sizeof($order->products); $i++) { $process_button_string .= tep_draw_hidden_field('c_prod_' . $i, $order->products[$i]['model'] . ',' . $order->products[$i]['qty']); $process_button_string .= tep_draw_hidden_field('c_name_' . $i, $order->products[$i]['name']); $process_button_string .= tep_draw_hidden_field('c_price_' . $i, $order->products[$i]['price']); $process_button_string .= tep_draw_hidden_field('c_description_' . $i, ''); // not sure how to input the description here } $process_button_string .= tep_draw_hidden_field('x_login', MODULE_PAYMENT_2CHECKOUT_LOGIN) . tep_draw_hidden_field('x_amount', number_format($order->info['total'], 2)) . tep_draw_hidden_field('x_invoice_num', date('YmdHis')) . tep_draw_hidden_field('demo', N) . tep_draw_hidden_field('id_type', 1) . //tep_draw_hidden_field('x_card_num', $CardNumber) . //tep_draw_hidden_field('x_exp_date', $this->cc_expires_month . $this->cc_expires_year) . tep_draw_hidden_field('x_first_name', $order->customer['firstname']) . tep_draw_hidden_field('x_last_name', $order->customer['lastname']) . tep_draw_hidden_field('x_address', $order->customer['street_address']) . tep_draw_hidden_field('x_city', $order->customer['city']) . tep_draw_hidden_field('x_state', $order->customer['state']) . tep_draw_hidden_field('x_zip', $order->customer['postcode']) . tep_draw_hidden_field('x_country', $order->customer['country']['title']) . tep_draw_hidden_field('x_email', $order->customer['email_address']) . tep_draw_hidden_field('x_phone', $order->customer['telephone']) . tep_draw_hidden_field('x_ship_to_first_name', $order->delivery['firstname']) . tep_draw_hidden_field('x_ship_to_last_name', $order->delivery['lastname']) . tep_draw_hidden_field('x_ship_to_address', $order->delivery['street_address']) . tep_draw_hidden_field('x_ship_to_city', $order->delivery['city']) . tep_draw_hidden_field('x_ship_to_state', $order->delivery['state']) . tep_draw_hidden_field('x_ship_to_zip', $order->delivery['postcode']) . tep_draw_hidden_field('x_ship_to_country', $order->delivery['country']['title']) . tep_draw_hidden_field('x_receipt_link_url', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'NONSSL')) . tep_draw_hidden_field('x_email_merchant', MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT); return $process_button_string; }
  8. Mark Russell

    2checkout v2 on OSC 2.2

    I successfully ran a test transaction with 2CO V2 from my site which is a snapshot from Sep 2002, though, without the required c_prod and id_type parameters. My pm2checkout.php code is below. Why do you have (c_prod, '1') and ('id_type', '2')? The '2' for id_type indicates a system-assigned (i.e. 2CO-assigned) product ID. Isn't that for those who have their products hosted at 2CO? And the '1' for c_prod indicates you are just passing a number 1 through for the product id. Isn't c_prod supposed to match your product id as uploaded in the 2CO database? Seems that us OSC users would have to code c_prod to actually pass our product id in the string and we'd want to set the id_type as '1'. Am I correct, or missing something? Thanks, Mark $process_button_string = tep_draw_hidden_field('x_login', MODULE_PAYMENT_2CHECKOUT_LOGIN) . tep_draw_hidden_field('x_amount', number_format($order->info['total'], 2)) . tep_draw_hidden_field('x_invoice_num', date('YmdHis')) . tep_draw_hidden_field('demo', Y) . //tep_draw_hidden_field('x_card_num', $CardNumber) . //tep_draw_hidden_field('x_exp_date', $this->cc_expires_month . $this->cc_expires_year) . tep_draw_hidden_field('x_first_name', $order->customer['firstname']) . tep_draw_hidden_field('x_last_name', $order->customer['lastname']) . tep_draw_hidden_field('x_address', $order->customer['street_address']) . tep_draw_hidden_field('x_city', $order->customer['city']) . tep_draw_hidden_field('x_state', $order->customer['state']) . tep_draw_hidden_field('x_zip', $order->customer['postcode']) . tep_draw_hidden_field('x_country', $order->customer['country']['title']) . tep_draw_hidden_field('x_email', $order->customer['email_address']) . tep_draw_hidden_field('x_phone', $order->customer['telephone']) . tep_draw_hidden_field('x_ship_to_first_name', $order->delivery['firstname']) . tep_draw_hidden_field('x_ship_to_last_name', $order->delivery['lastname']) . tep_draw_hidden_field('x_ship_to_address', $order->delivery['street_address']) . tep_draw_hidden_field('x_ship_to_city', $order->delivery['city']) . tep_draw_hidden_field('x_ship_to_state', $order->delivery['state']) . tep_draw_hidden_field('x_ship_to_zip', $order->delivery['postcode']) . tep_draw_hidden_field('x_ship_to_country', $order->delivery['country']['title']) . tep_draw_hidden_field('x_receipt_link_url', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'NONSSL')) . tep_draw_hidden_field('x_email_merchant', MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT); return $process_button_string;
  9. I've read all the threads - more than once - including the 14 pager. Here is what I gathered in terms of the contribs and settings. I'm not too confident in having all this correct. Though, I hope this helps those that are also still confused by getting right down to the details. - spider catcher: this is the code that goes at the root (e.g. index.html) and either serves up allprods via readme or redirects to the default page. Purpose: to detect bot/spider and feed product links via allprods. Or redirect 'real user' to default. - Ian's Kill SID code: this is the code to detect a bot/spider once in the site to kill sids. Purpose: to prevent bots from getting trapped in site and to prevent getting product links listed in google with sids appended? QUESTION: I saw code in Ian's thread that looked just like the spider catcher code (one with bots in footprint array and all the ip addresses) that goes into html_output. How is this code different than spider catcher that goes into an index.html? - all_prods: code to facilitate product link submittals to the engines and to allow customers to view all products on one page. Link to all_prods should be visible and in the header, main page, or footer. Not in the left info box that does not get crawled. - meta-tags: contrib that allows meta-tags to be generated specific to pages/categories. Google might not use this, but it is good to have for other bots/spiders. - search engine safe urls - turn them off. Having them on prevents a user who has cookies disabled from buying AND either setting doesn't affect the SEs. Is that it? Can anyone shed additional light on the above? Much thanks for eveyone's ongoing efforts... Mark
  10. Mark Russell

    Working 2checkout contribution

    I have 2checkout working. It would help to know how it doesn't work. What is happening? Mark
  11. Mark Russell

    User Tracking with Admin 1.31 Released

    Thanks for the pointer to that file. I restored line 220 back to original state and uploaded the new .dat file. Flags work and no 'traverse errors'. Muggity, you did it! This thread can now be closed. :wink: Mark
  12. Mark Russell

    User Tracking with Admin 1.31 Released

    where did you get the .dat file? M
  13. Mark Russell

    User Tracking with Admin 1.31 Released

    I got sick of seeing this error come up so I just commented out line 220 in geoip.inc. /* trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR); */ This appears to have worked! No more errors... Too easy? :D M
  14. Mark Russell

    User Tracking with Admin 1.31 Released

    Doh! :o Of course. I get it now. :oops: Thanks, Robert. Mark
  15. Mark Russell

    User Tracking with Admin 1.31 Released

    Robert, Thanks for the tip on contacting Greg W. I lost ya here, though. Mark
  16. Mark Russell

    User Tracking with Admin 1.31 Released

    Greetings, I just installed 1.34 over my old 0.2 version. Nice work putting this together. I really like the new look and added whois functionality. Plus all the 'times' now seem to work. No more 3:00 minute idle times for everyone! Everything was working fine and I could expand to view the session until, it appears, a customer actually had something in their cart. When I view session with something in the cart I get the following error: Fatal error: error traversing database - perhaps it is corrupt? in /home/web/sites/everythingtights/admin/includes/geoip.inc on line 220 Also, this is what the link appears like in the address bar: http://www.mysite.com/admin/user_tracking.php?viewsession=c627ed6b6d26111bdb1b46e4f4f1b274#c627ed6b6d26111bdb1b46e4f4f1b274 Note the duplicate session ids. Does anyone know what might be wrong and how I can correct? Thanks for your time. Mark
  17. Mark Russell

    EasyPopulate 2.4, now with Froogle support!

    Thanks Tim, for the reply. I should have caught these in the earlier part of this thread. :oops: One note: I had to set $froogle_SEF_urls = 0; versus $froogle_SEF_urls = 'false'; to get the URLs to download as non-search engine safe. Mark
  18. Mark Russell

    Paypal IPN

    Does anyone know which is the last version of Paypal IPN to support the old checkout procedure/code? It's not quite clear from all the posts I read. Thanks, Mark
  19. Mark Russell

    EasyPopulate 2.4, now with Froogle support!

    Tim, I have two things: 1. My feed was denied because the catergories field did not have spaces between the category name and the ">". So, category>subcat1>subcat2 was denied. Category > subcat1 > subcat2 was accepted. Is there a change in place to fix this? 2. The product urls are output as SE safe urls. Is there any way to get the 'standard' urls output like: http://www.mysite.com/product_info.php?pro...d=58?language=1 Thanks, mark
  20. Jon, If I understand what you are saying, I think you have this wrong. The login.php file included in the zip archive is to replace the file catalog/login.php. This file is not to also replace the login.php file at catalog/includes/languages/english. The files in the /english directory contain all of the text field definitions for the corresponding script files in the /catalog directory. The instructions for ...english/login.php are: "OPEN AND MAKE CHANGES IN THIS FILE: /catalog/includes/languages/english/login.php" where you do just that - you open the file and edit it by pasting in: //Begin Checkout Without Account v0.55 changes define('HEADING_CHECKOUT', '<font size="2">Proceed Directly to Checkout</font>'); define('TEXT_CHECKOUT_INTRODUCTION', 'Proceed to Checkout without creating an account. By choosing this option none of your user information will be kept in our records, and you will not be able to review your order status, nor keep track of your previous orders.'); define('PROCEED_TO_CHECKOUT', 'Proceed to Checkout without Registering'); //End Checkout Without Accuont v0.55 changes HTH, Mark
  21. Mark Russell

    checkout w/o account?

    Jon, No prob here. Don't underestimate your ability to hack a solution you need. I started with osC last April and knew nothing about php, Apache, MySql. My first challenge was adding the without account functionality. At the time, there was little in the way of source code to help. Folks on the board were debating the merits of allowing customers to checkout without creating an account. Believe me those discussions got real philosophical about the topic. I just dove in, learned what I could about how the code is structured and put it together. It took me 2 months to complete. Hopefully, you'll crack it sooner having some source to work with. Good luck and ask questions here when you have them. Folks are real willing to help out, including Ron who is on the board a lot and always contributing. Mark
  22. Mark Russell

    checkout w/o account?

    Jon, Experimenting, trying new things, providing feedback, voicing ideas, developing new functionality and contributing are all part of the 'culture' here. Ron's question was a suggestion to take that bold step, try it and let us know how it goes. Your experience and feedback may help someone in the future. That being said. I have Purchase Without Account v0.55 running on the loaded snapshot from Phesis released on Sep 14. Though that snapshot was prior to the change to checkout. You may start by integrating this contribution into the latest snapshot. The install is fairly straight forward. You can find the v0.55 version here: http://www.oscommerce.com/community/contri...ions,355/page,8 HTH, Mark
  23. Mark Russell

    [Contribution] Product Sort Order

    Steve, The file is quite long to post here. PM me your email addy and I'll send it as an attachment. Mark
  24. Mark Russell

    [Contribution] Product Sort Order

    Thanks for catching that David. I pasted the wrong section :( I'll post a corrected version today to the contrib archive. M
  25. Mark Russell

    [Contribution] Product Sort Order

    I found a minor bug over the weekend. The product sort did not work past page 1 on categories with products spanning multiple pages. The fix for this is listed in the txt file as mod #7 to file: catalog/default.php. I also included screen shots in this zip. Find it here: http://www.oscommerce.com/community/contributions,911 Mark
×