Forum OpenACS Q&A: Re: Content management systems

Collapse
Posted by James Bennin on
Thank you so much for your reply. The question I have is how do you use the Edit-This-Page package. Can you direct me around the user interface. How do I add a content, how do I name, categorize, etc. Also, when I got to site map, on the CMS page, and try to add a basic time (uploading a file or writting a text file) I get this error:
Query did not return any rows.
    while executing
"db_1row get_storage_type {select 
        storage_type, item_id 
        from 
        cr_items 
        where 
        item_id = (select 
           ..."
    (procedure "upload_content" line 15)
    invoked from within
"upload_content $revision_id $tmpfile $filename"
    invoked from within
"if { ![string equal $tmpfile {}] } {

            set revision_id [ns_set get $bind_vars revision_id]
            upload_content $revision_id $tmpfile..."
    ("uplevel" body line 5)
    invoked from within
"uplevel 1 $transaction_code "
    (procedure "db_transaction" line 1)
    invoked from within
"db_transaction {

        db_dml add_revision $statement -bind $bind_vars 

        if { ![string equal $tmpfile {}] } {

            set revision_id ..."
    (procedure "add_revision_dml" line 2)
    invoked from within
"add_revision_dml $insert_statement $bind_vars $tmpfile $filename"
    (procedure "add_revision" line 26)
    invoked from within
"add_revision $form_name $tmpfile $prefix [expr !$exists]"
    ("uplevel" body line 8)
    invoked from within
"uplevel 1 $transaction_code "
    (procedure "db_transaction" line 39)
    invoked from within
"db_transaction {
        if {!$exists} { 
            set item_id [db_exec_plsql get_item_id  "
                     begin 
                       :1 ..."
    (procedure "content::new_item" line 56)
    invoked from within
"content::new_item create_item $storage_type"
    invoked from within
"if { [form is_valid create_item] } {

    # check for duplicate name within same folder or parent item.
    if { ![content::validate_name create_item]..."
    ("uplevel" body line 67)
    invoked from within
"uplevel {
    	  # /create-2.tcl
# Get the folder where the item is being created

# Parameters:
#
#  parent_id      - create the item under this pare..."
    (procedure "code::tcl::/web/service0/packages/cms/www/modules/items/crea..." line 2)
    invoked from within
"code::tcl::$__adp_stub"
    invoked from within
"if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init tcl $__adp_stub
..."
    ("uplevel" body line 3)
    invoked from within
"uplevel {

    if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init t..."
    (procedure "adp_prepare" line 2)
    invoked from within
"adp_prepare "
    (procedure "template::adp_parse" line 30)
    invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
    (procedure "adp_parse_ad_conn_file" line 7)
    invoked from within
"$handler"
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
	$handler
      } ad_script_abort val {
	# do nothing
      }"
    invoked from within
"rp_serve_concrete_file [ad_conn file]"
    (procedure "rp_serve_abstract_file" line 60)
    invoked from within
"rp_serve_abstract_file "$root/$path""
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
	rp_serve_abstract_file "$root/$path"
	set tcl_url2file([ad_conn url]) [ad_conn file]
	set tcl_url2path_info([ad_conn url]) [ad_conn path_inf..."
And then, when I attempt to perform a search, I get this error:
no value given for parameter "user_id" to "AcsSc.FtsEngineDriver.search.openfts-driver"
    while executing
"AcsSc.FtsEngineDriver.search.openfts-driver Edit 0 100"
    ("uplevel" body line 1)
    invoked from within
"uplevel $func_and_args"
    (procedure "apply" line 3)
    invoked from within
"apply $proc_name $arguments"
    (procedure "acs_sc_call" line 5)
    invoked from within
"acs_sc_call FtsEngineDriver search [list $q $offset $limit] $driver"
    (procedure "content_search__search_ids" line 5)
    invoked from within
"content_search__search_ids $keywords"
    invoked from within
"join [content_search__search_ids $keywords] ,"
    invoked from within
"subst -nobackslashes {

    select 
      i.item_id, content_item__get_path(i.item_id,null) as item_path,
      r.revision_id,
      t.pretty_name as ..."
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 [list subst -nobackslashes $sql"
    (procedure "db_map" line 7)
    invoked from within
"db_map sql_query"
    invoked from within
"if { [form is_valid search] } {

  form get_values search content_type keywords mime_type which_revisions start_date end_date

  # Assemble the litera..."
    ("uplevel" body line 36)
    invoked from within
"uplevel {
    	  request create
request set_param id -datatype keyword -optional
request set_param mount_point -datatype keyword -optional -value sear..."
    (procedure "code::tcl::/web/service0/packages/cms/www/modules/search/ind..." line 2)
    invoked from within
"code::tcl::$__adp_stub"
    invoked from within
"if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init tcl $__adp_stub
..."
    ("uplevel" body line 3)
    invoked from within
"uplevel {

    if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init t..."
    (procedure "adp_prepare" line 2)
    invoked from within
"adp_prepare "
    (procedure "template::adp_parse" line 30)
    invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
    (procedure "adp_parse_ad_conn_file" line 7)
    invoked from within
"$handler"
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
	$handler
      } ad_script_abort val {
	# do nothing
      }"
    invoked from within
"rp_serve_concrete_file [ad_conn file]"
    (procedure "rp_serve_abstract_file" line 60)
    invoked from within
"rp_serve_abstract_file "$root/$path""
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
	rp_serve_abstract_file "$root/$path"
	set tcl_url2file([ad_conn url]) [ad_conn file]
	set tcl_url2path_info([ad_conn url]) [ad_conn path_inf..."

Do you have any idea what those errors mean?
Collapse
Posted by tammy m on
Hi,

As for your CMS errors, I can only guess at what the errors mean. It looks like there is no storage type for your cr_item. How did you create the cr_item? Can you describe exactly the steps you are taking in the CMS interface to create an item? I don't use the CMS interface to create my documents (cr_items), I use my own package that I'm working on (not a CMS interface, just stores + manages its data in the CR) or I use ETP.

I think the CMS interface is pretty hard to use/understand. It seems to be basically a GUI that exercises just about every functionality that the CR (Content Repository) supports. It might be better looked at as an acceptance test of the CR! There is currently an effort going on to create a better, user-friendly, generic interface to the CR. So right now, some packages use the CR to store and manage their data but there isn't a "real world" usable CMS style interface.

That brings us to ETP. Edit This Page package is probably the closest to a generic, usable CMS interface that we have right now. The docs for ETP are pretty good once you understand the terminology.

If you install ETP out of the box, and mount an instance in the Site Map, you get a couple of default document styles (I think the docs call this an application). Basically how this works is each ETP "application" consists of an "index" page and subpages that contain content (your documents). You get a default document/application style set for you when the instance is mounted. You can use this default style or change to another of the styles that come with ETP for free (default, news or faq). Each of these application styles have a different sort of index page and the content pages (documents) contain different attributes/sections.

You change the application (type of documents and their index page) by choosing "Change ETP Application" under "Configuration of this document." After you change the type of application, your documents will have fields/attributes corresponding to that type. So news items have a "location" and a "release date," faq items have "question" and an "answer." The ETP UI will display the appropriate fields for the type of document you are creating when you choose "create new question" or "create new news item." You enter the fields (including document title etc) and preview what your document will look like. When you are happy with it, choose "commit changes" and your new document becomes the latest revision that is show on your website when that page is requested. You can also "preview changes" to see what your document will look like without committing to the changes and publishing them to your live website. When you go back to view your index page (the directory that you mounted ETP on in the Site Map), you will see a page that lists all your questions/answers for a faq or your current news item and a link to old news items for news.

You can also create your own application types for ETP. This lets you define custom fields for a specific type of document you wish to create. For instance, you could create a Recipe content type and have specific fields for ingredients, cooking time, etc. Once you create the content type/application for it, then ETP will present a UI to enter these fields for each document when you choose the Recipe application type. There is more on this in the ETP docs I mentioned earlier.

Once you've chosen an application, you will see an "Edit This Page" link at the bottom of any page you have permission to edit. This is how you get back to the ETP interface to edit the document or index page. This makes it nice and easy to find your content without having to go to a separate CMS interface and navigate a tree hierarchy to your page, you just go to the actual URL where the page resides within your website.

I hope this answers some of your questions. If you try to post more specific questions, you'll be likely to get more answers that will help you. Maybe jump in and try stuff and post yer questions one at a time as ya go... Good luck:)