/** * Parse values of resource fields and TVs. Set resource fields and return TVs. * @param modResource $resource * @param $file * @param array $elements * @return array */ public function parseElements(modResource &$resource, $file, $elements = array()) { if (empty($elements)) { return false; } $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; $doc->loadHTML($file); $xpath = new DOMXPath($doc); $body = $doc->documentElement; $tvs = array(); foreach ($elements as $field => $selector) { if ($resource->getField($field, true)) { $fieldValue = $this->getFieldValue($selector, $body, $xpath); if ($fieldValue !== false) { $resource->set($field, $fieldValue); } } else { $tv = $this->modx->getObject('modTemplateVar', array('name' => $field)); if ($tv) { $tvs[$field] = $this->getFieldValue($selector, $body, $xpath); } } } return $tvs; }