*This is more of an architecture level question.
I am new to DNN development , we are trying to build an e-commerce site which will showcase all the products which will be tied to our current order database.
Am I wrong in assuming that any custom development that I do via DNN would be in MODULE form ? I created few custom module (i.e. list of products) which would tie to database in code behind and display data from SQL. This seems to be very heavy approach if I have to make modules for every functionality.
Is there a better way here ? Can I (is it recommended) to directly change the DNN pages to accommodate this type of functionality ?
UPDATED
Is it possible to do development without moduels ? i.e. provide code right in the html text editor or something. If i create new module from DNN template then it adds many files ....that is why it feels heavy
It is strongly recommended that you not directly change DNN. This will make it very difficult to apply upgrades to DNN and cause headaches for whoever maintains the site after you.
The main extensibility point in DotNetNuke is the module. The module is just some executable controls that you can place on any page. It shouldn't be significantly heavier than any other approach you would take. Whatever you want to do in DNN itself, you should be able to do in a module, and just place the module on a page.
You could also potentially have some of your functionality in the skin, rather than the module, if that is easier or makes more sense. Generally, the skin has functionality that is shared across most pages in the site, and module are used to place specific content on specific pages.
If you're looking for something simpler, you might try using the core reports module, which will allow you to style the results of a query from the database (if you don't need the interactivity that a module would provide).
Your good options are as follows
Build a separate Web Application for your e-commerce, but provide heavy inter-linking with the DNN site. With this method, DNN would be used for content.
Purchase a third party e-commerce module-set like SmithCart and try to configure it to meet your business model
Build custom DNN modules
Our current project utilizes option #3. We have 25,000 products and about 3,000 product listings with heavy customer-customization functionality.
While it might seem heavy, as in, a distinct module project per section of e-commerce, it doesn't have to be too complex.
Example Modules:
Product Listing
Product Details
Shopping Cart
Order Checkout (we split this into 4 modules)
Search Module
Search Results Module
You can use URLRewrites to map all your products to the same DNN Page/Module.
As a result, we really have very few non-content DNN pages.
In summary, it might feel a bit heavy, but with the proper design it can go rather smoothly in comparison to a separate web app.
There are ways to use existing DNN features without module development. You can do it by adding a sub application in your folder.
For example, you can look at http://www.firstphera.com/GiftRegistry/Index.aspx, FirstPhera.com is a main dnn application and folder GiftRegistry is a pure asp.net sub application that uses dnn's providers to deal with database. Custom implementation of registration and login was the only thing that was challenge, everything else working fine.
But If are building an e-commerce application, at long term you will get benefit from module development way.
It is not strictly necessary that you create separate complected module like you shown in screen shot. If you look at blog module, it has feature like latest blogs, search blog, archives etc are all implemented in single module.
It is also possible to create a single module with related features in dotnetnuke using the technique called ModuleDefinitions. Look http://lakhlaniprashant.blogspot.com/2010/04/dotnetnuke-what-is-module-definition.html.
I would strongly recommend to visit NBStore source code if you want to understand the e-commerce related module development in detail.
Please let know if you have any other question.
Related
I'm working in a web application that has several areas of bussiness work. With time it's size has became a problem to develop on and to maintain.
I would like to break the web project into several sub-projects or libraries depending on a main root web project that has the common files to share (Masterpages, Resources, Css, etc...)
Ideally I would like to have some kind of injection that allows me to optionally publish that "components" or simply publish a customized variation, although it's configuration depended on after deploy DB setup.
I searched all over the web, reading all the pages related to multiple projects, dependency injection and composite apps that I could find, 'till I soften my head, but couldn't find anything really useful.
Major part of the writings where a theoretical approaches or unit testing applications (well, you can't make your desired app, but you still can unit test something else)
Other approaches simply don't work in VS2010 .Net 4.0
Can someone address me on a COMPLETE solution or an example? Or simply lets discuss.
We say that the solution has the following structure, with module contents already separated into directories:
Solution
L_ Datalayer library project
L_ Bussiness logic /common utils library project
L_ Web project
L_ Controls
L_ Images
L_ Css....
L_ Warehouse
L_ Sales
Masterpages
...
Warehouse and Sales contains pages related to the "module"
Thanks,
I post my progress in the subject.
As per suggestion of Steven I experimented further more using MEF. Due to the lack of documentation, specially for webforms, that was a pain in*. So far I managed to implement MEF in my solution and sucessfully inserted a plugin project visible for the main app.
Then loads the available plugins, through an interface that has the plugin name, the default page url and its order, picks all this data and render a menu tab. That part it's easy.
Clicking on a menu element must redirect to the main page of the plugin, which will render several menus for its pages contained (from another export interface)
I finally got an aspx page embedded as a resource in the plugin project. Where I'm currently stuck.
¿Is there any way to render a page embedded as a resorce on a libray using MEF or I'm forced to also use a VirtualPathProvider? ¿Hows specifically the statement to redirect to that page? I've tried several ways but no-one works (MEF and VirtualPathProvider)
I looked at zillion of articles that talk about it but all them end doing control rendering, not page. So frustrating.
Though it is not an answer to your question, I am adding it as answer due to length of my suggestion.
I suggest you look into the approach NopCommerce is following where they have extended over .net with their own framework, which supports Plugins and extensions to existing solutions. Though I definitely know that nopcommerce is an ecommerce solution but if you study it, you can modify it according to your business needs or at least it can give you a heads on for what you should adopt while designing your solution. Hope it helps.
I have a website running in drupal. Is there a module or some way to build a functionality which essentially builds a crm-like system on top of drupal?
I want to basically support this,
1. Create some kind of ticketing system that keys on each user
2. A blog like interface where various customer service personnel can make comments - again keyed by userid
3. A decent interface where you can list comments etc by date
4. Possibly another page to search for entries with certain keywords.
5. Support additional customization on top.
If the above is not possible is there a easy way to embed a third party crm application in drupal to provide the above?
Thanks,
Vivek
You might like to check out Open Atrium. It is a customized Drupal distribution by Phase2 Tech. Though its an out-of-the-box solution for ticketing system, you can modify it to your needs just like any Drupal installation.
Another open source solution could be CiviCRM. It won't serve as OOB solution but provides plenty of UI configurable options to fit your needs. Its a bit complex to start but once configured well, its quite powerful system. It integrates with Joomla and Drupal.
I'm curious if a CMS like Drupal or WordPress is a suitable approach for creating a data-centric web application. It's nothing fancy, but would require a login to access, and essentially have search parameters, results pages, and detail pages. I can program this pretty easily but would prefer to just theme Drupal or WP, since I'm not much of a designer. Thanks for any insight, as well as any examples of where this might currently exist!
-e-
Sure, Drupal is suited for data-centric websites. Development Seed is a company that use Drupal and make data-centric websites but they also use other technologies such as Node.JS. As suggested by Marek Sebera, it really depends on your actual needs and what exactly your site will be doing with the data.
You basically have two ways to integrate your data into Drupal. One is to import the data into Drupal as entities (a generic concept for anything data in Drupal 7) or nodes (a concrete concept for anything content in Drupal). The other is to directly query an external data source from Drupal.
To import data, the Feeds module is a very solid and flexible solution. Out of the box it only supports CSV, Atom and RSS from local files or HTTP. But it is flexible and extensible and there is already many contributed modules that extends it.
To query the data, both external or imported, you can use the Views module to build query pages. For external data source support, you will need additional backends modules and probably have to write your own.
If you import the data as entities, you can also uses the core's EntityFieldQuery to write your own query without using Views. And you can also uses the Search API to index the imported data using a search engine such a Apache Solr.
I'm looking for best practices and good ideas rather than a proper solution.
scenario: I work in a web agency and thus we are plenty of websites from several customers. They're built upon a cms we made, so websites are quite identical for the 90% of code. However, remaining 10% struggles me and my team as it involves not only the presentation layer but behavioral logics too (ex: a website1 requires simply user/pass registration while website2 needs more data, facebook connector, etc. But this is a very easy example).
Making ad hoc development for our customers is becoming painful as keep each version aligned is getting really hard for us
What I really dream to have is an extendible website that works by itself, but in which I can override a part. This behavior should sound like "look for the specific part, if it doesn't exists get the base one". The parts could be a method, a class, a page, a control, a static file.
example:
Suppose I want website2 to have an own login component, let's so imagine that we have a situation like:
/website_base
|_ login.aspx
/website1
/website2
|_ login.aspx
So, if I ask for www.website1.com I'll get /website_base/login.aspx, but if I ask for www.website2.com I'll get /website2/login.aspx
Any idea?
Thanks
PS: we work with asp.net 3.5 framework.
There are couple of ways to achieve this.
Approach 1:
1. Split the common functionality in modules and create a pluggable structure. (like DotNetNuke) Obviously this will be more time consuming initially but over the period of time it can make itself like a product.
Approach 2:
Firstly - I would create separate solution for each client for better maintainability. This will save me a lot of hassle while maintaining the source control and when one client comes back with issues and we have multiple releases for a single client.
Secondly - From my core solution, I will identify most commonly used artifacts for each layers and move them to a core assembly.
a. For example – In UI you can use themes to give different looks for each client. Have a default master page which comes with the core site structure. All client specific details like Logo, name, contact details etc… can be configured using some DB fields.
b. In Business Layer and Data Access Layer – core functionalities like Membership, Logging, CMS related Entities etc I would have as a dll
i. I will derive my client specific logic from these core classes.
Last but not the least – how you deploy your code and how your IIS VD structure looks like… I believe it will be totally dependent on how the solution is packaged.. I would create a deployment package for each client which will give them the ability to deploy it to any server wherever they want until you have specific issues about proprietary software hosting.
Look into ASP.NET MVC. It is much more extensible than Web Forms, can be integrated into your existing Web Forms application, and it is very easy to build reusable custom components like what you are describing.
Otherwise, I would suggest looking into WebParts and developing reusable custom server controls for the components that you need. This way you can encapsulate the complex functionality within a single UI control without having to write repetitive code. WebParts are also compatible with Personalization, which you can leverage to manage the variance between which sites use which controls.
I definitely recommend MVC as the way to go for building extensible .NET web applications, but learning a new technology always incurs a cost in the time it takes to understand the new paradigm. I hope this helps you.
I found a smart solution here: http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx
Check it out
A friend of mine really likes using Joomla as a base for his websites. He also likes the power that Asp.Net has and can code in VB.Net.
He wants to use Joomla as the "Master Page" and Asp.Net/VB.Net/SQL Server to handle the main business logic of the application. He is planning on using the Joomla Wrapper Module (an IFrame, joomla modules) to integrate the ASP.Net into the Joomla website.
Joomla will be able to handle the security (users,roles,registration), menu (based on roles), static content (e.g. About Us page) and it will pass an Encrypted Username & Password to the Asp.Net web page (example here).
The goal of the website is to allow users to register & subscribe to a (free or paid) service where they will be able to customize content and download it as a file.
What disadvantages are there when doing this? Are there work arounds?
Some issues that I can think of are:
Links clicked in an IFrame won't change the browser's url which means that you can't bookmark pages and they aren't in the browsers history.
If Asp.Net has to know the users/roles (which is very likely) then it would have to access the Joomla database or keep its own user table which will have to be in sync with Joomla's users.
EDIT:
I would never build a new website this way, but I was looking for concrete points to convince my friend that using Joomla and Asp.Net together isn't a good idea.
I believe your friend's idea is fine. Both platforms have strong points. Joomla is a mature open source CMS platform that has an enormous amount of community contributed components and it is easy to use which makes it appealing. But I can also see instances where you may want to include ASP.Net functionality in certain scenarios. I have had clients who use Joomla but wanted an app I have written in .Net and it did not make sense to spend the time or money to rewrite it in PHP and MySql. The two can be integrated securely. I wish your friend luck in his endeavors.
I don't see what advantage you get from using Joomla when the app is ASP.net (nor the advantage of coding an ASP.net app when the framework uses PHP/MySQL).
I'm not convinced the security is tight because you can open iframes and bypass the Joomla security. Then you talk about passing username/password to the iframe - but now you need to validate this again through the ASP.net app.
I once coded an app in raw PHP and included it in a Joomla site using iframes. I realized fairly quickly that there was basically no security because the raw PHP had no knowledge of Joomla (although the app was not visible to site visitors and only known about by admin). I quickly recoded it into a built-in component.
To me, this sounds like you're reinventing the wheel on both sides of the app. If you want to use Joomla, either learn how to make components (it's pretty simple) and do it in PHP, or hire someone to do it for you ;).
If PHP is not your strong point, then use a full ASP.net site, perhaps with a CMS as GmonC suggested. Even creating your own basic CMS with some pre-built components (e.g. Telerik) would probably be quicker than integrating PHP and ASP.
Seriously, IMHO, if you're not going to integrate some legacy system or isn't doing this kind of "integration" development as an "experiment" to learn something - in a summarized way, if you just want to have your work done, I think the description you provided inserts a lot of complexity and overhead that aren't needed in the first place.
This added complexity of two completely different ecosystems is a disadvantage to what should be just simpler. I really believe you should try to use Joomla or other CMS written in .net like dotnetnuke (or build your own) instead of this configuration.
If you add more information about what are the goals and objectives of this project, my opinion may change. Until them, I keep my opinion of simplicity.
The time and effort you are going to go through to use Joomla is going to far outweight what it would take to just get some other CMS that was designed for .NET.
Stop over-engineering yourself into a midlife crisis.
Also, Joomla? Seriously? Joomla?
me too don't get any advantages for joomla, it's big system and it just as good as wordpress for regular projects, just wordpress is much simplier. joomla has no good documentation to learn and hard to extend.