Hello, I got a TV “Date” with different dates in more than 100 different pages.
I need to change all of them to one specific date, the Batch extra is not doing TV’s how can I do that?.
Thank you very much!
Hello, I got a TV “Date” with different dates in more than 100 different pages.
I need to change all of them to one specific date, the Batch extra is not doing TV’s how can I do that?.
Thank you very much!
If you can wait, I have a blog post that should be published in a week or two at Bob’s Guides that has more detail. It’s a utility snippet that empties all TVs under a certain parent.
For now, here’s the code for the snippet, slightly modified for your use case:
$tvId = 12; // This is the TV that will be emptied
$parents = '12,33,56'; // children of these parents will have the TV emptied
$parents = explode(',', $parents);
$count = 0;
foreach ($parents as $parentId) {
/* Get the children */
$docs = $modx->getCollection('modResource', array('parent' => $parentId));
foreach ($docs as $doc) {
/* Get the modTemplateVarResources */
$docId = $doc->get('id');
$criteria = array(
'contentid' => $docId,
'tmplvarid' => $tvId,
);
$tvr = $modx->getObject('modTemplateVarResource', $criteria);
/* Blank the value of the TV */
if ($tvr) {
$count++;
$tvr->set('value', ''); // put your new date between the single quotes.
$tvr->save();
}
}
}
return "Finished -- corrected " . $count . ' TVs';
Be sure to set the $tvId
and $parents
variables correctly.
The $parents variable can be set to a single parent if that works for you.
Create a snippet called FixTVs with the code above.
Put this tag as the content of a new resource and view the resource.
[[FixTVs]]
Note: TVs with no value set will not be changed.
Bob I’m getitng this: Finished – corrected 0 TVs
I put my data into the code:
…
$tvId = 55; // This is the TV that will be emptied
$parents = ‘22,325,29,326,41’; // children of these parents will have the TV emptied
…
$count++;
$tvr->set(‘value’, ‘2020-06-30’); // put your new date between the single quotes.
$tvr->save();
…
The TV ID is right and all this parents: ‘22,325,29,326,41’ contain children with the TV 55…
what might be wrong?
thanks Bob.
I can’t see anything wrong. Could the Resource’s TVs have been set to the default value for that TV?
This is from Sean Kimball
<?php
$docID = $modx->resource->get('id'); //get the page id
$tvId = 9; //the tv id I want to change
$tv = $modx->getObject('modTemplateVar',$tvId); // get the obj.
$tv->setValue($docID, $tv->getValue($docID) + 1 ); // set it's new value
$tv->save(); // save the new value
Well it’s working Bob.
there was a tiny misspelling in the code:
$parents as $parentId replace with $parents as $parent
because is being called like: ‘parent’ => $parent
see the error:
foreach ($parents as $parentId) {
/* Get the children */
$docs = $modx->getCollection('modResource', array('parent' => $parent));
and here is the working code:
$tvId = 12; // This is the TV that will be emptied
$parents = '12,33,56'; // children of these parents will have the TV emptied
$parents = explode(',', $parents);
$count = 0;
foreach ($parents as $parent) {
/* Get the children */
$docs = $modx->getCollection('modResource', array('parent' => $parent));
foreach ($docs as $doc) {
/* Get the modTemplateVarResources */
$docId = $doc->get('id');
$criteria = array(
'contentid' => $docId,
'tmplvarid' => $tvId,
);
$tvr = $modx->getObject('modTemplateVarResource', $criteria);
/* Blank the value of the TV */
if ($tvr) {
$count++;
$tvr->set('value', ''); // put your new date between the single quotes.
$tvr->save();
}
}
}
return "Finished -- corrected " . $count . ' TVs';
Thanks Bob, really appreciate your help!
Sorry about that.
I’m glad you got it working.
This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.