예제 #1
0
 /**
  * Loads a list of entries for the specicifies parameters, returns an array of Search_Backend_Data
  *
  * @return array
  */
 public function load()
 {
     $entries = array();
     $data = $this->db->fetchAll("SELECT * FROM search_backend_data" . $this->getCondition() . $this->getGroupBy() . $this->getOrder() . $this->getOffsetLimit(), $this->model->getConditionVariables());
     foreach ($data as $entryData) {
         if ($entryData['maintype'] == 'document') {
             $element = Document::getById($entryData['id']);
         } else {
             if ($entryData['maintype'] == 'asset') {
                 $element = Asset::getById($entryData['id']);
             } else {
                 if ($entryData['maintype'] == 'object') {
                     $element = Object_Abstract::getById($entryData['id']);
                 } else {
                     Logger::err("unknown maintype ");
                 }
             }
         }
         if ($element) {
             $entry = new Search_Backend_Data();
             $entry->setId(new Search_Backend_Data_Id($element));
             $entry->setFullPath($entryData['fullpath']);
             $entry->setType($entryData['type']);
             $entry->setSubtype($entryData['subtype']);
             $entry->setUserOwner($entryData['userowner']);
             $entry->setUserModification($entryData['usermodification']);
             $entry->setCreationDate($entryData['creationdate']);
             $entry->setModificationDate($entryData['modificationdate']);
             $entry->setPublished($entryData['published'] === 0 ? false : true);
             $entries[] = $entry;
         }
     }
     $this->model->setEntries($entries);
     return $entries;
 }
예제 #2
0
파일: Module.php 프로젝트: ngocanh/pimcore
 protected function postUpdateElement(Element_Interface $element)
 {
     $searchEntry = Search_Backend_Data::getForElement($element);
     if ($searchEntry instanceof Search_Backend_Data and $searchEntry->getId() instanceof Search_Backend_Data_Id) {
         $searchEntry->setDataFromElement($element);
         $searchEntry->save();
     } else {
         $this->postAddElement($element);
     }
 }
예제 #3
0
파일: Data.php 프로젝트: nblackman/pimcore
 /**
  * @param  Element_Interface $element
  * @return Search_Backend_Data
  */
 public static function getForElement($element)
 {
     $data = new Search_Backend_Data();
     $data->getResource()->getForElement($element);
     return $data;
 }
// clear all data
$db = Pimcore_Resource::get();
$db->query("TRUNCATE `search_backend_data`;");
$elementsPerLoop = 100;
$types = array("asset", "document", "object");
foreach ($types as $type) {
    $listClassName = ucfirst($type) . "_List";
    $list = new $listClassName();
    $elementsTotal = $list->getTotalCount();
    for ($i = 0; $i < ceil($elementsTotal / $elementsPerLoop); $i++) {
        $list->setLimit($elementsPerLoop);
        $list->setOffset($i * $elementsPerLoop);
        echo "Processing " . $type . ": " . ($list->getOffset() + $elementsPerLoop) . "/" . $elementsTotal . "\n";
        $elements = $list->load();
        foreach ($elements as $element) {
            try {
                $searchEntry = Search_Backend_Data::getForElement($element);
                if ($searchEntry instanceof Search_Backend_Data and $searchEntry->getId() instanceof Search_Backend_Data_Id) {
                    $searchEntry->setDataFromElement($element);
                } else {
                    $searchEntry = new Search_Backend_Data($element);
                }
                $searchEntry->save();
            } catch (Exception $e) {
                Logger::err($e);
            }
        }
        Pimcore::collectGarbage();
    }
}
$db->query("OPTIMIZE TABLE search_backend_data;");