[development] node types should not be changeable, operations need hooks

Neil Drumm drumm at delocalizedham.com
Wed Aug 23 17:18:56 UTC 2006

Jeremy Epstein wrote:
>> So, I propose that this be removed and alslo that a hook be created to
>> allow modules to act when a node type is deleted.
> -1 to this feature being removed, but +1 to creating a hook to allow
> modules to respond to changes to a node type. I have created an issue
> for this task:

This is a battle I didn't want to fight while getting configurable 
content types in core, but it needs to be fought now.

Lets look at places where the machine readable node type is used:
- Database
- PHP code
- URLs
- HTML (id and class attributes)

Here is what I think should happen in each case

Database: databases like numeric keys. I think it would be good to 
replace the machine-readable type there with numbers.

PHP code: since there is no exposed UI here (always use the [human 
readable] type name), I think the same numbers might work. This is a bit 
harder with hard-coded node types, since they have a hard-coded name 
that is used. Perhaps the hard-coded name can be recalled and used for 
hook invocation where applicable.

URLs: Currently, we have numeric ids scattered in many URLs across 
Drupal. I'd like to see this change in the future, but we don't have a 
good example of a design pattern that works and we don't have a system 
for setting up redirects for changed URLs. I'd like to see a machine 
readable name work.

HTML: There were numerous complaints about flexinode using numeric ids, 
they are clearly unacceptable here since themeing should not require 
knowledge of how the database is set up. They should be machine readable.

Two more questions- should machine readable names be changed and should 
they be configurable by users?

Machine readable names should definitely be changed. That does affect 
URLs and CSS depending upon HTML. In an ideal world, HTTP redirects 
would be set up for changed URLs, but as mentioned earlier, that doesn't 
exist at the moment. For CSS, a warning or message should inform users 
of what changes are needed.

I've summarized how to make code and the database not care about machine 
readable names changing and how to gracefully handle them changing in 
URLs and HTML. I think it is safe to assume that people want the machine 
readable name to directly correspond to the [human readable] content 
type name.

A bit about the situation now. Here is the help text for the machine 
readable name:

# The machine-readable name of this content type. This text will be used
# for constructing the URL of the create content page for this content
# type. It is recommended that this name consists only of lowercase
# letters, numbers, and underscores. Dashes are not allowed. Underscores
# will be converted into dashes when constructing the URL of the create
# content page. The name must be unique to this content type.

That is a lot to think about, especially when there is a second name 
that is human readable and directly corresponds to this name. We could 
auto-generate this name based on the current [human readable] name and 
simply remove the whole field. If we sum the combined time of people may 
spend wasting time trying to figure this out and compare that to the 
remaining developer gain, I think the users should win.

I think this is enough to show that machine readable names used in URLs 
and HTML should be auto-generated based on the content type name.

Neil Drumm

More information about the development mailing list