if it helps a few thoughts;

I like to think of objects - they have a definition and instances of them. 
All you need is a way to indicate a tiddler is an object eg a tag or custom 
field object-type="book".
next you have a tiddler in the view template that responds to the existence 
of the object-type field and it's content;

<$list filter="[all[current]get[object-type]] variable=object-type>
every object eg; edit mode switch
  <$list filter="[<object-type>match[book]]">
     handle books here
  </$list>
  <$list filter="[<object-type>match[author]]">
     handle authors here
  </$list>
</$list>

On this example the Template is the logic in the ViewTermplate, this makes 
it easy to add a new field to all tiddlers of a given object type when they 
are displayed.

You can also create A new tiddler button that adds the required fields in 
one click as you create a new instance of the object. 

Regards
Tones

On Saturday, 17 April 2021 at 06:51:41 UTC+10 si wrote:

> Very nice Anders, thank you. Is the standardtext field necessary? Why not 
> just have a tiddler $:/view/book which can be transcluded via a 
> ViewTemplate onto any tiddler with tiddlertype=book?
>
> On Friday, 16 April 2021 at 13:20:51 UTC+1 Anjar wrote:
>
>> Hi Si, 
>>
>> Thank you for clarification; however, I think the approach is still valid 
>> and demonstrated how it works, and with minor adjustments you can have 
>> field templates across source types;
>>
>> (1) Make tiddlers with
>> - title starting with "$:/template",
>> - a field tiddlertype, for example tiddlertype: book,
>> - a field standardtext, for example standardtext: {{||$:/view/book}}, and
>> - required (empty) fields, for example booktitle and genre
>>
>> (2) Make
>> - title starting with "$:/fieldtemplate", and
>> - text with how the field should be edited, eg.
>> -- A tiddler $:/fieldtemplate/booktitle with text: Title: <$edit-text 
>> field="booktitle" />
>> -- A tiddler $:/fieldtemplate/genre with text: Genre: <$select 
>> field="genre"><option>Horror</option><option>Poetry</option><option>Screenplay</option></$select>
>>
>> (3) The add/edit tiddler can be
>> \define tiddlername() {{!!tiddlertype}}: <<now "YYYY-0MM-0DD 0hh:0mm:0ss" 
>> >>
>> \define fieldtiddler() $:/fieldtemplate/$(currentFieldTiddler)$
>>
>> <$list filter="[title[$:/temp/edit]!has[text]]">
>> <$list filter="[prefix[$:/template]]">
>> <$button>
>> <$wikify name=newtiddlername text=<<tiddlername>> >
>> <$action-createtiddler $basetitle=<<newtiddlername>> 
>> text={{!!standardtext}} tiddlertype={{!!tiddlertype}} />
>> <$action-setfield $tiddler="$:/temp/edit" text=<<newtiddlername>> />
>> </$wikify>
>> Create {{!!tiddlertype}} Tiddler
>> </$button>
>> </$list>
>> </$list>
>> <$list filter="[title[$:/temp/edit]has[text]get[text]]" 
>> variable="edittiddler">
>> <$set name=tiddlertype filter="[title<edittiddler>get[tiddlertype]]">
>> <$list 
>> filter="[prefix[$:/template]tiddlertype<tiddlertype>fields:exclude[list 
>> title text tags created modified]]" variable="currentFieldTiddler">
>> <$tiddler tiddler=<<edittiddler>> >
>> <$transclude tiddler=<<fieldtiddler>> mode="block"/>
>> </$tiddler>
>> </$list>
>> </$set>
>> <$button>
>> <$action-deletetiddler $tiddler="$:/temp/edit"/>
>> Ok
>> </$button>
>> </$list>
>>
>> Now, the form is populated with the corresponding fieldtemplates derived 
>> from the fields in the tiddler template. If the same field name is used in 
>> another tiddler template, the same field template is used
>>
>> I provide a working example so that you, but most importantly others who 
>> perhaps is searching for similar solutions, can test and play around
>>
>> Best,
>> Anders
>>
>> fredag 16. april 2021 kl. 13:18:39 UTC+2 skrev si:
>>
>>> @Anders The disadvantage of your approach is that you have to manually 
>>> create a form for every type of source, many of which will share fields 
>>> with one another. The reason I asked about the best way to associate 
>>> source-types with their required fields is to avoid this problem. If you 
>>> know which fields you want for a particular source-type, it should be 
>>> possible to automatically generate a form/table for adding new sources. 
>>> Just to be clear I wasn't asking for help on how to actually generate the 
>>> forms, just on the best way to associate source-types with their required 
>>> fields.
>>>
>>> @Sjaak Your point did occur to me, though I am not sure that I will 
>>> personally need any different data-entry-methods. I think it would be 
>>> possible to add the information about how the data for a field should be 
>>> entered within the tiddler that represents the field itself. For example 
>>> "Book" could in some way be associated with a tiddler representing the 
>>> field "format". Then the "format" tiddler could have its own field 
>>> containing something like 
>>> <$select><option>Paperback</option><option>Hardback</option></$select>. 
>>> This should give you enough information to generate forms with custom 
>>> data-entry-methods, and apply them to any source-type without having to 
>>> re-write any code.
>>>
>>> On Thursday, 15 April 2021 at 23:40:59 UTC+1 Anjar wrote:
>>>
>>>> Hei Sjaak,
>>>>
>>>> I think a similar approach can be useful;
>>>>
>>>> (1) Make tiddlers with
>>>> - title starting with "$:/template",
>>>> - a field tiddlertype, for example tiddlertype: book, and
>>>> - a field standardtext, for example standardtext: {{||$:/view/book}}
>>>>
>>>> (2) This time, the template contains the form you want to use, for 
>>>> example, $:/template/book can contain
>>>> |Composer: |<$edit-text field="composer" /> |
>>>> |Title: |<$edit-text field="musictitle" /> |
>>>> |Genre: |<$select 
>>>> field="genre"><option>Horror</option><option>Poetry</option><option>Screenplay</option></$select>
>>>>  
>>>> |
>>>>
>>>> (3) Make a new tiddler with the content:
>>>> \define tiddlername() {{!!tiddlertype}}: <<now "YYYY-0MM-0DD 
>>>> 0hh:0mm:0ss" >>
>>>>
>>>> <$list filter="[title[$:/temp/edit]!has[text]]">
>>>> <$list filter="[prefix[$:/template]]">
>>>> <$button>
>>>> <$wikify name=newtiddlername text=<<tiddlername>> >
>>>> <$action-createtiddler $basetitle=<<newtiddlername>> 
>>>> tiddlertype={{!!tiddlertype}} text={{!!standardtext}} />
>>>> <$action-setfield $tiddler="$:/temp/edit" text=<<newtiddlername>> />
>>>> </$wikify>
>>>> Create {{!!tiddlertype}} Tiddler
>>>> </$button>
>>>> </$list>
>>>> </$list>
>>>> <$list filter="[title[$:/temp/edit]has[text]get[text]]">
>>>> <$tiddler tiddler=<<currentTiddler>> >
>>>> <$set name=edittitle 
>>>> filter="[prefix[$:/template]tiddlertype{!!tiddlertype}]">
>>>> <$transclude tiddler=<<edittitle>> mode="block"/>
>>>> </$set>
>>>> </$tiddler>
>>>> <$button>
>>>> <$action-deletetiddler $tiddler="$:/temp/edit"/>
>>>> Ok
>>>> </$button>
>>>> </$list>
>>>>
>>>> The latter tiddler will be your interface and new tiddlers are added in 
>>>> the background. They will have the standardtext as text, and you edit them 
>>>> directly from the interface tiddler using the form from the template 
>>>> tiddler
>>>>
>>>> Best,
>>>> Anders
>>>>
>>>> torsdag 15. april 2021 kl. 20:55:29 UTC+2 skrev sjaakad...@ziggo.nl:
>>>>
>>>>> Hi Si,
>>>>>
>>>>> I have been thinking about an approach like yours but have not 
>>>>> implemented anything yet. It seems important to me that some fields may 
>>>>> be 
>>>>> of a different kind than just text to be entered. Like choosing from a 
>>>>> list 
>>>>> of options (with f.i. the select widget or radio widget). 
>>>>> My 2 cts.
>>>>>
>>>>> Greetings,
>>>>> Sjaak
>>>>>
>>>>> On Thursday, April 15, 2021 at 4:27:48 PM UTC+2 Anjar wrote:
>>>>>
>>>>>> Hi Si,
>>>>>>
>>>>>> Have a look at this post: 
>>>>>> https://groups.google.com/g/tiddlywiki/c/Q3vU6tnPffI/m/WNguU1p6BwAJ
>>>>>>
>>>>>> It's about using premade templates to create new tiddlers; you can of 
>>>>>> course add a form if you prefer that, instead of editing the new tiddler 
>>>>>> directly
>>>>>>
>>>>>> Best,
>>>>>> Anders
>>>>>>
>>>>>> torsdag 15. april 2021 kl. 16:06:52 UTC+2 skrev si:
>>>>>>
>>>>>>> @Springer Thanks for your reply.
>>>>>>>
>>>>>>> >>> The lovely thing is that you can filter on a tag (or any other 
>>>>>>> filter condition), to see a column for each of the fields you care 
>>>>>>> about 
>>>>>>> for that tag (or filter condition), with a row for each tiddler that 
>>>>>>> fits 
>>>>>>> the condition (and the ability to "clone" new rows into existence).
>>>>>>>
>>>>>>> How do you tell TiddlyWiki which fields to associate with each 
>>>>>>> reference-type? So for example you were to add a tiddler with the tag 
>>>>>>> "Book", you would want your table to give you the option to add fields 
>>>>>>> like 
>>>>>>> "author", "title" etc. If you had a tiddler tagged "Movie" you might 
>>>>>>> want 
>>>>>>> "director", "year" etc. My question is about the best way to associate 
>>>>>>> a 
>>>>>>> particular type of source with the particular fields that it requires.
>>>>>>> On Wednesday, 14 April 2021 at 21:10:07 UTC+1 springer wrote:
>>>>>>>
>>>>>>>> Si, I highly recommend checking out all the RefNotes resources 
>>>>>>>> (active here recently, contributed by Mohammad). 
>>>>>>>>
>>>>>>>> My own approach is to use a DYNAMIC TABLE (Mohammad's Shiraz) for 
>>>>>>>> each reference-type. The lovely thing is that you can filter on a tag 
>>>>>>>> (or 
>>>>>>>> any other filter condition), to see a column for each of the fields 
>>>>>>>> you 
>>>>>>>> care about for that tag (or filter condition), with a row for each 
>>>>>>>> tiddler 
>>>>>>>> that fits the condition (and the ability to "clone" new rows into 
>>>>>>>> existence). Then you don't have a separate challenge of generating 
>>>>>>>> forms. 
>>>>>>>> Unless you really want to. ;)
>>>>>>>>
>>>>>>>> -Springer
>>>>>>>> On Wednesday, April 14, 2021 at 3:03:02 PM UTC-4 si wrote:
>>>>>>>>
>>>>>>>>> I use TiddlyWiki to manage sources (books, movies etc), and I want 
>>>>>>>>> to create an easy way to add tiddlers for individual sources.
>>>>>>>>>
>>>>>>>>> I have decided to add tiddlers that represent a "source-type", and 
>>>>>>>>> then use it to generate a form that allows me to enter metadata for a 
>>>>>>>>> new 
>>>>>>>>> source. For example I might have a source type "Book", which is used 
>>>>>>>>> to 
>>>>>>>>> generate a form like this:
>>>>>>>>>
>>>>>>>>> Title: ...
>>>>>>>>> Author: ...
>>>>>>>>> Year: ...
>>>>>>>>>
>>>>>>>>> While "Movie" might have a form like this:
>>>>>>>>>
>>>>>>>>> Title: ...
>>>>>>>>> Director: ...
>>>>>>>>> Producer: ...
>>>>>>>>>
>>>>>>>>> Obviously I need to associate the required metadata-fields with 
>>>>>>>>> their source-type. I can think of two ways to do this:
>>>>>>>>>
>>>>>>>>>    - Add a field to each tiddler type called "required-fields" 
>>>>>>>>>    which lists the required metadata-fields.
>>>>>>>>>    - Create separate tiddlers for each possible metadata-field, 
>>>>>>>>>    then tag them with any source-type that requires them.
>>>>>>>>>
>>>>>>>>> It's not obvious to me that there is any functional difference 
>>>>>>>>> between these two options, but if I make a bad choice it will be 
>>>>>>>>> difficult 
>>>>>>>>> to change down the line. So my question is: *Is there a reason 
>>>>>>>>> that one of these approaches is better than the other?*
>>>>>>>>>
>>>>>>>>> Thanks in advance for you help.
>>>>>>>>>
>>>>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to tiddlywiki+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/390c8b77-1f74-4eef-ac39-651509595cedn%40googlegroups.com.

Reply via email to