Editors' manual
This manual is for everyone who maintains content in the backend of camindo CMS – editors, authors and translators. The work surface is designed so that most steps explain themselves; this manual clarifies the connections and presents the functions that are easy to overlook.
Contents
- Key terms – frontend and backend, content area, record, input field, status, template
- Signing in and out – sign-in, sign-in code, language, date format, time zone
- The work surface – start page, layers, keyboard operation, background processes, messages, AI assistant, personal settings, widgets
- Finding content – folder tree, record list, search form, search operators, cross-area search
- Editing records – creating, editing, copying, moving, deleting, trash; input fields, relations, files, publication, edit lock
- Multilingual content – language versions, translating, finding missing translations
- Batch processing – change, move or delete many records at once
- Export and import – CSV for Excel, Word files for translators, XML backups, re-import
- Frontend editing and preview – editing content directly on the website
- Reviewing contributions from website visitors – reviewing comments, profiles and other contributions, personal data export, deleting profiles
At a glance: what makes camindo CMS special for editors
- One interface for everything. Whether articles, products, appointments or images – every content area has its own, suitable input form, search form and list. Operation is the same everywhere. Training new colleagues takes minutes, not days. A cross-area search lets you find any content managed in the CMS.
- Many records at once. With batch processing you change a field in hundreds of records with one click. Via the CSV export you edit content in Excel and load it back in.
- Nothing gets lost. You always work on a working copy; the website only shows your changes after you save. The edit lock prevents two people from editing the same record at once. Deleted content goes to the trash first and can be restored.
- Translating without CMS access. The DOCX export creates a Word file for the translation agency; the translated file is simply imported again.
- Much can be automated. Talk to your template programmer if you want to get rid of tedious tasks – the functionality is already in the system: sending regular overviews by email, automatic booking confirmations as PDF, archiving old entries, and much more.
- Help from artificial intelligence. The add-on module “AI assistant” is there to help you: it carries out changes on your behalf or explains functions to you. If the assistant does not have the necessary rights itself, it can open the appropriate input form in the backend for you.
1 Key terms
Before you start, this chapter explains a few terms. They come up again and again in all chapters.
Frontend and backend
camindo CMS has two faces:
- The frontend is the website that is visible on the internet.
- The backend is the work environment in which content is maintained.
You also open the backend in a web browser, but it is only accessible to authorized people in your organization, the “users”.
User and user group
User means every person who works in the backend – regardless of whether they act as an editor, translator, administrator or programmer.
Every user belongs to a user group. The user group determines which modules, websites, content areas and languages its members can see and edit. The user group Superuser may do everything.
Website visitors who register on the frontend are called frontend users. Their representation in the CMS is a profile record (see chapter 10).
Instance (website)
A camindo installation can run several websites – each with its own domains, languages and content. Such a website is called an instance. If you work with several instances, the backend shows a separate main folder for each instance.
Content
Content refers to all the content managed in the CMS as a whole.
Record
A record is a self-contained unit of content – comparable to an article that consists of “Title”, “Text”, “Image” and “Author”. You create, change and delete records using the input form.
A record does not have to be an article in the editorial sense. Any unit of content can be a record: a product description, an address, an appointment, an image with a caption – or simply a keyword, a place name or a category.
A piece of content is worth storing as its own record mainly when it appears in several places on the website.
Example: An “author” is created once and linked to all of their “articles”, instead of being typed out again in every article. If the biography changes, you change it in one place. The same applies to an image: stored as its own record, it can carry additional information (caption, photographer, copyright) and be included in any number of articles without being uploaded more than once.
When you save, the CMS automatically adds background information, the metadata: when and by whom the record was created and last changed, who it belongs to (the owner), and its number (record_id).
Content area
Records are stored in content areas (in the backend also called “content area”). Each content area has its own field structure, for example:
| Content area | Input fields |
|---|---|
| Articles | Title, date, teaser, text, image, author |
| Addresses | First name, last name, phone, email |
| Images | Image file, caption, copyright |
Each content area provides an input form, a search form and a record list that match its fields exactly. Your administrator can add further fields at any time, even while the website is in operation.
You can group several content areas into folders.
Input field
An input field holds one part of the record – a title, a date, a file, a link to another record. Each field has a type (text, number, date, file, relation …), which determines what can be entered and how it is checked. One field per content area is the main field: its content stands in for the whole record, for example in lists and relations – usually the title or name.
Status
The status describes the editing state of a record, for example “Enabled”,
“Disabled” or “Incomplete”. Only records with the status “Enabled” can be accessed
through the frontend.
The standard installation ships with the two statuses “Enabled” and “Disabled”. Your
administrator can add further statuses. They are then automatically available in all
content areas that have a “Status” input field.
Timed publication
For each content area, a publication date and an expiration date can be
set. Once these are set, a record can be published on a schedule.
Records with a future publication date cannot be accessed on the frontend yet.
Expired records are no longer listed in automatically generated lists, but can still
be accessed directly (archiving of old content).
Workflow
camindo CMS supports flat workflows. Examples:
- Members of a user group have restricted access to the status; for example, they cannot enable records themselves.
- Members have restricted access to language versions; they can only translate content into their own language.
Records can be passed on via internal messages.
Template
Templates determine how content appears on the website. They contain the design
(for web pages: HTML) and place the contents of the records within it.
Beyond that, templates can take on complex tasks: generate lists and paging, find
linked content, evaluate forms, register and sign in visitors.
HTML is only one publication channel. Templates can also output content in other
formats, e.g. XML, JSON or PDF.
A record is displayed automatically with the default template of its content area. If your administrator has released further templates, you can select one in the record's input form. The selected template then determines how the record appears on the frontend.
For an overview, see the manual for template programmers.
Working copy and edit lock
When you edit a record, camindo CMS works on a working copy. The website keeps showing the previous state until you save. As long as you are editing a record, it is locked for other users (edit lock, see chapter 5).
Trash
Deleted records first go to the trash and are only removed permanently after a retention period. By default this is 7 days. Each user has their own trash and can restore what they have deleted (see chapter 5).
Background process
Tasks with a long run time – such as a large import, batch processing or the conversion of a video – run as a background process. You can keep working in the meantime; you receive the result as an internal message (see chapter 3).
2 Signing in and signing out
You reach the backend of camindo CMS via the path /backend on your website, for
example:
https://www.your-website.com/backend/
Often the backend is reachable under a separate domain or a subdomain of your website, for example:
https://subdomain.your-website.com/backend/
Ask your administrator for the correct address.
Access always requires signing in. Enter your user name and password and click
“Submit”.
Two-factor sign-in
According to current standards, your administrator should enable two-factor sign-in.
Without a second factor you have no access to the backend, even with the correct
password.
camindo CMS offers four ways to provide the second factor:
- Code by email
- Code from an authenticator app (TOTP)
- Passkey (WebAuthn)
- Known device
Sign-in code by email
After you enter your password, camindo CMS sends a code to the email address of your user account. Enter this code in the next step. The code is valid for only a few minutes (ten by default). If it has expired, simply sign in again.
Code from the authenticator app
If you have set up an authenticator app (see below), camindo CMS asks for the six-digit code that the app currently displays after your password. The code changes every 30 seconds. Each code is valid for only one sign-in.
If you do not have your phone at hand, enter one of your recovery codes instead
(format ABCDE-FGHJK). Each one can be used exactly once. You then receive an email
telling you how many are still left. If the phone is lost or no code is left, your
administrator can reset the app for your account. You then sign in again with the email
code and set up the app anew.
A wrong code counts like a wrong password (see Blocked sign-in). After a failed attempt you start again at the password.
Confirm with passkey
If you have set up a passkey (see below), the sign-in dialog shows the button “Confirm with passkey” after the password. Your browser or device then asks for your fingerprint, face, device PIN or security key – nothing more is needed. Without the device, enter a recovery code in the field below (or the code from your authenticator app, if you have set that up as well).
Set up a passkey
A passkey is a convenient and secure form of authentication. Because the passkey is bound to the domain of the backend, it is resistant to phishing and to the interception of sign-in data. It is stored directly on your device (for example via Windows Hello, Touch ID/Face ID or Android), in a password manager or on a hardware security key (for example a YubiKey).
- Open your personal settings and click the button next to “Two-factor sign-in”.
- Under “Passkeys” click “Add passkey”, give it a name (for example “Office computer”) and confirm with your password.
- Click “Create passkey now” and follow the instructions of your browser.
- If this is your first passkey and you do not yet have recovery codes, ten of them appear. Store them in a safe place.
It is best to set up two passkeys, for example on your computer and on your
phone. On the same page you can remove a passkey again (with your password). You receive
an email for every new and every removed passkey.
Note for administrators: passkeys are only available if the backend runs under a fixed
address of its own – otherwise the page shows a notice.
Set up an authenticator app
An authenticator app is much more secure than the code by email: the code is generated on your phone and does not pass through any mailbox. Any common app is suitable, for example Google Authenticator, Microsoft Authenticator, 2FAS (iOS & Android) or Aegis (Android).
- Open your personal settings (gear icon ) and click “Authenticator app” next to “Two-factor sign-in”.
- Click “Set up authenticator app” and scan the QR code with the app. If that does not work, type in the key shown below it.
- Enter the six-digit code that the app now displays and click “Activate”. Only then is the app switched on.
- Ten recovery codes appear. Store them safely – in a password manager or printed out, not on the phone with the app. They are shown only once.
On the same page you can later generate a new set of recovery codes (the old ones expire), switch back to the code by email (“Switch to code by email”) or switch off the app. You confirm all of these with a code from the app or a recovery code. You receive an email about every change – if you receive one you did not expect, change your password immediately.
Turn on the email code yourself
If two-factor sign-in is disabled (not recommended), you can choose the email code for your account yourself: in the personal settings, under “Two-factor sign-in”, click “Authenticator app” and then “Turn on code by email”. camindo CMS sends you a five-digit code; the choice only takes effect once you enter it. You switch it off the same way.
If your administrator has made the app mandatory, you set it up directly at sign-in: after the password (and the email code, if applicable), the sign-in dialog shows the QR code and then your recovery codes. In that case it cannot be switched off.
Notice for a new device
If you sign in on a computer, phone or browser that camindo CMS does not yet know from
you, you receive an email “New sign-in” with the device, IP address and time. If it was
you, nothing needs to be done. If it was not, change your password immediately and inform
your administrator.
By the way: even after deleting the browser cookies or in a private window, the browser
counts as a new device.
Change password
You change your own password in your personal settings
(gear icon ) under “Password” with “Change password”:
enter your “Current password” to confirm, then enter the new password twice. The new
password must differ from the current one. After saving, your sessions on other devices
end, and you receive an email. While you type, a speech bubble shows what the password
requires (by default at least 12 characters, one special character, an uppercase letter
that is not the first character, and a lowercase letter). A bar below shows the password
strength.
Tip: several words separated by punctuation marks are long, strong and easy to remember.
New password at sign-in
In two cases the sign-in dialog asks for a new password – together with the password and the code – before it continues:
- Initial password: another user has created your account or reset your password. Now choose your own password. Nobody but you should know it.
- Expired password: your administrator has set a validity period, and it has run out. The new password must differ from the previous one.
Devices and sessions
The personal settings under “Devices and sessions” show the devices you have signed in from and how many sessions are currently running on each. The device you are using is marked “this device”. For each device, the following is stored: browser and operating system, IP address, and the time of the first and last sign-in.
- “Remove” deletes a device you do not know or no longer use – its sessions end immediately. If someone signs in from there later, it counts as new again, and you receive an email. If you remove your own device, you are signed out.
- “End all other sessions” signs you out everywhere else – for example if you forgot to sign out on a computer you do not own. Input forms still open there are discarded, just as when you sign out on all devices, and the records are released for others immediately. The forms in this window stay open.
Blocked sign-in
After several failed attempts (by default three within ten minutes), camindo CMS temporarily blocks sign-in for this user name. The message states the waiting time. Before the last permitted attempt you receive a warning.
Language, date format and time zone
Below the credentials you choose the language of the backend user interface. You set the date format and time zone after signing in, in the personal settings – where you can also change the language at any time. As long as you have not set the date format and time zone yourself, the defaults of your system administrator apply.
Language
The language of the backend user interface is independent of the languages of your
website. The sign-in form remembers your last choice in this browser.
The following backend languages are available after installation (more can be installed
later):
- Arabic
- Bengali
- Chinese (Mainland)
- German
- English
- French
- Hindi
- Japanese
- Korean
- Portuguese (Brazil)
- Spanish
- Urdu
Date format
Choose the locale whose notation you are familiar with. Date, time and number values follow it – both in the display and when you enter them.
Examples of date, time and number formats can be found in the section Date and time.
Time zone
camindo CMS stores points in time in a uniform world time (UTC). If you enter “18:00”, the system needs to know which time zone this refers to. Conversely, it converts stored points in time into your time zone for display. This way, colleagues in different time zones each see the same point in time in their local time.
Example:
| Date format | Time zone | Value | |
|---|---|---|---|
| Input | en_US | America/New_York (UTC−5) | 12/31/2026 9:00 PM |
| stored | UTC | 2027-01-01 02:00 |
|
| displayed | de_DE | Europe/Berlin (UTC+1) | 01.01.2027 03:00 |
Converted date-time values get the time zone appended, for example:
27.09.2026, 15:06:59 Europe/Berlin
Not converted are plain times and fields of the type “Date + time” without a time zone reference – for example opening hours, which apply everywhere in the same way.
Automatic sign-out
After a period without activity (30 minutes by default), camindo CMS signs you out automatically. Background checks for new messages do not count as activity. The sign-in window then appears over the work surface. After you sign in again, you continue at the same place – unsaved input remains in the input form.
Logout
Click the icon in the sidebar and confirm the prompt. Only this browser is signed out. Input forms that you have open on another device remain there. Frontend editing that you switched on “until sign-out” ends with it.
What the checkbox “Sign out on all devices” is good for:
It makes sure that all your sessions are ended and that records which were locked by
mistake (an input form that was not closed properly) are released for others at once. If
you find an open input form later and want to save it, this is no longer possible.
You end individual devices under Devices and sessions.
3 The work surface
Start page
After signing in you land on the start page. It is divided into four slots. The module buttons are at the top left; you can fill the other three slots with widgets (see below).
The module tiles are sorted alphabetically, in the selected backend language. Which ones you see depends on the rights of your user group.
The modules
For editors
| Module | Task | Manual |
|---|---|---|
| Contents | Search, create and edit records of all content areas | Chapters 4 to 8 |
| Users | Manage users and user groups | Administrators |
| Trash | Records previously deleted by the signed-in user | Administrators |
| AI assistant | Get support from AI | Add-on module |
For website administrators
| Module | Task | Manual |
|---|---|---|
| Instances | Set up websites with their domains and languages | Administrators |
| Languages | Set up the languages of the websites | Administrators |
| Snippets | Maintain the text snippets of the website in all backend languages | Administrators |
| Structure | Set up content areas and their input fields | Administrators |
| Status | Define the editing states for records | Administrators |
| Media converter | Set up the conversion of images, videos and audio files | Administrators |
For programmers
| Module | Task | Manual |
|---|---|---|
| Templates | Edit the templates of the website | Template programmers |
For system administrators
| Module | Task | Manual |
|---|---|---|
| Scheduler | Scheduled tasks, e.g. database backups | Administrators |
| Tools | Maintenance of database, data and server | Administrators |
| Components | Install and update add-on modules | Administrators |
| Log files | Review the system logs | Administrators |
| Audit log | Review changes to all records | Administrators |
Sidebar
The sidebar can be reached from every page.
| Symbol | Meaning |
|---|---|
| Main menu – at the top “ Info” (version of camindo CMS) and “ Manuals”, below them the same modules as on the start page; this lets you switch to another module from any page | |
| Logo | back to the start page |
| Background processes – see below | |
| Messages – the number on the symbol shows the unread messages | |
| personal settings | |
| Sign out |
Manuals
In the main menu the entry “Manuals” opens these manuals directly in the backend – in the language of the user interface, as long as they exist in it; otherwise in English.
A manual opens as its own layer above the overview; the path bar then shows for example “Manuals › Manual for editors”. Clicking “Manuals” closes the manual and returns you to the overview.
Above the text you will find:
- a search field – it finds sections in which all the words you enter occur,
- the selection of the manual (editors, administrators, template programmers and the manuals of installed add-on components) – it also limits the search and the index,
- the index – all headings and the bold-italic terms, from A to Z, each with a link to the place,
- the print view – as soon as a manual is selected.
At the end of each page, “Back” and “Next” lead to the previous and the next chapter of the same manual. Add-on components (such as the AI assistant) come with their own manuals; the overview of manuals lists them under “Manuals of add-on components”.
The “Print view” opens the manual as a whole on one long page in a new window: first its overview, then all chapters in the order of the table of contents. Links within the manual jump to the place in the document; links to other manuals remain plain text. “Print” opens the print dialog of the browser – there you can also save the manual as a PDF. On paper, each chapter starts on a new page.
Layers
Every page you open – whether a record list, a detail view or an input form – is placed as a new layer over the previous one. A breadcrumb trail above the page shows which layers are open. Clicking an entry in it closes all layers up to the one you want.
The browser's Back and Forward buttons work inside the backend, but they can lead to misunderstandings and may cause data loss (an open input form closes unintentionally). It is better not to use them at all.
Lists and context menus
In all lists of the backend, the following applies:
- Clicking a row opens the detail view.
- Right-clicking a row opens a context menu with the most common actions, such as “Edit”, “Copy” and “Delete”. Actions for which you lack the right do not appear.
- Clicking a column heading sorts by this column; a second click reverses the
direction.
A sort order that differs from the default sort order of the area is highlighted in yellow and named, for example “Title ascending”. Clicking the X at the far right resets the sort order. - The menu at the top right of a list contains further functions – in the record list, for example, “Export”, “Import” and “Batch processing”.
Keyboard operation
The backend can be used entirely without a mouse and with a screen reader. The Tab key moves from element to element, Shift+Tab moves back; the selected element has a frame.
- Skip to content: The first press of the Tab key shows “Skip to content” at the top left and – on the second press – “Skip to path navigation”. Press Enter to skip the header bar with the main menu and the symbols.
- Main menu: The button opens it with the first entry selected. The Esc key closes it again; the same applies to the list of background processes.
- Lists: Every row can be reached with the Tab key. Enter opens the detail view, Shift+F10 or the context menu key opens the context menu. In the menu you choose with the arrow keys, Enter carries out the action and Esc closes the menu.
- Column headings also sort with the Enter key.
- Layers: When you open a new layer, the selection is on its heading. When you close it, the selection returns to where you opened the layer – for example to the row of the list.
- Forms: If saving reports an error, the selection is on the first field with an error; the error message belongs to the field and screen readers read it out with it.
- Notes on a field (the question mark next to the label) also appear when you reach them with the Tab key; Esc hides them.
Short messages such as “Saved” remain visible for a few seconds, error messages longer. While the mouse pointer or the selection is on a message, it stays visible. If your operating system has “reduce motion” switched on, the backend does without animations; you can also switch off the slide animation of lookup fields in your personal settings under “Animation”.
Background processes
Functions with a long run time – batch processing, import, export, deleting many records, the conversion of videos – run as a background process. For many of these functions you can choose yourself:
- In the foreground you wait until the task is finished and see the result right away. This is convenient for smaller tasks.
- In the background you keep working right away. The result – a log or a download link – arrives as an internal message in your inbox.
From a certain number of records onward, a task always runs in the background.
While a process is running, the hourglass spins. When the
process has finished, a short message appears in the foreground.
Clicking the hourglass opens the list of your running processes with a progress display.
There you can also abort a process. Failed processes remain in the list until you remove
them.
Messages
The envelope symbol gives you access to the internal messages. You can use them to write to other users. They receive a message only in the backend, not at their email address. On request, camindo CMS can also send you a daily summary by email.
- “Inbox” and “Outbox” are on separate tabs.
- You can mark messages as read or unread and as important, reply to them and forward them.
- Message about a record: in the detail view of a record, the menu contains the entry “Message”. The message then contains a link to the record – practical for queries or corrections for colleagues.
- camindo CMS itself also sends you messages: the results of background processes, import logs and download links for exports.
Summarize messages by email
If you do not look into the backend every day, it is easy to miss a message. In your personal settings, select “Summarize messages by email” – “daily”. If new messages have arrived for you since the last summary, you receive an email to your stored address in the morning, containing
- the number of all unread messages, grouped by sender, and
- the new messages with date, sender and subject.
The email contains no message texts and no contents from records – these remain in the system. You can read the messages only after signing in to the backend; the email deliberately contains no link there. Without new messages, no email is sent. A prerequisite is an email address in your account.
Messages are deleted automatically after a fixed period – typically 60 days after sending, although your administrator can set a different period. Anything you need for longer does not belong in a message but in a record.
If you delete a message, it disappears only from your list; the recipient or sender keeps the version that was sent.
Personal settings
The gear opens your personal settings.
| Setting | Effect |
|---|---|
| Backend language | Language of the user interface (as with sign-in) |
| Date and number format | Locale for date, time and number values |
| Time zone | Time zone in which you see and enter points in time |
| Preferred language version | For multilingual content, the input form opens this language first (see chapter 6) |
| Frontend editing | Shows edit links directly on the website (see chapter 9) |
| Dark mode | Switch for the dark color scheme of the user interface; switched off (default), the light one applies. The sign-in page uses the color scheme last used in this browser |
| Animation | “on” (default): when a lookup field opens the list of the linked area, it slides in from the side. “off”: the list appears immediately |
| Dashboard widgets | see below |
| Subscribe to reports | Reports that your administrator has released for your user group – after every run, the result arrives as a message in your inbox. This entry only appears if such reports exist |
| Summarize messages by email | “daily”: an email with the unread messages per sender and the new ones with their subject, only if new messages have arrived (see Summarize messages by email) |
| Two-factor sign-in | Shows how you sign in (email code, authenticator app or passkey); the button next to it sets up the app and passkeys (see chapter 2) |
Start page widgets
The start page has four slots. The module tiles always occupy the top left slot; on the other three slots (“top right”, “bottom left”, “bottom right”) you can place widgets – small overviews provided by modules. Several widgets may share a slot; they then appear one below the other.
In the settings, select a widget and a slot and click “Add”. “Remove” takes it out again. Please note: both changes only take effect when you click “Save”. Only widgets of the modules to which you have access are offered.
For editors
| Widget | Content |
|---|---|
| Unreviewed content of frontend users | Contributions and profile records of frontend users that still need to be reviewed (see chapter 10) |
| Trash | Number of entries in your trash; a click opens it |
For administrators
| Widget | Content |
|---|---|
| Log files | the most important messages of the system logs from the last few days (superusers only) |
For superusers, important system messages are also shown below the module tiles, without the need for a widget.
For template programmers
| Widget | Content |
|---|---|
| Template messages | List of templates with errors (parsing errors) |
Add-on modules can bring further widgets.
AI assistant (add-on module)
If the add-on module AI assistant is installed and your user group has access to the module, Ctrl+K opens the assistant in a side panel – from every page of the backend. On a Mac it is ⌘+K (Command key). A second Ctrl+K or ⌘+K in the input field closes the panel again. Only in a text editor that assigns the keys itself (for example for “Insert link”) does its function apply there.
Give the assistant an instruction or ask a question. Create line breaks with
Shift+Enter. A plain Enter sends the message.
The assistant searches, reads, creates and changes records.
While it works, the chat shows every step as a short text reply in italics. The final
answer is more detailed.
- Stop: next to the display “The assistant is working …”, “Stop” ends the work after the current step. If you send a new message, it continues.
- Confirm: before the assistant changes, deletes or moves something, or edits many records at once, it asks. The prompt shows the record and, for changes, before and after for each field, as well as the result of a test run. You can allow only this action or this and similar actions of the same kind until the end of the chat – or decline. Reading and creating run without a prompt.
- Show: ask the assistant to show you something – a record, a filtered list, an input form or another view you are allowed to open – and it opens it as a layer next to the chat. What it cannot do itself, it also opens and tells you step by step what to do.
- What you have open: with every message the assistant learns which layers you have
open – for example the list of an area and a record above it – and for the top layer
also your search criteria. So you can simply write “Help me with this article” or
“Why don’t I find article X here?”. Labels and ids are passed on, no contents; search
values in encrypted fields appear only as
[encrypted]. What you have typed in an open input form but not saved yet is not visible to it. - Questions about operation: “How do I change one word efficiently in 100 records?” – the assistant looks it up in the manuals and, on request, opens the matching page for you.
- Open input forms: the assistant does not change a record you currently have open in an input form; it asks you to save or close the form first.
- New chat: start a new chat with the symbol “New chat”.
- Previous chats: you find earlier chats with the symbol “Previous chats” and on the start page of the module in the tab “Previous chats”. Clicking a row continues the chat in the side panel; you delete it via the context menu (right mouse button). Depending on the settings, a deleted chat stays readable for superusers for a few days.
- Close the side panel: the X symbol at the far right closes the side panel.
Below the input field you see the model and the tokens used so far in the chat,
broken down into input, input retrieved from the cache, and output.
If the assistant was interrupted in the middle of its work (for example because the browser
was closed prematurely), the chat offers “Continue” or “Stop” the next time you open it.
The assistant is a language model of an external provider. Its answers can be wrong or incomplete – check the results, and confirm only what you understand. The assistant works with your user rights and has no access beyond them. If it changes content, the audit log shows your user name – but with the origin “llm” (for large language model). Your own activities carry the origin “backend”.
4 Finding content
You maintain all records in the module “Contents”.
The folder tree
The start page of the module shows, on the left, the tree of folders and content areas to which you have access. Clicking a folder expands or collapses it; clicking a content area opens its record list. If your installation runs several websites (instances), each one appears as its own main folder in the tree.
Above the tree are the buttons “Search” (for the search across several areas, see below) and “Refresh”.
Recently changed
To the right of the area tree, “Recently changed” lists the ten records that you yourself last saved in the input form – the most recent one at the top. Each entry shows the fields that also appear in the record list of its area, one below the other (the main field in bold), followed by the time of your last save. Clicking opens the detail view.
The list is personal: changes made by other users do not appear here. Nor do records that were changed through an import or batch processing. Records in the trash and records to which you no longer have access are hidden. If you have not saved anything yet, the area stays empty.
The same list exists in the module “Templates” for the most recently saved templates: name, label and template area.
The record list
The record list shows the records of a content area, 20 per page; you page through the rest below it. Which columns it shows is determined by the administrator for each content area. Above the list there is a note about the area (if one has been entered) and the following buttons:
| Button | Effect |
|---|---|
| “New” | create a new record |
| “Search” | open the search form of the area |
| “Refresh” | reload the list |
| Menu | Export, Import, Media import, Batch processing, settings of the area (depending on your rights) |
- Sorting: click a column heading. Without a selection, the default sort order of the area applies.
- Filtering by status: the heading of the status column has its own menu. It shows only records in a certain state, for example only disabled records or only contributions from website visitors that still need review (“Unreviewed”).
- Hierarchy: in areas with a tree structure (for example pages with subpages), the list shows the records in their order and indented.
- Clicking a row opens the detail view, right-clicking opens the context menu (“Edit”, “Copy”, “Delete”).
While a search is active, the list shows above it what was searched for. The list remembers the search, the sort order and the page position as long as you stay in this layer. Clicking the X at the far right resets the filters to the defaults of the area.
The search form
The search form of a content area offers all fields that the administrator has released for search, plus always the fields “ID, slug or URL” and “Full text”, the publication and expiration date, the creation and change dates, and the sort order of the result. In areas with a tree structure, the depth is added to the parent record; in areas for user contributions, the frontend users are added. Other fields can be added temporarily.
The basic rules:
- Search terms in different fields: all filled-in fields must match (AND).
- Search terms in the same field: it is enough if one of them matches (OR). Different
terms can be separated by a comma or
OR, for exampleHamburg, Bad Homburg. - Upper and lower case and accents do not matter;
ßandssare the same. - The rules of the language in which you search apply: in German,
äequalsae(Muellerfinds “Müller”); in Swedish,öis a letter of its own (odoes not findö).
Wildcards
The asterisk * stands for any sequence of characters:
| Input | Finds |
|---|---|
Smi* |
Smith, Smithers, Smiley |
*son |
Johnson, Anderson, Wilson |
*ford* |
Stratford, Ashford, Fordham |
Without an asterisk, camindo CMS searches for exactly this value.
Comparison operators
A character in front of the search value changes the comparison:
| Input | Meaning |
|---|---|
Berlin or =Berlin |
equal to |
!Berlin |
not equal – everything except Berlin |
!*son |
everything that does not end in “son” |
==Star* |
exactly equal – the asterisk counts here as an ordinary character |
>100, >=100 |
greater than, greater than or equal to |
<100, <=100 |
less than, less than or equal to |
= |
field is empty |
A search value that begins with an HTML tag is not a comparison: <section> searches for
exactly this value. To find texts or template code that contain a tag, use asterisks:
*<section>* – or *<section* if the tag may have attributes.
Several conditions in one field
With AND and OR (surrounded by spaces) you combine conditions within the same field:
| Input | Finds |
|---|---|
Hen* OR Her* |
begins with “Hen” or with “Her” |
>2 AND <4 |
values between 2 and 4 |
!2 AND !3 |
neither 2 nor 3 |
Please note: the comma and AND/OR cannot be mixed within the same field.
Date and time
You may enter dates in your usual notation (15.06.2023) or in the international format
(2023-06-15). The CMS completes incomplete entries sensibly:
| Input | Finds |
|---|---|
2023 |
everything in 2023 |
>=2023-06 |
from 1 June 2023 onward |
<2023-06-15 |
before 15 June 2023 |
>2012 AND <2014 |
everything in 2013 |
today |
everything from today |
>=today-7d |
from the day one week ago |
<now-2h |
older than two hours |
utc_now, utc_today |
like now/today, but in world time |
now (the current moment) and today (today, 0:00) refer to your time zone; they may be
followed by an offset in seconds (s), minutes (m), hours (h) or days (d).
Not yet translated: (empty)
The search value (empty) finds records that have no content of their own in a field –
either because the field is empty or because the content of the main language was
automatically used for this language (incomplete translation). For a file field,
(empty) finds records without an uploaded file. !(empty) finds the opposite.
More on this in chapter 6.
ID, slug or URL
In “ID, slug or URL” you can paste whatever you have at hand: the record number (4902), the
slug (gt, with slug prefix models/gt), or a complete address of the website
(https://www.example.com/en_US/models/gt). The language in the address does not matter;
camindo CMS shows the record in your preferred language version.
Full-text search
Each content area has the search field “Full text”: it searches all text fields of the area and the file names of uploaded files at once – including the texts of hard-linked content (for example the image title of a product) – in the language you are currently editing. Encrypted fields and passwords are not included. The system administrator can set up further full-text fields from selected fields – also from linked records, for example the keywords of a product. Different rules apply to all full-text fields:
| Input | Finds records that … |
|---|---|
müller meier |
contain “müller” or “meier” |
+müller +meier |
contain both words |
+müller -disabled |
contain “müller”, but not “disabled” |
sofa-white or sofa_white |
contain the words “sofa white” directly one after the other |
Words joined by a hyphen or underscore are found separately and as one word: “sofa-white” can
be found with sofa-white, sofawhite and white; “E-mail” also with EMail. The period only
separates words – including in file names: sofa-white_front.jpg is found with front,
sofa-white, sofawhitefront or jpg.
The full-text search also follows the rules of the language: in German, Mueller finds
“Müller” and vice versa, but Muller does not; in Swedish, forvaring does not find
“förvaring”.
There are no wildcards in the full-text search. Very short words (fewer than three letters)
are not found, and neither are HTML markup: searching for <section> in the full-text search
finds nothing – for that, use the search with asterisks in a text field (see above).
Encrypted fields
Fields that are stored encrypted (for example phone numbers or email addresses) can only be searched by their complete value – without wildcards and without greater-than/less-than. Upper and lower case, spaces and punctuation do not matter in this case:
| Input | Finds the stored value |
|---|---|
jane.doe@example.com |
“Jane.Doe@Example.com” |
+49 171 123456 |
not “0171/12 34 56”, but “49 171-123-456” |
Parts of a value (for example only doe or only the domain) cannot be found. The digits
themselves must match – 0171… and +49 171… are different numbers for the search.
Linked records
There are several ways to create links, which your administrator can set up. If very many records can be selected, direct selection becomes confusing. In that case a lookup field is used for the selection. It works like the lookup field in the input form – only the button is missing. Several selected values are combined with OR.
Files
The search field of an upload field searches the stored file name – with wildcards, like
any text field (*holiday*, *.pdf). Below it, expand “File properties” to search for
further details of the file:
| Field | Content | Examples |
|---|---|---|
| Width, height | dimensions of an image or video in pixels | >=1920, <800, >1000 AND <2000 |
| File size | size in bytes; with the multipliers k (×1024), M (×1024²), G (×1024³), a trailing B is allowed |
>500k, <2.5M, >1M AND <5MB, >=1G |
| MIME type | file type as recognized by the server | image/jpeg, image/*, video/*, application/pdf |
| File extension | extension, with or without a period | pdf, .jpg, png, !webp |
Filled-in properties must apply together to the same file (AND): Width >=1920 and
File size <500k finds large images with a small memory footprint. Several values in one
field (jpg, png) count as OR, as everywhere. For the file size, the period is the decimal
separator (2.5M) – the comma separates search values. If properties have a value, the
section is already expanded the next time you open the search form.
Depth in the tree
In areas with a tree structure (for example pages with subpages), the field “Depth” appears
directly below the field for the parent record. It refers to the record selected there –
like filter[depth] in CMS:SELECT:
| Depth | Finds under the selected parent record |
|---|---|
| empty | all descendants |
1 |
only the direct children |
2 |
children and grandchildren |
Without a selected parent record, the depth has no effect.
Frontend users
If visitors of the website are allowed to create content in an area (an area for user contributions), the search form shows the lookup field “Frontend user”: select one or more user profiles to find only their contributions.
More fields
Below the “Search” button is the selection “More fields”. It contains the fields of the area that the administrator has not released for the search form. “Add” reloads the search form with the selected field – search terms already entered remain. In this way you can add several fields one after another; they are highlighted in yellow and apply only to this search (also when you open the search form again from the list of results). The released fields of the area do not change as a result.
Cross-area search
The “Search” button on the start page of the module searches several content areas at once. The form shows only fields that can be searched in all areas. The most useful is the full-text field, which stores the contents of all text fields of a record (except encrypted values and passwords).
Via “More fields” (see above) you can add properties here that all records have:
| Field | Searches for |
|---|---|
| Status | the state of the record |
| Frontend user | the user profile that created the contribution on the website |
| Owner | the user to whom the record belongs in the backend |
| Instance | the website to which the record belongs (only with several websites) |
| Needs review | contributions from website visitors that still need review |
| Template | the template with which the record is output |
5 Editing records
The detail view
Clicking a row in the record list opens the detail view of the record. It shows the tabs “Contents”, “Meta data” and “Changes”.
“Contents” tab: here you find the values entered and uploaded files, including the
automatically generated file versions (for example preview images). Linked records are
listed one below the other, each with its symbol and as a link to its detail view. If there are
more than 20 links, clicking “more…” opens the list of all linked records.
Long texts appear shortened; “more…” after them shows the full text. If the field is edited
with an editor for Markdown or HTML (extensions MarkdownVisual, HTMLVisual), the full text appears
formatted – with headings, emphasis, lists and links.
Multilingual content is shown in your preferred language version.
Use the selection below the tab to switch the language.
The button “Show full text” displays what the full-text search searches for this record –
per language, from its text fields and file names. For multilingual content there is one tab per
language.
“Meta data” tab: here you find the background information, such as the record number, area, instance, status, publication period, design template, owner, and who created and last changed the record, and when. In the section “Used by”, the button “All references to this record” lists all records that point to this one via a relation field (unidirectional or bidirectional).
“Changes” tab shows the history of the record, with the newest change first: when, by whom and from where (backend, website, import …) it was created, changed, deleted or restored. For each change the changed fields are shown with their state before and after side by side. For texts, unchanged paragraphs are gray, removed ones red and new ones green. In a changed paragraph, the changed words are highlighted. This way you can also find a text that was overwritten by mistake and restore it by hand.
| Button | Effect |
|---|---|
| “Edit” | open the input form |
| “Copy” | open the input form with a copy of the record |
| “Delete” | delete the record (after a confirmation prompt) |
| “Preview” | show the record the way the website displays it – even if it is not yet published (see chapter 9) |
| Menu | “Move” to another content area, “Message” about this record to a colleague; for profile records of the website, “Export of personal data” (see the manual for administrators) |
Creating, editing, copying
- Creating: in the record list, click “New”.
- Editing: in the detail view, click “Edit”, or choose “Edit” from the right-click menu in the list.
- Copying: “Copy” opens the input form with all contents of
the original, including files and relations. The copy is placed directly after the original. Hard-linked
content (such as text-image blocks) is copied along with it. In manually sorted lists, the
copy goes to the end.
Important: other records that point to the original will point to the copy afterwards as well. Relations that allow only one linked record are excluded.
In the input form, required fields are marked with *. A question mark or a note below the field label
explains what to enter. “Save” applies the entries, “Cancel” discards all changes. Always use one of these
two buttons to close the input form – otherwise the edit lock remains in place by mistake, and other users
cannot edit the record; see Edit lock.
If the input check finds errors, the form appears again; the affected fields are highlighted and name the error. Your entries are kept – including files that have already been uploaded.
Working copy
As long as you are editing a record, you work on a working copy. The website continues to show the previous state. Only “Save” applies your changes – completely and in one step: texts, files, relations and all language versions. “Cancel” discards the working copy; the record stays as it was.
Switching between the language tabs of the form also saves your entries only in the working copy.
Edit lock
If a colleague opens a record that you are currently editing, they receive a note: “This record is currently being edited by …”. They can override the lock – but then you can no longer save your changes. Therefore override a lock only if you are sure the colleague is no longer working on the record (for example because they left the form open and cannot be reached).
A lock expires by itself if nothing has been changed in the working copy for a longer period (90 minutes by default). Your own locks do not hinder you – for example if you open the same record in a second browser window.
Input fields
Which fields an input form has is determined by the administrator. Most of them are self-explanatory; here are the special features.
Text
Single-line and multi-line text fields. Some text fields offer an editor (WYSIWYG editor) with a toolbar for headings, emphasis, lists and links. They work like a word processor.
Editor with formatted view
| Symbol | Key | Effect |
|---|---|---|
| bulleted list | ||
| numbered list | ||
| align text left, center, right | ||
| Tab / Shift+Tab | in a list item: increase or decrease the indent | |
| Ctrl+B (Mac: ⌘B) | bold | |
| Ctrl+I (Mac: ⌘I) | italic | |
| Ctrl+U (Mac: ⌘U) | underlined | |
| Ctrl+K (Mac: ⌘K) | link | |
| Ctrl+Alt+1 … 6, Ctrl+Alt+0 | heading 1–6 or paragraph | |
| Ctrl+Z, Ctrl+Y (Mac: ⌘Z, ⌘⇧Z) | undo, redo | |
| — | horizontal line | |
| — | special character | |
| — | create or change a table | |
| — | the symbol shows the current writing direction; clicking it reverses the direction | |
| — | view the source code – Markdown or HTML, depending on the editor | |
| ⇧⏎ | Shift+Return creates a line break within the paragraph, list item or table cell |
|
| ⏎ | Return creates a new paragraph, list item or table row |
|
| ⏎ ⏎ | two × Return ends text alignment, a list or a table |
Writing direction: a field writes in the direction of its language – an Arabic text from right to left, a German one from left to right. If an Arabic text contains a German word or a formula (or vice versa), select that part and click the writing-direction button. The part then appears with a dashed border and is also displayed in its direction on the website.
Tables are inserted with the table button; you specify the number of columns and rows. The first row
is always the header row. The appearance on the website depends on the stylesheet that your template
programmer includes. If the cursor is in a cell, the table button offers additional
options: insert or remove a row, insert or remove a column. Changing the text alignment always affects the
whole column.
Shift+Return creates a line break within the cell. Return starts a new row.
Special characters such as non-breaking or narrow spaces and the soft hyphen are highlighted in gray in the editor, so that you can see them.
When pasting, the editor takes over only what it can display: formatting from Word, Google Docs or web pages is converted into supported formatting; images, colors and fonts are removed.
Selection
Drop-down lists, radio buttons, check boxes and switches. For some check-box lists, the order of the selected entries can be set with arrow buttons.
Numbers and amounts
Enter numbers in the notation of your locale (1.234,50 or 1,234.50). Currency amounts require exactly two
decimal places.
Date and time
Date fields offer a calendar to choose from. You can also type the date – in your usual notation. Points in time are entered and displayed in your time zone (see chapter 2).
The backend displays date, time and numbers in the notation of your locale (example: 26 September 2030, 2:30 PM, 1234.5 with two decimal places):
| Locale | Date | Time | Number |
|---|---|---|---|
ar_SA (Arabic) |
٢٦ سبتمبر ٢٠٣٠ م |
٢:٣٠ م |
١٬٢٣٤٫٥٠ |
bn_BD (Bengali) |
২৬ সেপ, ২০৩০ |
২:৩০ PM |
১,২৩৪.৫০ |
de_DE (German) |
26.09.2030 |
14:30 |
1.234,50 |
en_US (English) |
Sep 26, 2030 |
2:30 PM |
1,234.50 |
es_ES (Spanish) |
26 sept 2030 |
14:30 |
1.234,50 |
fr_FR (French) |
26 sept. 2030 |
14:30 |
1 234,50 |
hi_IN (Hindi) |
26 सित॰ 2030 |
2:30 pm |
1,234.50 |
ja_JP (Japanese) |
2030/09/26 |
14:30 |
1,234.50 |
ko_KR (Korean) |
2030. 9. 26. |
오후 2:30 |
1,234.50 |
pt_BR (Portuguese, Brazil) |
26 de set. de 2030 |
14:30 |
1.234,50 |
ur_PK (Urdu) |
26 ستمبر، 2030 |
2:30 PM |
1,234.50 |
zh_CN (Chinese, Mainland) |
2030年9月26日 |
14:30 |
1,234.50 |
Date and time appear one after the other, usually separated by a comma (26.09.2030, 14:30). Seconds
appear only if they are not 0 (14:30:15).
When entering values, camindo CMS is more lenient. Besides the displayed form, you can enter a date in a
short form (26.09.30, 9/26/30) or in a long form with the month spelled out (26 September 2030); the
international notation 2030-09-26 (also 2030-09-26 14:30) works in every locale. Times are understood as
14:30, 14.30, 14h30, 14 or 2:30 pm – also after a date (9/26/2030 14:30). In date, time and number
fields, the digits of Arabic and Bengali script count just like 0–9: with ar_SA you can therefore type
26/09/2030 or 1234.50, even though the backend displays ٢٦ سبتمبر ٢٠٣٠ م or ١٬٢٣٤٫٥٠.
Password
A password field never displays the stored value. If you leave it empty, the previous password is kept.
Files
Upload fields let you upload a file from your computer. Your administrator determines which file types are allowed; a file whose content does not match its extension is rejected. The form shows a preview or an icon for the file type and the properties of the file (name, size, dimensions).
Very large files, such as videos, are often too large for an upload through the browser. Have them transferred to the upload directory of the server via FTP and select them with “ Select file on the server”. With the switch “delete after successful transfer” below the selected file, it disappears from the upload directory as soon as the record is saved; if you cancel the editing, it remains there.
camindo CMS automatically generates further versions from an uploaded file – for example scaled-down images, preview images or web-compatible videos (thumbnails). This happens when you save; time-consuming conversions such as videos run in the background. Until they are finished, the form shows a placeholder image.
Please note: the original file name appears on the website in the address of the file (for example
/media/…/1977,beach-north.jpg). You change it in the detail view via the pencil icon next to “Original
filename” – without uploading the file again. The file extension remains unchanged. This is not possible while
the record is being edited.
Relations
Relation fields connect the record with records from other areas – an article with its author, its keywords or its images. Depending on the setup, a relation field appears as a selection list or as a lookup field with a search window:
- The search button opens the record list of the target area with check boxes. Searching,
sorting and paging work there as usual.
If you have entered a text in the search field, only records whose main field contains this text are listed. The filter rules from the section “The search form” apply here as well – for example*sofa*for all records whose main field contains “sofa” or “Sofa”.
If exactly one record is found, it is immediately linked and appears in the preview list below the lookup field. - Tick the records you want. If a record is still missing, create it directly with “New” – it is linked immediately.
- “Done” closes the search window. The linked records appear in the preview list below the lookup field.
- The button “New” opens the input form for a new record in the target area directly.
- The button “Refresh” reloads the preview list with linked entries below the search field, in case an entry does not appear by itself.
- The button “Unlink” next to each entry in the preview list removes a single link.
- The button “Clear” removes all links in this field.
- With the arrow buttons you change the order of the links in this field, provided the field allows manual sorting.
Relations are made on the working copy. Only when you save are the changes transferred to the original record.
Some relations are mutual (bidirectional): if you link an article with a category, the article also appears on the category's information page. Some allow only one linked record.
Embedded content
Some records are assembled from building blocks – for example a page with text-image blocks. These blocks are separate records in their own right, but they belong firmly to their main record and are edited directly in its input form:
“Add content” (or “Add …” with the name of the block) creates a new block. The input fields of the block appear in the input form.
The menu “Edit content” in the upper left corner of each block offers the following options:
- “Insert before”
- “Insert after”
- “Move up”
- “Move down”
- “Delete”
All changes to the blocks take effect together only when the record is saved. Copying, moving and deleting the record include its blocks.
Publication and other metadata
Depending on the setup, the input form contains some of the following fields:
| Field | Meaning |
|---|---|
| Status | editing state. Only enabled records appear on the website |
| Publication date | the record appears on the website only from this point in time |
| Expiration date | from this point in time the record no longer appears in the lists of the website; it remains reachable via its address |
| Design template | template for this record, if it is to be displayed differently than usual. “(Default)” uses the default template of the area |
| Parent dataset | parent record in areas with a tree structure, for example the page above a subpage |
| Position after... | allows manual sorting: the preceding record is selected |
| Needs review | marks content that still needs to be reviewed |
| Owner | the user to whom the record belongs (only with the right “Set owner”) |
If the area has a field for the web address (slug) and it is left empty, camindo CMS fills it in when
saving, from the main field (for example the title). From “Our company party 2026” the slug becomes
our-company-party-2026. If you change the title later, the web address deliberately stays the same – otherwise
links that have already been shared would break. If the slug should be generated anew, empty the field before
saving. You can also deliberately enter a text that differs from the main field; it is simplified on saving just
like a slug generated from the main field (lowercase letters; spaces and special characters become hyphens): “My
article!” becomes my-article. A pure sequence of digits cannot be used as a slug, because it would conflict with
the ID. When saving, a minus sign is added in front of it.
Moving
A record can move to another content area – for example a message from “News” into the “Archive”. In the detail
view, choose the entry “Move” and then
the target area.
Because each area has its own fields, you then assign each field of the previous area to the field of the target area
that is to take over its content. Only matching fields are offered. “Delete” discards the content of a field.
When moving, the input check of the target area applies. If required information is missing there, the input form of the target area opens, and you complete the missing fields. “Save” completes the move; “Cancel” leaves the record unchanged in its previous area.
Records in a tree structure with subordinate records, and records that someone else is currently editing, cannot be moved. To move many records at once, use batch processing.
Deleting
“Delete” removes a record after a confirmation prompt. If it has subordinate records, you choose whether these are deleted as well or moved up one level. Hard-linked content (embedded blocks) is always deleted along with the record.
If the record is linked to other records, the confirmation prompt states their number (linked records, for example “This record is linked to 3 other records”). All links are counted – including those you do not see in the input form, such as the articles of a category. “Details” shows these records across areas in a list of results; check there before deleting whether the links are still needed.
What exactly happens when deleting is determined by the deletion policy of the content area; the confirmation prompt tells you beforehand, for example:
Deletion policy “Delete record” – The record is moved to your trash. After 7 days: permanent deletion
Usually, deleted records first go to the trash and are only removed permanently after the retention period (7 days by default). Until then you can restore an accidentally deleted record yourself (see Trash). A policy can also leave a record in place and only overwrite fields (for example anonymize a customer profile) or delete it permanently right away – the prompt tells you which. When deleting a profile, the prompt also states what happens to the user's contributions.
Trash
Each user has their own trash. You open it with the “Trash” button on the start page, or via the widget of the same name, which shows the number of deleted entries.
The list “Records deleted by me” contains everything that you have deleted – the most recently deleted record is at the top. For each entry you see:
| Column | Content |
|---|---|
| Deleted on | time of deletion |
| Record | title and number (ID) of the record; “with n child records” if subordinate records were deleted along with it |
| Area | content area from which the record comes |
| Permanently deleted from | from this point on, the nightly cleanup run removes the entry irrevocably |
“Restore” brings the record back after a confirmation prompt – with its files, hard-linked content and relations, to its old place.
Branches are restored as a whole. If you deleted a record together with its subordinate records, only the top record of the branch appears in the list. When restoring, all subordinate records that were deleted together with it come back as well. A subordinate record that you had already deleted individually beforehand stays in the trash; it appears in the list as soon as its parent record has been restored.
Not shown in your trash:
- records from a content area that was itself deleted; only a superuser can restore that, and with it its records
- records from areas to which you no longer have access
- records that another user has deleted
If an entry shows “no permission”, you no longer have the right to delete in this area and therefore also to restore. In that case, contact your administrator.
6 Multilingual content
Language versions
Each website (instance) has a primary language and can offer further languages –
for example German as the primary language, plus English and French. Each language is a
language version of the website with its own address, such as www.example.com/en/….
Not every field is multilingual.
- Multilingual fields (title, text, caption …) have their own content for each language.
- Monolingual fields (price, date, item number …) apply to all languages equally.
Files can be multilingual, too – for example a PDF brochure for each language, or an image with embedded text.
A multilingual field marked as required does not have to be filled in in every language.
The requirement then only means an entry in the primary language (usually English).
See also “Missing translations”.
The input form
How the input form shows multilingual fields is set for each content area:
- All languages on one page: each multilingual field appears once per language, one below the other; the label names the language code, such as “en_US”.
- One tab per language: the form has one tab per language and a tab “All languages”. A language tab shows the multilingual fields in that language and the monolingual fields. When you switch tabs, your entries are kept; everything is saved together with “Save”.
In the detail view of a record, there is only the tab “Contents” even with “One tab per language”. You choose the language there in the selection menu below the tabs. The selection “All languages” shows multilingual fields in all languages directly one below the other.
The language in which the form starts is set in your personal settings under “Preferred language version”. The same setting determines the language in which the record list, search and detail view show the content. As a translator, select your target language here.
Which languages you can see and edit depends on your user group. Languages you may only read appear as plain text without an input field.
Writing direction: texts of a multilingual field follow the direction of their language – Arabic, Hebrew, Persian or Urdu texts run from right to left, German or English texts from left to right, regardless of the language in which you use the backend. Monolingual fields follow the language of the backend. Technical details such as email addresses, phone numbers and passwords always run from left to right.
Missing translations: the primary language steps in
If a translation is missing in a multilingual field, the website shows the content of the primary language at that place. This applies field by field: an article with a German title but an English text that is not yet translated shows the German title and the English text in the German language version.
The website therefore stays complete during translation. As soon as you enter a translation, it appears. If you empty the field again, the primary language steps in again.
To really show no text, a single space is enough as an entry. However, such content is not
found in the backend when you search for (empty).
Finding missing translations
In fact, the content of the primary language is stored in the multilingual field several times when it is not filled in in every language. Searching for the German title “History” therefore also finds the record whose title “History” is shown on the website, although it was only entered on the “en_US” tab.
To find all records whose multilingual content has no content of its own in the language
you are looking for, use the placeholder (empty). In short:
(empty) finds records without their own translation.
!(empty) conversely finds all records with their own translation.
- In your personal settings, set the “preferred language version” to the language you want to check.
- Open the search form of the area and enter
(empty)in a field, such as the title. - The list shows all records whose title has not been translated yet.
Translating
Larger translations do not require translators to work in the CMS:
- The DOCX export creates a Word file with all texts to be translated. The translator overwrites them in Word; the DOCX import transfers the translation back into the CMS. For more, see the section Translating with Word (DOCX).
- The CSV export provides multilingual fields in one column per language, such as
titel.de_DEandtitel.en_US. This is handy for translating many records at once in a spreadsheet (see chapter 8). - With batch processing you write one content into many records at once – including multilingual fields.
7 Batch processing
Batch processing changes, moves or deletes many records in a single operation – for example:
- assign a new category to all products of a series,
- deactivate all news items from last year or move them to the archive,
- set an expiry date for all job advertisements of a department,
- lock all articles by a certain author.
You reach batch processing from the record list via the menu → “Batch processing”. The function requires the matching permission of your user group.
Step 1: Scope and function
Scope – which records should be processed?
- “from the last search result”: Only the records that your current search lists are processed. Narrow the selection beforehand with the search form – that is the usual way.
- “All”: all records of the content area.
The form shows the number of affected records in each case.
Step 2: The form of the chosen function
Edit
The form looks like the input form of the area, but with a check box in front of each field. Tick the fields that should be changed and enter the new values. Only ticked fields are written. As soon as you enter something in a field, camindo CMS ticks it automatically.
- Clearing a field: tick the field and leave it empty.
- Multilingual fields: each language has its own check box. Only the ticked languages are changed – so you can clear or replace only the English titles and leave the German ones untouched.
- Relations: the relations selected here replace the existing relations of the field in every record.
- Files: a file uploaded here is applied to every record. If an upload field is ticked but empty, the file is removed from every record.
- Parent record: the records are placed under the selected record – as its last child records, in their current order.
- Position: select the preceding record. The records are placed after it in their current order; “(at the start)” places them at the beginning. The list shows the records under the selected parent record – in areas with a tree structure the records therefore also end up under this parent record. If the preceding record itself is part of the scope, it stays where it is.
Current order means the order in the tree structure or the manual sorting, not the sorting of the list. Child records that are not part of the scope themselves move along with their parent record. A record cannot be placed under itself or one of its child records – it then appears as failed in the result.
Fields whose value must be unique are not offered – the same value in many records could never be unique – nor are fields whose value is calculated automatically: full-text fields and thumbnails. Also 1:1 relation fields (“embedded content”) are not offered here.
Move
Select the target area and assign the fields – as when moving a single record. Records that fail the input validation of the target area stay where they are and are listed in the result.
Delete
After a confirmation prompt, all records in the scope are deleted – as with single deletion, first into the trash. There, each record appears individually and can be restored one by one.
Options
| Option | Effect |
|---|---|
| “Simulation” | Check only: each record goes through the input validation, but nothing is changed. This shows in advance which records would fail – for example because of a required field |
| “Run as background process” | You continue working straight away; the result arrives as an internal message in your inbox. From 200 records (default setting) batch processing always runs in the background – the option cannot be unticked then |
The result
Each record is checked and saved exactly as if you had edited it by hand: with input validation, edit lock and all automatic steps. The result states how many records were processed and lists every failed record with the reason – for example “Locked: being edited by … since …” or a message from the input validation. You then edit these records individually or start batch processing again.
Bulk change via CSV export and re-import
For changes where each record receives a different value – for example new prices for a hundred products – the CSV export with re-import is the right tool.
8 Export and import
Export and import take content out of camindo CMS and bring it back in. This lets you edit, translate and back up large amounts of data outside the CMS, and transfer them between areas or installations.
You reach both functions from the record list via the menu → “Export” or “Import”.
The three formats
| Format | Purpose | Required group permissions |
|---|---|---|
| CSV | Tables for Excel & Co.: edit content, analyze it, take it over from other systems | additional permission “CSV export” or “CSV import” |
| DOCX | Word file for translators | additional permission “DOCX export (translation)” or “DOCX import (translation)” |
| XML | complete backup of an area with all fields, languages and files | superusers only |
Exporting
At the top of the export form, you choose the scope – as with batch processing, either the last search result or all records of the area. Below that, you choose the format and settings. “Export” starts the export.
The result is always a zip file. It contains the export file and, if requested, the uploaded files of
the records in the folder media. The download link is valid for one download only: the zip file is
deleted from the server once downloaded, and at the latest after 24 hours.
Large exports (from 1000 records) run in the background. The download link then arrives as an internal message.
CSV
One row per record, one column per field.
| Setting | Meaning |
|---|---|
| “First row contains field names” | header row with the field names – keep it for the re-import |
| “Write UTF-8 BOM (Excel)” | makes sure Excel recognizes umlauts and special characters correctly |
| “Separator”, “Enclosure”, “Line break” | default ;, " and Windows line break – suitable for Excel in German-speaking regions |
| “Languages” | for multilingual websites: which language versions are exported. Multilingual fields get one column per language, such as titel.de_DE and titel.en_US |
| “Fields” | which fields are exported – shown as a table with name, label and type. “all” selects all visible fields or – if all are already selected – clears them again; collapsed subfields (“More”) are not affected |
| “Include uploaded files” | uploaded files are added to the zip file. The column then contains the relative path to the file |
Via “More” next to a field, further columns are available: for relations, next to the number
(autor.record_id) also fields of the linked records (autor.name); for files, their properties such as
file name, size or dimensions. Several linked records appear in one cell, separated by |.
Columns from the “More” area cannot be re-imported. They serve for information only in the export file.
Embedded content (such as the images of a product that you edit directly in the input form of the
product) belongs to the record. Via “More”, all of its fields are available – including files and
preview images, which then also go into the zip file. Each embedded content has one value in the cell,
separated by |, in the order of the input form (bilder.titel = Front | Side). Export bilder.record_id
as well – on re-import, camindo CMS uses these values to match the existing content, in the order given.
Please note: encrypted fields appear in the CSV file in plain text. Times are in the file as they are stored (UTC).
DOCX and XML
See Translating with Word (DOCX) and Backup in XML format.
Editing content in Excel
The CSV export with a subsequent re-import is the tool of choice when many records are to receive different new values – new prices, corrected addresses, added item numbers, translated short texts.
- Narrow the selection. In the record list, find the records you want to edit.
- Export. In the export, choose the scope “from the last search result”, the format CSV and the fields
you want to edit. Make sure to keep the meta field
record_idticked – it assigns the rows to the records on re-import. - Edit. Unzip the zip file and open the CSV file in Excel. Change the values, but not the header row
and not the column
record_id. You may delete columns you do not want to change. - Save. Save in the format “CSV UTF-8 (comma delimited)”.
- Import. In the record list, choose “Import”, upload the file and select the mode UPDATE (“overwrite the fields of the import file, keep all others; skip missing records”). camindo CMS assigns the columns to the fields automatically based on the header row.
- Analyze and import. Check in the analysis what will happen, then start the import. The log shows the result for each record.
Notes:
- “Values in database format”: if the import recognizes a camindo header row, this option is preselected:
the values are read the way the export wrote them – times in UTC, currency amounts in cents. Turn it off if you
enter values the way you would type them in the input form (
19,90instead of1990). - Excel changes some values. Leading zeros (postal codes, item numbers) and long numbers are lost when Excel interprets them as numbers. Format such columns as text before editing.
- New records: rows without
record_idare created as new records by the mode UPDATE_OR_INSERT. This is how you take over data from other systems, such as an address list. - Relations: the numbers (record IDs) of the target records follow one another, separated by
|. The column is called{field}.record_id, such asautor.record_id; if no such column exists, camindo CMS also assigns a column with the bare field name (autor) to the relation field. - Each record goes through the input validation on import – invalid values are not accepted but reported in the log.
Translating with Word (DOCX)
The DOCX export prepares the content of an area for translation – a translator or translation agency needs no access to the CMS for this.
- Export. In the export, choose the tab “DOCX”, the source language (“Translate from”), the target language
(“Translate to”) and the multilingual fields to be translated. Under “Files”, decide whether “All records in one
file” or “One record per file” – for example to distribute the work among several translators. The individual files
are named after the record ID and the designation of the record (
4367-sofa-natur.docx) and are all contained in the zip file. - Translate. The Word file contains one table per record. The gray rows contain the mapping for the re-import and must not be changed. The white rows contain the text of the source language; the translator overwrites it with the translation. Fields that are already translated are marked “already translated”.
- Import. Import the translated file into the same content area – with “One record per file”, each file separately. The import overwrites only the fields of the target language; all other fields and languages remain unchanged.
Embedded content is translated along with the record: its multilingual fields appear in the field selection as “field › field of the content” and in the table below the fields of the record, numbered per content item. Fields that are not multilingual in the area of the embedded content do not appear. If a field embeds content from several areas, the area of each content item decides.
For East Asian target languages, the import can convert punctuation and spaces into their ideographic forms. Passages in Arabic or Hebrew script within a text can be marked for correct display (right to left).
Backup in XML format
The XML format (superusers only) is the backup format of camindo CMS: it contains the content area with all field settings and the records with all fields in all languages, exactly as they are stored – encrypted content stays encrypted, passwords are kept only as a check value. On request, the uploaded files are included in the zip file. Preview images and other thumbnails are not exported; they are generated anew on import.
An XML file can be imported back into the same area – for example to restore an earlier state – into a different area, or into a different camindo installation. For how to transfer whole structures with folders, areas and templates, see the manual for administrators.
Import
The import reaches its goal in several steps. Nothing is changed until the last step.
- Choose file. Upload a zip file from an export or a single XML, CSV or DOCX file. Large files can also be uploaded by FTP into the upload directory and then selected with the folder symbol to the right of the file field.
- Settings. Depending on the format: mode, assignment of the columns, number of rows to import and to skip, insert position of new records.
- Analysis. camindo CMS shows what the import would do with these settings: how many records would be added, changed, replaced or skipped. The extended analysis lists each record individually. “Back” returns to the settings.
- Import. The log lists each record in color with its result: added, changed, replaced, skipped or failed – with the reason.
The input validation of the individual fields only runs during the import. Therefore, only the log shows how many records are actually accepted.
Mode
| Mode | Effect |
|---|---|
| INSERT | Content from the file is always created as new records. |
| UPDATE | Fields given in the import file are overwritten. Fields not given remain as they are. Records that do not exist are not created. |
| UPDATE_OR_INSERT | As UPDATE, but records that do not exist are created. |
| REPLACE | All fields overwrite existing content. Fields not named in the file are emptied. Records that do not exist are not changed. |
| REPLACE_OR_INSERT | As REPLACE, but records that do not exist are created. |
When a new record is created, camindo CMS tries to use the record_id named in the file. If it is already taken, a new one is assigned. If records in the file are linked to one another, this is taken into account during the import: the relations are adjusted to the new record IDs accordingly. This works only within a single import. Later, the record has no knowledge of its former record_id.
For editing individual fields, UPDATE is almost always right. REPLACE is suitable for resetting a record completely to the state of the file.
Further options
| Option | Effect |
|---|---|
| “Insert position of new records” | In areas with a sort order or tree structure: after which record, or under which parent record, new records are inserted |
| “Force writing” | also overwrites records that someone is currently editing. Those changes are then lost |
| “Run as background process” | the log arrives as an internal message. From 200 records (default setting) the import always runs in the background – the option cannot be unticked then |
Embedded content on import
CSV and DOCX imports treat a record together with its embedded content as one unit: both are saved together. If one content item fails (for example because of a missing required field), the record is not changed either.
- CSV: the values of a cell determine the embedded content. Existing content is matched via
…record_id(without this column: via its order) and changed; additional values create new content (record_id=0); missing content is removed; the order is adopted. Files come from the zip file, preview images are generated anew. If the file names no column for a field, the content remains unchanged – in mode REPLACE it is removed. - DOCX: the translated fields of the embedded content are adopted. Nothing is created or removed.
If a text itself contains the character sequence | for several content items, or the number of values does not match, the record
is skipped with a message.
Media import
With the media import, you turn a collection of files into many records in a single step – for example from a folder of product photos. You find it in the menu above the record list as the item “Media import”. Requirements: the area has an upload field, and your user group has the permission to import media.
- Choose zip file. Upload a zip file or choose one from the upload directory of the server.
- Settings. camindo CMS shows the files contained, grouped by file type. Select the types to be imported, the upload field
that takes the file, and optionally a field that receives the file name as text (without extension). Minus signs and underscores
become spaces (
Filiale-Graz_2024.jpg→ “Filiale Graz 2024”). The first upload field and the main field of the area are preselected. - Import. Each file creates a new record. The import log lists the result for each file.
Not importable and grayed out are executable files, active content (HTML, SVG, XML, JavaScript), empty files and files whose content does not
match their extension. Hidden files (name begins with a dot) and system files such as Thumbs.db, desktop.ini or the folder __MACOSX are
ignored. Types that the chosen upload field does not accept cannot be selected.
9 Frontend editing and preview
Frontend editing
With frontend editing you edit content directly while browsing the website: edit markers appear next to the content. A click on one opens the backend with the input form of exactly this record – ideal for correcting a typo you have just spotted on the website.
You switch frontend editing on in your personal settings:
| Setting | Effect |
|---|---|
| “off” | no markers |
| “on - until sign-out or closing the browser” | markers until you sign out or close the browser |
| “on - permanently, also after sign-out” | markers also after signing out |
The setting only applies to the browser in which you made it. If your backend runs under a different
address than the websites (for example cms.example.com), saving a changed setting transfers it to all
websites: the browser visits each website briefly and then returns to the backend. Websites that cannot
be reached are skipped. Under “Frontend editing on the websites”, the button “Apply to all websites”
repeats this synchronization – for example in another browser or when the markers have disappeared. The
buttons with a domain open only that website in a new tab. A preview also switches the markers on for
its website. Visitors to the website never see the markers. Where markers appear is determined by the
template programmer. To edit, you still need a valid sign-in and the necessary rights.
Preview
The button “Preview” in the detail view shows a record the way the website displays it – with its template and in the chosen language version. Unlike the website, the preview also shows a record that is not yet published: deactivated, scheduled for later or expired. This lets you check an article before you release it.
Lists within the preview page – such as “More articles” – show only published records in the preview, exactly as on the website.
The preview is only reachable with a valid backend sign-in and is not indexed by search engines. If your backend runs under a different address than the website, the preview opens under the main address of the website – only there are the images accessible. The link then works only as long as you are signed in to the backend, and for at most eight hours.
10 Reviewing contributions from website visitors
Websites with community features let visitors create content themselves: they register, maintain their profile and write comments, reviews or classified ads. The role is not fixed – these may be forum members, customers, employees or similar. In camindo CMS they are collectively called frontend users.
Where the content of frontend users is stored
Frontend users are ordinary records in so-called profile areas.
- Profile areas (symbol ) contain one record per frontend user with email address, login name, password and further profile data.
- Contribution areas (symbol ) contain what frontend users write: comments, classified ads, pictures.
You edit, search and export these records like all others. The detail view shows which frontend user a contribution belongs to.
Reviewing content
Everything a frontend user creates or changes is marked with “Needs review” (symbol ), provided your template programmer has set this up. This way you keep track of what still needs to be checked:
- The widget “Unreviewed content of frontend users” on the start page lists all marked records (set it up in your personal settings).
- In the record list, the menu of the status column with “Unreviewed” shows only the marked records.
Once you have reviewed a contribution, switch off “Needs review” in the input form. If a contribution is not acceptable, deactivate it via the status or delete it.
Exporting personal data
If a website user wants to know what data is stored about them (Article 15 GDPR), or asks for a copy to take with them (Article 20 GDPR), create a personal data export:
- Open the profile record in the detail view and choose “Export of personal data” in the menu on the right – or open the module “Privacy” → “Data export”, search for the profile with and tick it in the list. A profile that is already in the trash can be selected from the list “or a profile in the trash” below.
- Check the person. If the instance has templates in several languages, choose the language of the report. If no template exists, no report can be created yet – contact your administrator.
- Read the warning: the report may only be created by an authorized person (usually the data protection officer), and the user learns of it in every later report. Tick “I am authorized to create the personal data report.” and click “Create personal data report”.
- Download the zip file with “Download zip file” – the link works exactly once and for at most one day.
The zip file contains report.html (readable, for printing or sending), data.json (the same data in
machine-readable form) and the folder files/ with the uploaded files. It includes all fields of the
profile, the contributions of the user by area, permanently deleted contributions that the change log still
knows, records that refer to their profile (such as orders), devices and sessions with their retention
period, failed sign-in attempts, the change log, the retention periods and what happens when the profile is
deleted. Names of other persons appear in it only as “Admin” or “User”.
Good to know:
- The export is a partial extract. Complete it before handing it over – for example with the legal bases, server log files and data from other systems (accounting, email). If in doubt, ask your data protection officer.
- The report is created in the language of the chosen template – regardless of your backend language. So choose the user’s language if there is a template for it.
- The zip file contains personal data. Pass it on only by a secure route – not as a simple email attachment to an address whose owner you have not verified.
- Reply within one month. Every export is recorded in the audit log.
- You only see this menu item with access to the module “Privacy” and the permission “Export personal data”. If you lack it, contact your administrator.
Deleting a profile
As with every record, the deletion policy of the profile area determines what happens when a profile is deleted; the confirmation prompt shows this beforehand – including what happens to the contributions of the user. With the standard policy, the profile and contributions go to the trash and are permanently deleted after 7 days; known devices and sessions of the user are removed immediately. If the user requests immediate deletion, an administrator with the matching permission can empty their trash straight away.
Registration and status
After registration, a profile initially has the status “Unconfirmed”, until the frontend user clicks the link in their confirmation email. Only then can they sign in. You can also activate or lock a profile by hand via its status.
As of camindo CMS 9.1.3