Откуда в берутся типа контента?

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
i3bepb
Forum Members
Forum Members
Posts: 15
Joined: Thu Nov 25, 2010 6:51 am

Откуда в берутся типа контента?

Post by i3bepb »

После того как, я установил модуль Cataloger в разделе контент появились новые типы контента. Страница каталога, Страница элемента. Если в БД посмотреть, то в таблице content у этих записей есть в поле type, записано catalogcategory, catalogitem соответственно. Откуда он берет эти типы?
Hippy-core
Forum Members
Forum Members
Posts: 76
Joined: Sat Dec 06, 2008 3:05 pm

Re: Откуда в берутся типа контента?

Post by Hippy-core »

посмотри внимательней: там еще поле content_props есть
i3bepb
Forum Members
Forum Members
Posts: 15
Joined: Thu Nov 25, 2010 6:51 am

Re: Откуда в берутся типа контента?

Post by i3bepb »

Code: Select all

CREATE TABLE `prefix_content` (
  `content_id` int(11) NOT NULL, /* по этому полю происходит связь этой таблицы с таблицей prefix_content_props*/
  `type` varchar(25) default NULL, /* вот откуда он берет запись в это поле*/
  ...
  `prop_names` text, /* в этом поле перечисление полей в таблице prefix_content_props*/
  ...
  PRIMARY KEY (`content_id`),
);

Code: Select all

CREATE TABLE `prefix_content_props` (
  `content_id` int(11) default NULL, /* по этому полю происходит связь этой таблице с таблицей prefix_content */
  `type` varchar(25) default NULL,
  `prop_name` varchar(255) default NULL,
  `param1` varchar(255) default NULL,
  `param2` varchar(255) default NULL,
  `param3` varchar(255) default NULL,
  `content` text,
  `create_date` datetime default NULL,
  `modified_date` datetime default NULL,
  KEY `index_content_props_by_content_id` (`content_id`)
);
В моем случае для записи:

Code: Select all

INSERT INTO `cms_content`(content_id, type, ..., prop_names, ...) VALUES (327, 'catalogitem', ..., 'target,image,thumbnail,extra1,extra2,extra3,Item Notes,Weight,Medium/Media,Dimensions,Price,In Stock?,sub_template' ...);
Есть следующие записи:

Code: Select all

INSERT INTO `cms_content_props` VALUES (327, 'string', 'target', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'image', '', '', '', '-1', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'thumbnail', '', '', '', '-1', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'extra1', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'extra2', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'extra3', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'Item Notes', '', '', '', 'tesst', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'Weight', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'Medium/Media', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'Dimensions', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'Price', '', '', '', '111', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'In Stock?', '', '', '', '', NULL, '2010-11-25 11:18:50');
INSERT INTO `cms_content_props` VALUES (327, 'string', 'sub_template', '', '', '', '6', NULL, '2010-11-25 11:18:50');
При этом у данной записи из prefix_content есть изображение, во-вторых у нее в type записано catalogitem, откуда берутся эти данные?

Можно предположить, что это определяется где-то в коде php, но тогда получается, что типы контента строго прописаны в где-то в коде. Тогда может кто-нибудь подскажет алгоритм работы добавления новых типов контента?
i3bepb
Forum Members
Forum Members
Posts: 15
Joined: Thu Nov 25, 2010 6:51 am

Re: Откуда в берутся типа контента?

Post by i3bepb »

Посмотрел файл установки модуля method.install.php.

При установки модуля выполняется только он?

Code: Select all

if(!isset($gCms)) exit;
$db = &$gCms->GetDb();
$dict = NewDataDictionary($db);

/* Ниже следуют команды по созданию таблиц и наполнению их начальными данными */

$flds = ' id I KEY, type_id I, title C(255), template X ';
$taboptarray = array('mysql' => 'TYPE=MyISAM');
$sqlarray = $dict->CreateTableSQL(cms_db_prefix() . 'module_catalog_template', $flds, $taboptarray);
$dict->ExecuteSQLArray($sqlarray);
$db->CreateSequence(cms_db_prefix() . 'module_catalog_template_seq'); // Таблица для записи порядка следования module_catalog_template

$flds = ' type_id I KEY, name C(25) ';
$sqlarray = $dict->CreateTableSQL(cms_db_prefix() . 'module_catalog_template_type',	$flds, $taboptarray);
$dict->ExecuteSQLArray($sqlarray);
$query = 'INSERT INTO ' . cms_db_prefix() . 'module_catalog_template_type VALUES (?,?)';
$dbresult = $db->Execute($query,array(CTEMPLATE_ITEM, $this->Lang('item_page')));
$dbresult = $db->Execute($query,array(CTEMPLATE_CATEGORY, $this->Lang('category_page')));
$dbresult = $db->Execute($query,array(CTEMPLATE_CATALOG, $this->Lang('catalog_printable')));
$dbresult = $db->Execute($query,array(CTEMPLATE_COMPARISON, $this->Lang('item_comparison')));
$dbresult = $db->Execute($query,array(CTEMPLATE_FEATURE, $this->Lang('catalog_short_list')));

$flds = ' id I KEY, type_id I, is_textarea I, attribute C(255), order_by I, alias C(60), length I, defaultval X	';
$sqlarray = $dict->CreateTableSQL(cms_db_prefix() . 'module_catalog_attr', $flds, $taboptarray);
$dict->ExecuteSQLArray($sqlarray);
$db->CreateSequence(cms_db_prefix() . 'module_catalog_attr_seq');

$query = 'INSERT INTO ' . cms_db_prefix() . 'module_catalog_attr (id,type_id,is_textarea,attribute) VALUES (?,?,?,?)';
    $new_id = $db->GenID(cms_db_prefix() . 'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 1, 'Item Notes'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 2, 1, 'Category Notes'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 3, 1, 'Catalog Notes'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 0, 'Weight'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 0, 'Medium/Media'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 0, 'Dimensions'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 0, 'Price'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 1, 0, 'In Stock?'));
    $new_id = $db->GenID(cms_db_prefix().'module_catalog_attr_seq');
$dbresult = $db->Execute($query,array($new_id, 3, 0, 'Copyright'));

/* Ниже создаются папки под файлы */

$catalogdirs = array('/images/catalog','/images/catalog_src','/catalogerfiles');
foreach($catalogdirs as $thisDir) {
	$fileDir = dirname($gCms->config['uploads_path'] . $thisDir . '/index.html');
	if(!is_dir($fileDir)) {
  	mkdir($fileDir);
  }
	touch($fileDir.'/index.html');
}

/**/

$this->importSampleTemplates();           
$this->AddEventHandler('Core', 'ContentEditPost', false);
$this->SetPreference('item_image_count', 2); // Тут кстати указывается кол-во изображении
$this->CreatePermission('Modify Catalog Settings', 'Modify Catalog Settings');

// put mention into the admin log
$this->Audit(0, $this->Lang('friendlyname'), $this->Lang('installed',$this->GetVersion()));
		
P.S. Пока покаюсь дальше...
P.S. Пытался разместить код с подсветкой т.е. вот так [сode][/сode], но тогда комментарии которые на русском конвертируются в другую кодировку
Sonya

Re: Откуда в берутся типа контента?

Post by Sonya »

Вот здесь начинайте копать http://www.cmsmadesimple.org/apidoc/CMS ... ntentTypes

Ничего в базе нет, создавайте свой класс "that extends ContentBase" и он будет добавляться в список.
i3bepb
Forum Members
Forum Members
Posts: 15
Joined: Thu Nov 25, 2010 6:51 am

Re: Откуда в берутся типа контента?

Post by i3bepb »

Sonya
Спасибо, завтра начну копать.
Включил debug, там выдает что 60 SQL запросов, разве это нормально?
Sonya

Re: Откуда в берутся типа контента?

Post by Sonya »

i3bepb wrote: Включил debug, там выдает что 60 SQL запросов, разве это нормально?
Для Cataloger, к сожалению, да. Он забирает каждый элемент каталога и каждое дополнительное поле элемента отдельным запросом, насколько я помню.
Post Reply

Return to “Russian - русский”