Content How To
This page lists how to perform some common tasks when dealing with Sitecore content using Revolver.
- Replace spaces in item names with dashes
- Update all internal links
- Copy content from one language to another
Replace spaces in item names with dashes
To perform this task we'll use the find
command to locate items with spaces, then we'll use sa
to set the new name while manipulating the previous name using the replace
command.
Start by finding the items we're looking for. Use cd
to navigate to the root of the item where we'll be working. Now formulate the find command using an attribute filter. If you want to operate recursively don't forget to use the -r
parameter.
find -a name \s pwd
Now let's work out the replace
command. We want to pass it the current name, search for spaces and replace them with dashes.
replace > (ga -a name) \s -
Now, we combine these commands. We aren't using the sa
command yet, so no updates will be made. We'll instead see the effect of the replacements in a simulated run.
find -a name \s (replace < (ga -a name) \s -)
If all is looking good we can go ahead and put the sa
command in to make the updates.
find -a name \s (sa name < (replace < (ga -a name) \s -))
Update all internal links
This is another locate, modify, store example. In this case we're looking for URLs in content fields that need to be updated to fit a new URL structure. In this example we'll be changing links of the structure /au/content.aspx
to /au/en/content.aspx
.
The first thing we need to do is work out how to locate the content we need to update. We'll use the trusty find
command here to locate items which need to be updated. Start by navigating to the root of the content where we wish to start making updates. We'll assume the URLs are limited to the "text" field, so we'll use a field filter with the find command.
find -r -f text /au/ pwd
The above command will search all descendants for items with a text field that contain anything with a /au/
in it. As usual we don't want to start modifying items until we're sure our RegExs are working, so we use pwd
to list the matched items.
Next we need to work out how we want to modify the matched item. We can use the replace
command combined with the gf
command. To test this part of the command, navigate to one of the items matched in the previous command.
replace < (gf -f text) /au/ /au/en/
If we already had a /au/en
link in the field we were testing against the effect of the above command would be to replace the /au/
still and we'd end up with a duplicate en
such as /au/en/en
. To prevent this we need to tweak our RegExs to exclude the match if it is followed by en
.
replace < (gf -f text) /au/\(?!en\) /au/en/
We can now put the replace command into the find command. This is our dry run. Executing this command will show the updates that will be made.
find -r -f text /au/\(?!en\) (replace < (gf -f text) /au/\(?!en\) /au/en/)
The only thing left to do is to alter the command to update the existin fields using the sf
command.
find -r -f text /au/\(?!en\) (sf text < (replace < (gf -f text) /au/\(?!en\) /au/en/))
If you have multiple combinations of URLs that need updating (or need to execute again in the future), create a script to execute this for you. The path parts can be passed in as parameters.
find -r -f text /$1$/\(?!$2$\) (sf text < (replace < (gf -f text) /$1$/\(?!$2$\) /$1$/$2$))
So if we store the above in a script called "fixlinks", then execution would be as simple as:
fixlinks au en
Copy content from one language to another
The Copy Item To Language
command (cpl
) can be used to copy content from the current context language to another language.
Before using this command you'll need to make sure you know which language you're currently working in. You can display the current context language by using the Print Current Language
command (pwl
).
pwl
But for an easier way to quickly check the current context language make sure it's part of your command prompt. The %lang%
token when used in the prompt
environment variable is replaced by the current context language. The following will set the command prompt to display the context database, context language and context path.
set prompt (%db%:%lang%:%path% >)
Now we've ensured we're in the correct language the Copy Item To Language
command (cpl
) can be used to copy all field data from the current context language to another language. The following command will copy the current language field data to the Danish language.
cpl da
By default cpl
will only copy field data over to the target language field if the target field is empty. This helps to prevent accidental overwriting of field data. This is not always desirable though, so you can force cpl
to overwrite all target fields regardless of whether they have existing data or not, by passing the -o
parameter.
cpl -o da
By default cpl
will copy all fields from the source language to the target language. If you only want to copy a single field, use the -f
parameter and specify the field name.
cpl -f title da
And of course you can use the cpl
command with the find
or query
commands to copy the content from the context language to a target language on multiple items at once. To copy all content from the current language to the Danish language for all items under the /sitecore/content/home
item use the following:
cd /sitecore/content/home
find -r (cpl da)