Product Feedback - Feature Requests

Coordinator
Nov 2, 2008 at 6:42 PM
Hi,

Please tell me more about the features you would like to see in this product.
Nov 9, 2008 at 5:45 AM
  Hi,  I am just a beginner developer, but I am an etailer that has been in search of a good ASP.Net ecommerce system.  I have found php solutions to restrictive as far as flexibility.  Anyways here is my wish list of features.

1.  A bulk import/export controller - I have yet to see a bulk import UI in any ASP.Net platform.
2. Content controllers - (on the fly content, blogs, forums) - Many site owners look to add these features which in most situations come across      integration obstacles.  I always wanted to mix community with commerce.  It's just good business.
3. User friendly URLs - I suppose this could be solved by MVC routing or perhaps the IIS7 URL rewrite module?  The thing is people cannot remember strings, but they can remember product names.
Coordinator
Nov 9, 2008 at 4:00 PM
Hi Broken Saber,

Thanks for contacting me.

Features 2 and 3 could be implemented with a good CMS, such as Sitefinity. With the way that this was made, it could be inserted into any ASP.NET application. Sitefinity has a free community edition of their product. Check it out:

http://www.sitefinity.com/product/community-edition.aspx

Sitefinity actually has a URL Rewrite portion at the URL Rewriting part of their user manual explains:

http://www.sitefinity.com/documents/UserManual_3_5.pdf

In terms of features, I am working on a sign up system similar to what the Gap has:

http://www.gap.com

I am not sure how to implement a bulk import or export controller. Can you give me an example of this?

I hope to be done with it by the end of the month and then I will release LinqCommerce 2.2.
Nov 9, 2008 at 10:43 PM

"I am not sure how to implement a bulk import or export controller. Can you give me an example of this?"

  Somewhat,  I am new to developing and I have used php based ecommerce software such as litecommerce/xcart which come with this feature built in.  I been researching how to do this with sql/asp.net with CSK 2 final.

    First though let me express the need of this feature.  Distributors and Etailers work with thousands of sku's and entering products through an admin feature one by one isn't very appealing.  It  takes to much time. As far as sql scripting or using a global application to import or export many do not know how to do this or what tables to import into.

  I have noticed a trend among developers that do not include this feature at all for one reason or the other.  Some will go back to the drawing board and make one, then either release a pro version, or add on module. Others will not even touch it.  I know one company that deletes all forum post on product import, leaving it's community to learn how to script and as a result support for it is dieing.

  As far as an etailer this is the major feature I look for and I am sure others do too.  There are tons of ecommerce carts out there, but the one that tackles the import/export issue among other issues such as seo will make it into the lime lite and live a long life.

 Ok , back to the subject.  Obviously since I am new to developing so I can't give a ASP.Net examples, but I can give you an example of what I do with litecommerce.

Importing in LC is a two step process.  You have a user control to bulk import image files either in a file system or database.  Then you have a user control to import csv files.  Basicly a ui that has hard coded scripting.

  The following is used in LC to import products.  It is php and imports into mysql

<?php

/*

 

class Admin_Dialog_import_catalog extends Admin_Dialog

{

var $params = array("target", "page", "import_error");

var $page = "products"; // the default import page

var $pages = array('products' => 'Import products',

'extra_fields' => 'Import extra fields'

);

var $pageTemplates = array("products" => "product/import.tpl",

"extra_fields" => "product/import_fields.tpl"

);

var $category_id = null;

function handleRequest()

{

if (substr($this->action, 0, 6) == "import" && !$this->checkUploadedFile()) {

$this->set("valid", false);

$this->set("invalid_file", true);

}

 

$name = "";

if ($this->action == "import_products" || $this->action == "layout") {

if (!func_is_array_unique($this->product_layout, $name, "NULL")) {

$this->set("valid", false);

$this->set("invalid_field_order", true);

$this->set("invalid_field_name", $name);

}

if ($this->action == "import_products" && !in_array("category", $this->product_layout) && $this->category_id == "") {

$this->set("valid", false);

$this->set("category_unspecified_error", true);

}

}

if ( ($this->action == "import_fields" || $this->action == "fields_layout") && !func_is_array_unique($this->fields_layout, $name, "NULL") ) {

$this->set("valid", false);

$this->set("invalid_field_order", true);

$this->set("invalid_field_name", $name);

}

 

parent::handleRequest();

}

function action_import_products()

{

$this->startDump();

$options = array(

"file" => $this->getUploadedFile(),

"layout" => $this->product_layout,

"delimiter" => $this->delimiter,

"text_qualifier" => $this->text_qualifier,

"default_category" => $this->category_id,

"delete_products" => isset($this->delete_products) ? true : false,

"images_directory" => $this->images_directory,

"save_images" => isset($this->save_images) ? true : false,

"unique_identifier" => $this->unique_identifier,

);

$product =& func_new("Product");

$product->import($options);

}

function action_layout($layout_name = "product_layout")

{

$layout = implode(',', $_POST[$layout_name]);

$config =& func_new("Config");

if ($config->find("name='$layout_name'")) {

$config->set("value", $layout);

$config->update();

} else {

$config->set("name", $layout_name);

$config->set("category", "ImportExport");

$config->set("value", $layout);

$config->create();

}

}

function action_import_fields()

{

$this->startDump();

$options = array(

"file" => $this->getUploadedFile(),

"layout" => $this->fields_layout,

"delimiter" => $this->delimiter,

"text_qualifier" => $this->text_qualifier

);

 

$field =& func_new("ExtraField");

$field->import($options);

}

function action_fields_layout()

{

$layout_name = "fields_layout";

$layout = implode(',', $_POST[$layout_name]);

$config =& func_new("Config");

if ($config->find("name='$layout_name'")) {

$config->set("value", $layout);

$config->update();

} else {

$config->set("name", $layout_name);

$config->set("category", "ImportExport");

$config->set("value", $layout);

$config->create();

}

}

function getPageReturnUrl()

{

$url = "";

switch ($this->action) {

case "import_products":

$url = array('<br>Products imported successfully. <a href="admin.php?target=import_catalog"><u>Click here to return to admin interface</u></a>');

break;

case "import_fields":

$url = array('<br>Product extra fields imported successfully. <a href="admin.php?target=import_catalog&page=extra_fields"><u>Click here to return to admin interface</u></a>');

break;

default:

$url = parent::getPageReturnUrl();

}

return $url;

}

/**

* @param int $i field number

* @param string $value current value

* @param boolean $default default state

*/

function isOrderFieldSelected($id, $value, $default)

{

if (($this->action == "import_products" || $this->action == "layout") && $id < count($this->product_layout)) {

return ($this->product_layout[$id] === $value);

}

if (($this->action == "import_fields" || $this->action == "fields_layout") && $id < count($this->fields_layout)) {

return ($this->fields_layout[$id] === $value);

}

return $default;

}

}

// WARNING :

// Please ensure that you have no whitespaces / empty lines below this message.

// Adding a whitespace or an empty line below this line will cause a PHP error.

?>

Coordinator
Nov 10, 2008 at 1:11 PM
Hi,

Thanks for the code sample. I do see some similarities between PHP and the LINQ code needed. I would need a for each loop to say " For each record, insert it into the database." If the info is in XML, there's a book called LINQ in action that describes how to import XML into a database. Is the data you want to import in XML? If the data is in another database, you can use LINQ to map that database's table out (assuming it is in SQL Server) and tell it to import each record one by one into another table. Let me get back to you next week or later this month with a possible add on for this feature. I think it is a great idea! By the way, would you want to be a beta tester or help in any other way with this solution? If so, let me know.
Nov 10, 2008 at 8:54 PM

 Hi Joe,  I been doing more research and found a few blogs and some info from the msn library.  I added a Linq dataClass and did a bit of mapping plus, with a little help from ASP.net I started to make the UI.  I didn't get to far though because my work week started and of course I have to make time for that and the family.

  I been thinking starting a group around this project, because it is a good idea, but also that with linq it is pretty much cross platformed.  Thus it could be used on just about any database and work with just about every cart software out there.  I was thinking of two designs. A web form (which is used internal in the admins area) and the other a Windows UI for PhP carts.

XML is fine, csv is mainstream, and also Xls (excel) - There are many converters out there, so converting a csv to XML isn't much of an issue.
And yes I would love to beta test.  You should have my email. If not PM me.

Coordinator
Nov 12, 2008 at 11:36 PM
Hi,

Sorry for the late reply. I have been working on the 2.2 release of this project, which will include support for user profiles and signing in. I hope to have a release either this weekend of next weekend. I have the files ready, but I want to test them more thoroughly and I want to make some more documentation. I don't have your e-mail, so please send it to me. To avoid the spamers, do something like this:

joe At yahoo dot com

As for the importer capability - I think you should start your own project on that feature. When it is done, I can see if it can be integrated into this project. Right now, I am unable to implement such a feature. I will discuss later how this project can fit into the Sitefinity CMS Community Edition (the test version works with the CMS) and that way you can have a copy of the Telerik.Web.UI assembly needed to make this work. I'll write more later about this. By the way, in what city are you living in now? I am from the Boston area. 
Nov 13, 2008 at 2:24 AM

 Hey Joe,  The binding with CMS is great. 

  As far as the importer I am making a little headway, but I am waiting for some emails to come in from a few devs over at asp.net and microsoft.  I just need to get a C# syntax and the rest will go together like a ham and cheese sandwitch.  I should have an alpha ready by 2 weeks at the latest.

  Anyways just an hour ago I purchased a asp.net based store to replace my php based store that bit the dust do to hardware failure and file corruption.

  This weekend I'll be consentraiting on it.

 

btw check your PMs

PS I live north of St Louis

Nov 2, 2009 at 12:47 PM

I would like to see file delivery options for digital products like ebooks, audio files, etc., with expiring links and/or other anti-theft security built in.