peterb Posted April 5, 2011 Share Posted April 5, 2011 here is a snippet that helped me convert a text field to a page field... page fields are the only way currently to have select boxes in the admin. — I had a text field called client_status on a "client" page template that contained one of 2 values, "good" or "expired" — created a page in admin named "status". — then create 2 pages as children of the status page... there titles were "good" "expired" — next, create a new page field called "client_status_select" and added to the "client" page template — then make a page template called "update-clients". with the code below. — lastly, create a page with the "update-clients" template & view it to run the script $clients = $pages->find("template=client"); foreach($clients as $c) { echo "<li>{$c->url}---{$c->client_status}---{$c->client_status_select}</li>"; $selectpage = $pages->get("template=admin, title=$c->client_status"); echo "<li>{$selectpage->id}---{$selectpage->title}</li>"; $c->setOutputFormatting(false); $c->client_status_select = $selectpage->id; $c->save(); Link to comment Share on other sites More sharing options...
peterb Posted April 5, 2011 Author Share Posted April 5, 2011 I am doing this now, with 5,000 pages & hitting memory limits? $reports = $pages->find("template=report"); foreach($reports as $r) { $r->setOutputFormatting(false); $r->report_status_select = "12576"; wire('pages')->uncacheAll(); $r->save(); Link to comment Share on other sites More sharing options...
ryan Posted April 5, 2011 Share Posted April 5, 2011 Peter, looks good but not sure your uncacheAll() is doing anything here since the pages are already cached in $reports (PHP's garbage collector isn't going to unset them as long as there is a reference to them). But if you are running up against a memory limit, try placing a limit on the $reports: <?php $start = 0; $limit = 500; do { $reports = $pages->find("template=report, start=$start, limit=$limit"); if(!count($reports)) break; foreach($reports as $r) { $r->setOutputFormatting(false); $r->report_status_select = "123456"; $r->save(); } unset($reports); $pages->uncacheAll(); $start += ($limit-1); } while(1); Written in the browser, so code may not be perfect. Let me know if you still run up against any memory limits. Also in your earlier example: $c->client_status_select = $selectpage->id; You can also do just this: $c->client_status_select = $selectpage; Link to comment Share on other sites More sharing options...
peterb Posted April 5, 2011 Author Share Posted April 5, 2011 thanks, that did it, pb Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now