nikola Posted March 17, 2013 Posted March 17, 2013 I currently have a page reference field (multiple pages select through AsmSelect) for selecting categories that are created under page "Settings". I want to transfer these references (selected categories) to another page reference field that will have exact page reference names. For example: Article has selected categories: Category1, Category5, Category7; these are stored as children under page "Settings" New reference field would have exact categories but they are stored under main categories as children. I'm using custom selector to find these categories (template=subcategory|advices, sort=name). Is there a way to transfer these references through the API? All have the same name.
ryan Posted March 18, 2013 Posted March 18, 2013 I'm not sure that I totally understand the entirety of what you are doing, but it is relatively simple to copy page references from one page to another: $page1 = $pages->get('/some/page/'); // page we want to copy from $page2 = $pages->get('/some/other/page/'); // page we want to copy to // optional: remove any existing categories if there are any $page2->categories->removeAll(); foreach($page1->categories as $category) { $page2->add($category); } $page2->save();
nikola Posted March 18, 2013 Author Posted March 18, 2013 Thanks Ryan for your answer. I'll try to clarify what I would like to do: I have around 400 articles located under Articles page (articles holder page). All these articles have multiple page reference field called "categories" that pull references (pages) from structure below: Tools - Category1 - Category 2 - Category 3 - and so on I've made another multiple page reference field called "subcategory" and added it to same "article" template so now I have two page reference fields in this template. Simply, I want to transfer all page references from "categories" to "subcategory". The catch is: Although they all have same names (page references), "subcategory" page reference field has different tree structure from where I'm pulling them: They are located like this: Category 1 - Subcategory 1 - Subcategory 2 - Subcategory 3 - and so on Category 2 - Subcategory 1 - Subcategory 2 - Subcategory 3 - Advices - and so on Category 3 - Subcategory 1 - Subcategory 2 - Subcategory 3 - Advices - and so on I'm using custom selector for "subcategory" page reference field to find those subcategories (they can have 2 different templates): template=subcategory|advices, sort=name After that I can simply discard "categories" page reference field because of no need anymore... I think it's a bit tricky because of different tree setups for these two reference fields.
Soma Posted March 18, 2013 Posted March 18, 2013 Hmm. $arts = $pages->find("template=article"); $arts->setOutputFormatting(false); foreach($arts as $art){ foreach($art->categories as $cat){ // loop current categories // find subcategory with same name $subcat = $pages->find("has_parent=/path/to/subcategories/, template=subcategory|advices, name=$cat->name")->first(); if(!$subcat->id) { echo "<p>subcategory not found $cat->name</p>"; } else { // add it to subcategories page field $art->subcategories->add($subcat); // save field $art->save("subcategories"); } } } Something like this would do. 2
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