$meta->set('meta_value_title', $value); $meta->save(); } elseif($tag == 'authorid'){ // This field is ignored, it's handled in the author case. continue; } elseif($tag == 'keywords'){ // This field is actually an array of entries, separated by a comma. $values = array_map('trim', explode(',', $value)); foreach($values as $tag){ if(!$tag) continue; $machinevalue = \Core\str_to_url($tag); $meta = new PageMetaModel($page['site'], $page['baseurl'], 'keyword', $machinevalue); $meta->set('meta_value_title', $tag); $meta->save(); } } else{ // Everything else... if(!$value) continue; $meta = new PageMetaModel($page['site'], $page['baseurl'], strtolower($tag), ''); // These don't have values set, just the value title, (which is the human readable version). $meta->set('meta_value_title', $value); $meta->save(); } } }
public function testAdmin(){ // Basic Construct should return one result. /** @var PageModel $page */ $page = PageModel::Construct('/admin'); $this->assertInstanceOf('Model', $page); $this->assertInstanceOf('PageModel', $page); if(!$page->exists()){ $this->markTestSkipped('/admin page does not exist, Core must not be installed.'); return; } // Test that getAsArray works as expected. $asArray = $page->getAsArray(); $this->assertInternalType('array', $asArray); $this->assertGreaterThan(0, sizeof($asArray)); // And JSON $asJSON = $page->getAsJSON(); $this->assertInternalType('string', $asJSON); $this->assertGreaterThan(0, strlen($asJSON)); $this->assertInternalType('array', json_decode($asJSON, true)); $this->assertArrayHasKey('title', $asArray); $this->assertArrayHasKey('title', $page); $this->assertEquals($asArray['title'], $page->get('title')); $this->assertArrayHasKey('expires', $asArray); $this->assertArrayHasKey('expires', $page); $this->assertEquals($asArray['expires'], $page->get('expires')); // Test that getLink behaves as expected. $this->assertNull($page->getLink('nonexistent')); // Pages also have the following linked records, // insertables, pagemetas, and rewrites. $this->assertInternalType('array', $page->getLink('Insertable')); $this->assertInternalType('array', $page->getLink('PageMeta')); $this->assertInternalType('array', $page->getLink('RewriteMap')); // Ensure that creating meta files works $meta_name = 'phpunit-test'; $meta_val = 'This is a test meta field from phpunit'; $page->setMeta($meta_name, $meta_val); // Saving the page should also save this new meta. $this->assertTrue($page->save()); // Verify this meta from a separate object // (because Construct will use the cached copy) $page2 = new PageModel('/admin'); $this->assertTrue($page2->exists()); $this->assertEquals($meta_val, $page2->getMetaValue($meta_name)); // Remove the field from the original object now. $page->setMeta($meta_name, null); // Test that removing it does not remove the object's data until the parent is saved though! $meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, ''); $this->assertTrue($meta->exists()); $this->assertTrue($page->save()); $meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, ''); $this->assertFalse($meta->exists()); }