Forum OpenACS Q&A: Response to How to get an instance url from a package key?
Posted by
Stephen .
on 11/01/01 12:03 PM
I can get the package_id from the package_key, so that's no problem.
You might get duplicates:
SQL> select package_id, package_key, instance_name from apm_packages order by package_key;
PACKAGE_ID PACKAGE_KEY INSTANCE_NAME
---------- ------------------------------ ------------------------------
209 acs-admin ACS Administration
241 acs-api-browser ACS API Browser
251 acs-content ACS Content
1113 acs-content-repository ACS Content Repository
741 acs-core-docs ACS Core Documents
765 acs-datetime ACS DateTime
1512 acs-developer-support Developer Support
96 acs-kernel ACS Kernel
780 acs-mail ACS Mail
1133 acs-messaging ACS Messaging
789 acs-notification ACS Notification
1479 acs-subsite Main Site
13050 acs-subsite Bar
13003 acs-subsite Foo Site
333 acs-tcl ACS Tcl
633 acs-templating ACS Templating
644 acs-util ACS Utilities
1020 acs-workflow ACS Workflow
2050 simple-survey Survey
1478 skin Skin
20 rows selected.
I can't find any function in site_node that will return a url.
SQL> select node_id, object_id, name from site_nodes;
NODE_ID OBJECT_ID NAME
---------- ---------- ------------------------------
1504 1479
1505 209 acs-admin
1506 741 doc
1507 241 api-doc
1510 1512 ds
13001 13003 foo
2048 2050 survey
13034 241 api
13048 13050 bar
13086 empty-folder
10 rows selected.
SQL> select site_node.url(node_id) from site_nodes;
SITE_NODE.URL(NODE_ID)
----------------------
/
/acs-admin/
/doc/
/api-doc/
/ds/
/survey/
/foo/
/foo/api/
/bar/
/foo/empty-folder/
10 rows selected.
The object_id in site_nodes is a package_id. You can join against apm_packages to get the URLs of the packages you're interested in, given a package key:
SQL> select p.package_id, site_node.url(n.node_id)
from site_nodes n, apm_packages p
where n.object_id = p.package_id
and p.package_key = 'acs-subsite';
2 3 4
PACKAGE_ID site_node.url(n.node_id)
---------- ------------------------------
1479 /
13003 /foo/
13050 /bar/
Aren't all the mounts pointing to the same thing?
For your purposes (I'm guessing) no. The testing you want to do will be agianst the database, and you'll need some data, and you'll need to distinguish it from other data. For that you need the package_id. Think of the package_id as an instance_id, it is unique for each mounted instance of a package, and distinguishes one mouonted packages data from another's.