2012-01-05 3 views
0

사용자 지정 데이터베이스 테이블을 만드는 사용자 지정 모듈을 만들었습니다. 나는 맞춤형 데이터베이스 테이블을 만들기 위해 Alan Storm의 자습서 http://alanstorm.com/magento_setup_resourceshttp://alanstorm.com/magento_models_orm을 따라 왔습니다.Magento에서 사용자 지정 데이터베이스 테이블을 찾을 수 없습니다.

내 모듈 항목이 core_resource 테이블에 나타나지만 실제 코드가 표시되지 않습니다.

이 내 config.xml의 코드

<?xml version="1.0"?> 
<config> 
<modules> 
    <Ajzele_SimpleModel> 
     <version>0.0.1</version> 
    </Ajzele_SimpleModel> 
</modules> 
<global> 

    <models> 
    <simplemodel> 
    <class>Ajzele_SimpleModel_Model</class> 
    <resourceModel>simplemodel_mysql4</resourceModel>  
    </simplemodel> 

    <simplemodel_mysql4> 
    <class>Ajzele_SimpleModel_Model_Mysql4</class> 
     <entities> 
      <simplemodel> 
        <table>simplemodel</table> 
      </simplemodel> 
     </entities>     
    </simplemodel_mysql4> 

</models> 

<resources> 
     <simplemodel_setup> 
      <setup> 
       <module>Ajzele_SimpleModel</module> 
     <class>Ajzele_SimpleModel_Model_Mysql4_Setup</class> 
      </setup> 

      <connection> 
       <use>core_setup</use> 
      </connection> 

     </simplemodel_setup> 

     <simplemodel_read> 
      <connection> 
       <use>core_read</use> 
      </connection> 
     </simplemodel_read> 

     <simplemodel_write> 
      <connection> 
       <use>core_write</use> 
      </connection> 
     </simplemodel_write> 

</resources>   
</global>  
    </config> 

입니다 그리고 내 모델 파일 구조는 다음

Model 
    SimpleModel.php 
    Mysql4 
     SimpleModel.php 
     Setup.php 
     SimpleModel 
      Collection.php 

내 SQL/simplemodel_setup /의 TEH 내용 mysql4가 설치-0.0.1.php의

 <?php 

    $installer = $this; 

    $installer->startSetup(); 

    $baseTableName = 'simplemodel'; 

    $sql = " 
    SET FOREIGN_KEY_CHECKS=0; 
    -- ---------------------------- 
    -- Table structure for `simplemodel` 
    -- ---------------------------- 
    DROP TABLE IF EXISTS {$this->getTable($baseTableName)}; 
    CREATE TABLE {$this->getTable($baseTableName)} (
    `simplemodel_id` int(11) NOT NULL AUTO_INCREMENT, 
    `field1` varchar(255) DEFAULT NULL, 
    `field2` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`simplemodel_id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    "; 

    $installer->run($sql); 

    $installer->endSetup(); 

다양한 디버깅 방법을 시도했지만 예외 나 오류가 발생하지 않았습니다. 내 테이블을 실제로 데이터베이스에 표시하려면 어떻게해야합니까?

+0

여기에는 정보가 충분하지 않습니다. 우리는 적어도'sql /'폴더의 내용을 필요로 할 것입니다. – Nick

+0

질문을 편집했습니다. 좀 도와 주시면 알려주세요. – ivn

+0

'core_resource' 테이블에서 엔트리를 삭제하고 설치 스크립트를 다시 실행하십시오. – clockworkgeek

답변

2

Magento를 개발자 모드로 설정하고 XML 추적을 디버그하여 XML을 확인하는 것이 좋습니다. 개발자 모드에서 Magento를 구성하려면 MAGE_IS_DEVELOPER_MODE 변수를 가상 호스트의 정의 또는 Magento 루트의 .htaccess에 넣어야합니다. 드 가상 호스트의 예를 들어 :

<VirtualHost *:80> 
    DocumentRoot "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com" 
    ServerName local.pruebas.com 
    DirectoryIndex index.html index.php index.htm 
    SetEnv MAGE_IS_DEVELOPER_MODE "1"  
    <Directory "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com"> 
     AllowOverride All 
     Options All 
     Order allow,deny 
     Allow from all 
    </Directory> 

나중에는 라인 (66)에 index.php를 수정해야하고 Varien_Profiler이 :: 수

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) { 
Varien_Profiler::enable(); 
    Mage::setIsDeveloperMode(true); 
    ini_set('display_errors', 1); 
} 

()를 넣어; 및 ini_set ('display_errors', 1); 나는 실수로 생각하는 조건을 벗어났습니다.

경고 : simplexml_load_string() [function.simplexml 부하 문자열] : 법인 : 라인 4 : 파서 ​​오류 : 오류 분석 이제, 당신은 XML에 오류가있는 simplexml_load_string() 오류 whent를 참조 할수 없어 C : \ Program Files \ Zend \ Apache2 \ htdocs \ local.pruebas.com \ lib \ Varien \ Simplexml \ Config.php의 라인 510에있는 속성 이름 ......

그런 다음 디버그 시간은 입니다. 1.first : 예를 들어, 응용 프로그램은/etc/Ajzele_SimpleModel와 힘과 오류로 이동 :

<config> 
    <modules> 
     <Ajzele_SimpleModel <!--remove a '>' to force an error--> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Ajzele_SimpleModel> 
    </modules> 
</config> 

오류를 볼 수 있습니다.

2.둘째 : 응용 프로그램/코드/지역/Ajzele/SimpleModel을/etc/config.xml 파일로 이동하여하지는 경우

<config> 
    <modules> 
     <Ajzele_SimpleModel <!-- remove a '>' to verify that you load correctly your extension 
      <version>0.0.1</version> 
     </Ajzele_SimpleModel> 
    </modules> 
    <global> 

     <models> 
      <simplemodel> 
       <class>Ajzele_SimpleModel_Model</class> 
        <resourceModel>simplemodel_mysql4</resourceModel>  
      </simplemodel> 
     </models> 
    </global> 
</config> 

당신이 당신의 확장 부하를 제대로하지는이 시점에서 간단한 XML 오류가있는 프로세스를 재 시도 , 그리고 다음 단계는 디버그와 디버그입니다 config.xml

이것은 구체적인 답변이 아니지만, 이것으로 해결책을 볼 수 있다고 생각합니다. 죄송합니다 덕분에, 내 inglish

+0

시도해 ur 디버깅 방법을하지만, 그것은 단지 내 찾지 못한다고 말한다. 내 스크립트가 sql/simplemodel_setup 폴더에있을 때 installer 스크립트. 내 설치 스크립트를 찾을 수없는 이유는 무엇입니까? – ivn

+0

Magento 1.6.1 rigth를 사용하십니까? – davidselo

+0

예 1.6.1 .. – ivn

0

구조로 간단한 모듈을 만들었고 설치 리소스 스크립트가 올바르게 실행되었습니다. 해당 모듈 here을 볼 수 있습니다. Diff 대 여러분의 모듈을 비교하고, 설치 프로그램 스크립트에서 예외가 발생하면 SQL을 한 줄씩 디버깅을 시작하십시오.

+0

SQL을 한 줄씩 디버깅하려고했지만 MySQL 쿼리 창에서 sql 쿼리를 실행했습니다. 완벽하게 잘 달렸다. 나는 그저 모듈을 실행할 때마다 일어나는 어떤 이유로 든 설치 프로그램 스크립트를 찾을 수 없다고 생각합니다. 새 테이블을 만들기 전에 누락 된 특정 단계가 있습니까? – ivn

+0

나는 당신의 기사 http://alanstorm.com/magento_setup_resources를 따라 갔고, 모든 것이 업그레이드 스크립트가 잘 돌아 갔는지 여부를 점검하는 단계까지 잘 진행되었다. 나는 'Running upgrade for ..... .....'메시지를받지 못한다. – ivn

+0

또한 core_resource 테이블에서 행을 수동으로 삭제 한 다음 실제 'CREATE table'스크립트를 추가하고 페이지를 다시로드하면 오류 페이지가 계속 표시된다. 전까지 행을 수동으로 추가 할 때까지. 하지만 내 테이블이 나타나지 않습니다 – ivn

0

die(__FILE__); 문을 설치 스크립트 상단에 놓고 core_resources, rm -rf var/cache/mage - *에서 모듈의 행을 삭제 한 다음 브라우저에서 사이트를 방문하면 파일 이름을 가져와야합니다. 너의 파일. 당신이 죽을 진술을 제거하고 당신은 좋은 가야한다.

내 생각 엔 파일에 테이블을 만들 코드가 없을 때 Magento가 업그레이드를 실행 한 것 같습니다. core_resources에서 버전이 증가하면 설치 스크립트가 다시 실행되지 않습니다.

+0

당신의 주사위를 놓으려고했습니다. (__ FILE__); 그리고 모듈에서 행을 삭제했지만 오류 페이지가 표시됩니다.이 보고서는 내 simplemodel_setup을 찾을 수 없다고 말합니다. – ivn

+0

설치 클래스가 Ajzele_SimpleModel_Model_Mysql4_Setup의 클래스 이름을 갖고 있으며 app/code/local/Ajzele/SimpleModel/Model/Mysql4/Setup.php에 있습니까? –

+0

예, 올바른 클래스 이름을 갖고 올바른 위치에 있습니다. 나는 모듈 n의 생성을 시작하여 다른 모듈 이름을 가진 테이블을 다시 한 번 단계별로 살펴 보려고했다. 내가 무엇이든 놓치지 않고 있는지 확인하기 위해서. 그런 다음 Setup.php를 만들어야합니다. – ivn

1

이 방법으로 정의를 시도 할 수 있습니다 :

<resources> 
     <selo_modulo1_setup> 
      <setup> 
       <module>Selo_Modulo1</module> 
      </setup> 
     </selo_modulo1_setup> 
    </resources> 

그리고 이상/selo_modulo1_setup/설치-1.6.0.0.php yourmodule/SQL에 넣어, 설치의 예를 스크립트

<?php 
die('All right'); 

/* @var $installer Mage_Core_Model_Resource_Setup */ 
$installer = $this; 
$installer->startSetup(); 
/** 
* Create table 'poll' 
*/ 
$table = $installer->getConnection() 
    ->newTable($installer->getTable('selo_modulo1/blog_post')) 
    ->addColumn('post_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
     'identity' => true, 
     'unsigned' => true, 
     'nullable' => false, 
     'primary' => true, 
     ), 'Post Id') 
    ->addColumn('title', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
     ), 'Post title') 
    ->addColumn('content', Varien_Db_Ddl_Table::TYPE_TEXT, 1024, array(
     ), 'Post content') 
    ->setComment('Blog_post');//Comentario de la tabla. 
$installer->getConnection()->createTable($table); 

$installer->endSetup(); 

그리고 본건에 대한

이 만든 확장에 내 프로토콜 카피 오류를 커밋은/코드를 붙여 넣 것은 내 사용을위한 코어 및 튜닝의 유사한 모듈을 OS.

감사합니다. david

+0

코드로 리소스 파트와 설치 스크립트를 변경하십시오. 그러나 당신이 언급 한 테이블 이름이 내 것과 다르므로 도 변경이 필요하지 않습니까? – ivn

관련 문제