반응형

http://stackoverflow.com/questions/16427421/how-to-remove-cocoapods-from-a-project

  1. Delete the standalone files (Podfile Podfile.lock and your Pods directory)
  2. Delete the generated xcworkspace
  3. Open your xcodeproj file, delete the references to Pods.xcconfig and libPods.a (in the Frameworks group)
  4. Under your Build Phases delete the Copy Pods ResourcesEmbed Pods Frameworks andCheck Pods Manifest.lock phases.
  5. This may seem obvious but you'll need to integrate the 3rd party libraries some other way or remove references to them from your code.



1.해당 프로젝트 폴더에 가서 Podfile, Podfile.lock, Pods폴더를 삭제하라.

2.cocoapods 설치시 자동 생성되었던 xcworkspace 확장자 파일도 지워라.

3.해당 프로젝트를 열고, Pods.xcconfig와 libPods.a 를 삭제하여라(libPods.a는 Frameworks 그룹안에 있다)

4.Project->Target->프로젝트명에 가면 Build Phases 가 있다. 거기 아래에 Copy Pods Resources, Embed Pods Framworks, Check Pods Manifest.lock 를 지워라.

5.위 삭제방법이 정확하지 않을 수 있다. 이것말고 다른 라이브러리 라던가 있을 수 있따(?)


요정도로 보면 될 것같은데..나는 이렇게 하니깐 됨.

반응형

'Programming > Swift' 카테고리의 다른 글

process launch failed: failed to get the task for process [1383]  (0) 2016.05.24
will be removed in Swift 3  (0) 2016.03.22
SQLite 쿼리 실행  (0) 2016.03.16
application 이름 변경  (0) 2016.03.16
iOS 동영상 강좌  (0) 2016.02.24
반응형


/*SQLite*/

//로컬에서 데이터 저장경로

//let db = try Connection("/Users/goodgods/Documents/development/MyApp/db.sqlite3")


// Get document directory path from your phone  -> 모바일에서 경로찾아 저장함

let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String

do {

    let db = try Connection("\(path)/db.sqlite3")

                    

    let users = Table("users")

    let id = Expression<String>("id")

                    

    try db.run(users.create(ifNotExists: true) { t in     // CREATE TABLE "users" (

    t.column(id, primaryKey: true//     "id" INTEGER PRIMARY KEY NOT NULL,

//                t.column(email, unique: true)  //     "email" TEXT UNIQUE NOT NULL,

//                t.column(name)                 //     "name" TEXT

})

                    

    try db.run(users.delete())

    try db.run(users.insert(id <- authorizationCode!))

} catch let error as NSError {


}


반응형

'Programming > Swift' 카테고리의 다른 글

will be removed in Swift 3  (0) 2016.03.22
해당 프로젝트에서 cocoapods 삭제 방법  (0) 2016.03.18
application 이름 변경  (0) 2016.03.16
iOS 동영상 강좌  (0) 2016.02.24
appstore에서 xcode가 다운로드 되지 않을때  (0) 2016.01.08
반응형

Info.plist 아래와 같이 추가 해준다.



반응형

'Programming > Swift' 카테고리의 다른 글

해당 프로젝트에서 cocoapods 삭제 방법  (0) 2016.03.18
SQLite 쿼리 실행  (0) 2016.03.16
iOS 동영상 강좌  (0) 2016.02.24
appstore에서 xcode가 다운로드 되지 않을때  (0) 2016.01.08
살짝 다른 문법(?)  (0) 2015.12.30
반응형

독학을 하면서 굉장히 많은 도움을 준 사이트 들이다.


https://www.youtube.com/watch?v=xwyhCovrScQ&feature=youtu.be


3.Left side menu (Navigation Drawer) example with Swift
http://swiftdeveloperblog.com/left-side-menu-navigation-drawer-example-with-swift/

4.Swift UIActivityIndicatorView Example 1. Using storyboard.
http://swiftdeveloperblog.com/store-user-information-in-mysql-database/
 Video #1

5.Send HTTP POST Request example using Swift and PHP
http://swiftdeveloperblog.com/send-http-post-request-example-using-swift-and-php/

6.How to Use iOS Charts API to Create Beautiful Charts in Swift
http://www.appcoda.com/ios-charts-api-tutorial/

7. How to create a Line Chart using ios-charts

8.Adding multiple lines to your Line Chart using ios-charts

9.How to parse JSON with Swift2

10.Want your Swift app to scroll in two directions, like Netflix? Here’s how.

11.How to make a simple collection view with Swift

12.How to Pass Data from View Controller (Swift : Xcode)

13.Passing Data Between Table Views using Structs and Arrays (Swift : Xcode)

14. How To Create an Expandable Table View in iOS

15.UISwitch로 하위 메뉴 숨기기

16. UISlider example (iOS Slider) using swift

17. iOS Login and Signup Screen tutorial : Swift + XCode 6 + iOS 8 + JSON

18. UIPickerView Example Introduction


19.Add 3D Touch to your apps



반응형

'Programming > Swift' 카테고리의 다른 글

SQLite 쿼리 실행  (0) 2016.03.16
application 이름 변경  (0) 2016.03.16
appstore에서 xcode가 다운로드 되지 않을때  (0) 2016.01.08
살짝 다른 문법(?)  (0) 2015.12.30
swift 입문 소스  (0) 2015.11.26
반응형

시작 커서가 계속 공백이 생긴다.


<textarea name="textarea" rows=30 cols=150>

    Conentes

</textarea>


아래와같이 전부 붙여쓰면 공백이 사라진다.


<textarea name="textarea" rows=30 cols=150>Conentes</textarea>

반응형

'Programming > HTML' 카테고리의 다른 글

og 태그  (0) 2016.06.01
table 태그 width 고정  (0) 2016.05.30
강제적으로 ie9로?  (0) 2015.10.07
반응형

apple Developer 사이트에서 개발자 로그인 후에 다운로드한다.


apple developer

반응형

'Programming > Swift' 카테고리의 다른 글

application 이름 변경  (0) 2016.03.16
iOS 동영상 강좌  (0) 2016.02.24
살짝 다른 문법(?)  (0) 2015.12.30
swift 입문 소스  (0) 2015.11.26
시뮬레이션 할 때 키보드가 보이지 않는다?  (0) 2015.11.25
반응형

- ERROR 관련(?) 은  swift 2.0부터 syntax 가 바뀜


 * old

var err: NSError?

var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary

if let parseJSON =myJSON {

// Now we can access value of First Name by its key

var firstNameValue = parseJSON[“firstName”] as? String

println(“firstNameValue: \(firstNameValue)”)

}


 * new(swift 2.0)

do {

    if let parseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary {

        // Now we can access value of First Name by its key

        let firstNameValue:String = parseJSON["firstName"] as! String

        print("firstNameValue: \(firstNameValue)")

    }       

} catch {

    print(error)

}


 - 결과 값에 optional 값이 같이 출력됨.(print)

명령어 

결과값 

 print(“op :  \(option)")

 op : optional(VALUE)

 print(“op :  \(option)!)

 op :VALUE


반응형
반응형

// playground 에서 아래 소스를 실행해 보자.

1.

//: Playground - noun: a place where people can play

import UIKit


class ExamClass {

    deinit {

        print("deinit")

    }

}


2.

import UIKit


var exam: ExamClass? = ExamClass()

exam = nil


for i in 0...10 {

    i * i

}


3.

import UIKit

import XCPlayground


let circleRect = CGRectMake(0,0,300,300)

class CircleView: UIView {

    override func drawRect(rect: CGRect) {

        let context:CGContextRef = UIGraphicsGetCurrentContext()!

        UIColor.whiteColor().setFill()

        CGContextFillRect(context, rect)

        UIColor.blackColor().setFill()

        CGContextFillEllipseInRect(context,circleRect)

    }

}


let view = CircleView(frame: circleRect)

XCPShowView("뷰어",view:view)


4.

import UIKit

import XCPlayground


XCPSetExecutionShouldContinueIndefinitely(true)


class Exam: NSObject {

    func timerStart() {

        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "chk", userInfo: nil, repeats:true)

    }

    

    var cnt = 0

    func chk() {

        print("timer check!")

    }

}


let exam = Exam()

exam.timerStart()


5.

import UIKit

import XCPlayground


XCPSetExecutionShouldContinueIndefinitely(true)


class Exam: NSObject {

    func timerStart() {

        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "chk", userInfo: nil, repeats:true)

    }

    

    var cnt = 0

    func chk() {

        XCPCaptureValue("count", value:++cnt)

        XCPCaptureValue("random", value:arc4random_uniform(100))    //난수 발생

    }

}


let exam = Exam()

exam.timerStart()


6.

import UIKit

import XCPlayground


let chk:Int? = 2

let db:[String] = ["","서울","대전","부산"]


if let unrapedChk = chk {

    let sido = db[unrapedChk]

    print(sido)

else {

    print("Error")

}


7.

class SwiftLab: CustomStringConvertible {

    var description: String {

        return "안녕하세요"

    }

}


let sLab = SwiftLab()

print(sLab)


8.

let apple = 5

assert(apple < 10"10개미만")

반응형
반응형

제목 그대로, 시뮬레이션 할 때 키보드가 보여지지 않는 경우는


시뮬레이터 화면을 클릭하고 상단 메뉴에 Hardware 가 있다.

Keyboard의 Toggle Software Keyboard 선택하면 된다.


Hardware - Keyboard - Toggle Software Keyboard

반응형
반응형

youtube 동영상 플레이어에서

"youtube에서 동영상을 시청하거나 브라우저에서 자바스크립트가 사용 중지된 경우 ..." 라는 문구가 뜬다던가

포털 주위가 휑하다고 생각된다면 자바스크립트가 실행되지 않아서다.


인터넷 옵션에 들어가서 보안탭-사용자지정수준으로 들어간다.


"스크립틀릿 허용"이라는 곳을 찾아서 허용으로 체크해주고 브라우저를 재실행한다.

 - 스크롤바에 1/3 지점정도에 있는 듯 함. 캡쳐 사진은 추후에 올리겠다.

반응형
반응형

버튼 삭제 후 에러 발생.

libc++abi.dylib terminating with uncaught exception of type nsexception (lldb)


http://stackoverflow.com/questions/26442414/libcabi-dylib-terminating-with-uncaught-exception-of-type-nsexception-lldb

반응형

'Programming > Swift' 카테고리의 다른 글

appstore에서 xcode가 다운로드 되지 않을때  (0) 2016.01.08
살짝 다른 문법(?)  (0) 2015.12.30
swift 입문 소스  (0) 2015.11.26
시뮬레이션 할 때 키보드가 보이지 않는다?  (0) 2015.11.25
senchaTouch Download  (0) 2015.10.19
반응형

* 자바스크립트에서는 replaceAll 이라는 기능이 없음.


* 전체 a를 b로 변경 하고 싶을 때.

var name = 'a12a34a111';

 실행

결과값 

 name.replace('a','b');

 b12a34a111

 name.replaceAll('a','b');

 에러

 name.replace(/a/gi,'b');

 b12b34b111


* 결론

정규 표현식을 써서 replaceAll과 같은 효과를 갖게 한다.


g : 검색범위는 전체.

i :  대소문자를 구분하지 않음.


만약 특수문자를 검색하여 변환해야 할 때는 변환문자 앞에 "\" 를 붙여 준다.

\를 붙여줌으로써, 정규표현식의 문자가 아닌 검색대상의 문자가 된다.

ex) name.replace(/\+/gi,'b')

반응형

'Programming > JavaScript' 카테고리의 다른 글

[ERROR] jqplot 차트 이미지 출력 문제점  (0) 2017.12.07
브라우저 창 크기에 따른 변화  (0) 2017.08.08
특정 태그 제외  (0) 2017.06.14
반응형

* 지정된 최대 실행 시간이 초과하여 발생한 에러


해결 방법

(1) php.ini의 max_execution_time를 늘려주기

max_execution_time= 0 (0 일 경우 메모리 제한이 없음.)

아파치 재실행 필요

(2) 해당 소스에만 메모리를 늘려주기.

   소스에 ini_set('max_execution_time',300); 추가 해주자.


반응형

'Programming > PHP' 카테고리의 다른 글

콘솔에서 phpinfo 확인하기  (0) 2022.10.21
date 계산  (0) 2016.05.26
error 메세지 출력  (0) 2015.10.22
bitnami  (0) 2015.10.21
phpexcel 설치  (0) 2015.10.13
반응형

ini_set('display_errors','on');

error_reporting(E_ALL);



php.ini 에서는

display_erros = On 으로 설정

반응형

'Programming > PHP' 카테고리의 다른 글

date 계산  (0) 2016.05.26
Fatal error: Maximum execution time of 30 seconds exceeded  (0) 2015.10.22
bitnami  (0) 2015.10.21
phpexcel 설치  (0) 2015.10.13
index.php 삭제하기  (0) 2015.09.09
반응형

bitnami는 OS별로 Apache/MySQL/PHP를 한번에 설치할 수 있다.


https://bitnami.com/stack/wamp : window용

https://bitnami.com/stack/mamp : mac용

https://bitnami.com/stack/lamp : 리눅스용


 - 설치 중간에 phpMyAdmin을 제외하고 모두 체크해제..

 - Database의 비번을 입력하라고 나옴...

 - 리눅스 설치(관리자 권한으로 실행하라)

   ex) sudo bitnami-lampstack-5.4-linux-x86_64.run


- 버그인지 이유는 알 수 없으나..(캐쉬 문제도 아닌 것 같음.)

- 웹 소스가 변경이 되면 웹페이지에 바로 반영이 되지 않는다.

- 그래서 항상 아파치를 재시작후 변경된 웹페이지를 확인한다.

- mac에서만 그런줄 알았더니 windows에서도 동일한 증상을 확인함.

반응형

'Programming > PHP' 카테고리의 다른 글

Fatal error: Maximum execution time of 30 seconds exceeded  (0) 2015.10.22
error 메세지 출력  (0) 2015.10.22
phpexcel 설치  (0) 2015.10.13
index.php 삭제하기  (0) 2015.09.09
엑셀 다운로드 header 방식  (0) 2015.08.26
반응형

https://www.sencha.com/products/touch/download/


* 요청 이미지(이메일로 요청하여 다운로드 받을 수 있음.)



* 요청한 이메일로 다운로드 URL을 보내줌.


반응형
반응형

phpexcel 다운로드

- 알맞은 경로에 다운로드 후 압축을 풀어준다.

- 개인적으로 DocumentRoot에 PHPExcel 폴더안에 넣음.(/apache/htdocs/PHPExcel)


* 선언

include_once("../PHPExcel/ExcelClasses/PHPExcel.php");

반응형

'Programming > PHP' 카테고리의 다른 글

Fatal error: Maximum execution time of 30 seconds exceeded  (0) 2015.10.22
error 메세지 출력  (0) 2015.10.22
bitnami  (0) 2015.10.21
index.php 삭제하기  (0) 2015.09.09
엑셀 다운로드 header 방식  (0) 2015.08.26
반응형

사용자가 ie9가 설치되어 있으나, 기본 버전을 이전버전으로 되어 있을 경우 브라우저를 열었을 때,

표준 html을 지킨 웹페이지는 아마도 UI가 깨져서 나올 듯 싶다.


표준 html로 맞췄더라도 사용자가 ie9 이상 또는 크롬/사파리를 사용하지 않았을 경우 아무 소용없다.


이것을 강제적으로 ie 사용자에 대해서만 ie9(그나마 ie에서 표준을 지키고 있는 최소 버전)로 변경해서 웹페이지를 보여주려고 하려면 아래 문구를 head에 추가해 주자.


ie9뿐만 아니라 현재 나와있는 edge 로도 설정이 가능함.

<head>

<meta http-equiv="X-UA-Compatible" content="IE=9" />

</head>


반응형

'Programming > HTML' 카테고리의 다른 글

og 태그  (0) 2016.06.01
table 태그 width 고정  (0) 2016.05.30
textarea  (0) 2016.02.03
반응형

* config 에 설정 된 값을 가져올 때.

   - echo $this->config->item('base_url');

   - 존재하지 않는 설정값을 가져오려고 하면 FALSE가 return 됨.


* 새로운 config 파일을 만들 때.

 - config/development/goodgods.php

$config['is_dev'] = true; 


 - config/production/goodgods.php

$config['is_dev'] = false; 


 - config 파일 로드

$this->load->config('goodgods');  //goodgods.php 파일을 로드함.


* 개발 환경일 때만 출력

 ex. 특정값이 있을 때 개발/수정이 편하다고 할 때 그 값을 항상 보여주고 있으면 좋겠지?

     그러나 그 값은 서비스 환경에서 보여지면 안돼! 보기도 안좋고, 중요값이 있으면 클나잖어..

<? if($this->config->item('is_dev')) { ?>

    <div class="well"> This is DEV page!</div> //well은 bootstrap 라이브러리에서 제공되는 클래스

<? } ?>


* 의문이 드는 것이 개발환경과 서비스 환경을 구분 짓는다고 하여도 소스가 변경되면 같이 변경될 것 같은데..

  그런 의미에서 구분 짓는 것은 아니겄지!

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

index.php  (0) 2015.09.08
/application/config 파일  (0) 2015.09.08
Model(5/5) - insert  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
helper  (0) 2015.09.07
반응형
httpd.conf 파일의 AllowOverride 부분을 All로 수정.
AllowOverride 부분이 부분적으로 몇개 있을건데, 아래 주석처리로 인해 덩그러니 홀로 있는 부분을 수정해줘야 함.

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
# AllowOverride None
AllowOverride All

index.php에 .htaccess 파일을 생성해라.

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ 어떤폴더/저런폴더/이런폴더/index.php/$1 [L] </IfModule>


sudo apachectl graceful  //아파치 재시작

localhost/index.php/test 에서 localhost/test 로 접속이 가능. 


반응형

'Programming > PHP' 카테고리의 다른 글

Fatal error: Maximum execution time of 30 seconds exceeded  (0) 2015.10.22
error 메세지 출력  (0) 2015.10.22
bitnami  (0) 2015.10.21
phpexcel 설치  (0) 2015.10.13
엑셀 다운로드 header 방식  (0) 2015.08.26
반응형

* localhost/index.php

define('ENVIRONMENT','development');


if(define('ENVIRONMENT'))

{

    switch (ENVIROMENT)

    {

        case 'development':

                  error_reporting(E_ALL);

        break;


        case 'testing':

        case 'production':

                  error_reporting(0);

        break;


       default:

               exit('The application environment is not set correctly.');

    }

} 


* define('ENVIRONMENT','development' | 'testing' | 'production'); 개발환경/테스트/서비스 환경 선택


* application/config에 development와 production 폴더를 각각 만들고,

  해당 환경설정 파일들을 각기 다르게 설정하여 각각 폴더에 넣어주면 위 환경변수에 따라서 다르게 작동한다.


* index.php를 dev.php로 복사하여 파일을 2개로 관리를 하면, 개발환경과 서비스 환경으로 각각 따로 작동을

  하기 때문에 개발을 하는데 있어서 약간 수월 해 질 수 있다.

   - localhost/index.php/topic : 서비스 환경, localhost/dev.php/topic : 개발 환경

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

config 파일 생성  (0) 2015.09.09
/application/config 파일  (0) 2015.09.08
Model(5/5) - insert  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
helper  (0) 2015.09.07
반응형

1. config.php 

 - 기본설정파일

 - https://opentutorials.org/course/697/3834(config.php 파일 해설 부분 또는 설정4 동영상 참고.)


2. database.php 

 - 데이터베이스 설정 파일

 - 유츌되지 않도록 철저한 보안을 유지해야 함.


3. autoload.php

 - 라이브러리,helper, 데이터베이스등을 항상 선언되도록.

 ex) $autoload['helper']=array('url')

      $autoload['libraries']=array('database')


4. hooks.php

 - system 폴더에 영향을 줘야할 때 사용.

 - system 폴더 : CI 코드, application 폴더 : 사용자가 정의한 코드


 - /system에 있는 소스들을 수정하는 것은 위험.(권장하지 않음)

 - 버전업을 했을 경우 데이터가 덮어씌어져 기존 코드와 충돌이 날 수도 있으며,

   복원하기도 힘들어지는 경우가 생긴다.

 - hooks.php를 통해서 수정이 가능함.


5. routes.php

 - uri path에 따라서 규칙대로 CI가 작동하는데, uri의 규칙을 다른게 변하고 싶을 때.

 ex) $route['topic/(:num)']="topic/get/$1";

      $route['default_controller']="login";

      $route['404_override']="errors/error404";

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

config 파일 생성  (0) 2015.09.09
index.php  (0) 2015.09.08
Model(5/5) - insert  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
helper  (0) 2015.09.07
반응형

* 입력된 폼 값을 DB에 insert 하기


- controllers/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function add() {

    $this->head();


    $this->load->library('form_validation');  //form_validation 라이브러리를 사용하겠음.


    //title 과 content는 반드시 입력해라.

    $this->form_validation->set_rules('title','Errors_title','required');

    $this->form_validation->set_rules('content','Errors_content','required');


    if($this->form_validation->run() == FALSE){

        $this->load->view('add');  //입력 값이 FALSE이면 다시 add 페이지를 뿌려줘라.

    } else {

//       $this->load->model('add_model');  => 앞서 공통적으로 선언을 했기 때문에 생략


//인자값을 가져와 add 메소드를 사용하자

       $this->add_model->add($this->input->post('title'), $this->input->post('content'));


        echo "Perfect!";  //TRUE 이면 Perfect라는 문구를 출력하라.

    }


    $this->load->view('footer');


- models/topic_model.php

public function add($title,$content) {

    //insert array 문에 함수를 그냥 사용하게 되면 문자로 인식하여 입력이 되지 않아, 아래처럼 해야함.

    $this->db->set('date','NOW()',false);  //date 폴더에 now() 함수를 쓰고, 이것은 문자가아니가(false)

    return $this->db->insert('tablename',array('title'=>$title,'content'=>$content));


//    $this->db->last_query();  => 실행된 쿼리를 확인.

}


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

index.php  (0) 2015.09.08
/application/config 파일  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
helper  (0) 2015.09.07
URI Routing  (0) 2015.09.07
반응형

1. Library

 - 라이브러리마다 사용 법이 조금씩 다름.

 - 대표적인 예제로 form_validation을 사용하는 법을 다룸.


2. form_validation

 (1) form_validation

 - form 안에 입력된 값들이 부정확한 경우 어떻게 할 것인가


 (2) set_rules

 - 어떤 부분을 필히 입력이 되어야 하는지를 체크.

 - set_rules('form 안에 있는 태그들의 name','사용자가 알아볼수 있는 명칭','required');

 - required : 반드시 입력되어야 함.


 (3) validation_errors

 - 입력된 값이 잘못되었을 경우, 어떤 값이 잘못되었는지 에러메세지를 출력해 줌.


3. 예제

 - topic.php에 add라는 method를 추가.

 - views에 form으로 구성된 add.php를 생성.


 - views/get.php(add 페이지에 갈 수 있게 버튼을 생성함.)

<div>

    //링크로 되어 있으나, bootstrap 라이브러리에서 제공하는 btn 클래스를 이용하여 버튼처럼 만들어줌.

    <a href="index.php/topic/add" class="btn">ADD</a> //bootstrap button css description

</div>


 - controllers/topic.php

function add() {

    $this->head();


    $this->load->library('form_validation');  //form_validation 라이브러리를 사용하겠음.


    //title 과 content는 반드시 입력해라.

    $this->form_validation->set_rules('title','Errors_title','required');

    $this->form_validation->set_rules('content','Errors_content','required');


    if($this->form_validation->run() == FALSE){

        $this->load->view('add');  //입력 값이 FALSE이면 다시 add 페이지를 뿌려줘라.

    } else {

        echo "Perfect!";  //그렇지 않으면 Perfect라는 문구를 출력하라.

    }


    $this->load->view('footer');

}


 - views/add.php

<h1>This is add page!</h1>

<form method="post" action="index.php/topic/add">

    <?php echo validation_errors(); ?> //어떤 부분에서 에러가 났는지 알려줌.

    title : <input type="text" name="title" />

    content : <textarea name="content">/textarea>

    <input type="submit">

</form>


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

/application/config 파일  (0) 2015.09.08
Model(5/5) - insert  (0) 2015.09.08
helper  (0) 2015.09.07
URI Routing  (0) 2015.09.07
Bootstrap 라이브러리  (0) 2015.09.07
반응형

helper 란?

 - 라이브러리와 비슷한 개념이긴 하나, 라이브러리는 객체기반이며, helper는 함수 기반이다.

 - helper를 선언한 후 다른 추가 작업 필요없이 바로 사용이 가능하다.

 - system/helper/*.php에서 소스를 확인 할 수 있다.


* helper 레퍼런스(http://codeigniter-kr.org/user_guide_2.1.0/)

- 레퍼런스를 참고하여 어떤 helper가 있고, 어떤 함수명을 사용해야 되는지 파악할 수 있다. 


1.전역 helper 사용.

 * application/config/autoload.php

 $autoload['helper'] = array('url','html');


2. 선언 helper

 * controller/topic.php

//파일명은 url_helper.php 이지만, 선언할 때에는 name만 써준다.

//helper(array('url','html')); => 여러가지 helper를 사용할 때.

$this->load->helper('url');

$this->load->view('get',array('topic'=>$topic));


 * views/get.php

<div><?=auto_load($topic->content)?></div>



* helper 만들기.

 - models/topic_model.php

public function get($topic_id){

    $this->db->select('id');

    $this->db->select('name');

    $this->db->select('extract(epoch from date) date');

    return $this->db->get_where('tablename',array('id'=>$topic_id))->row();


 - application/helpers/korean_helper.php

<?php if( ! defined('BASEPATH')) exit('No direct script access allowed');

    if(!function_exists('kdate')){  //다른 함수중에 kdate라는 함수가 있는지를 우선 확인

        function kdate($stamp) {

            return date('o년 n월 j일 G시 i분 s초',$stamp);

        }

    }

?>


 - views/get.php

 <div><?=kdate($topic->date)?></div>


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(5/5) - insert  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
URI Routing  (0) 2015.09.07
Bootstrap 라이브러리  (0) 2015.09.07
Model(4/5) - 각 리스트 정보 페이지마다 전체리스트 생성 구현  (0) 2015.09.07
반응형

* URI Routing : 사용자가 접근한 URI에 따라서 Controller의 메소드를 호출해 주는 기능.

* mapping : CI에서 URI에 따라서 호출되는 규칙,방법.

* config/routes.php는 mapping 방식을 CI 규칙과 다르게 설정하는 파일.(Remapping)


* application/config/routes.php 예제

//URI가 "topic/숫자"가 왔을 경우 내부적으로 topic/get/숫자와 같음.

$route['topic/(:num)'] = "topic/get/$1";


//URI가 "post/숫자"가 왔을 경우 내부적으로 topic/get/숫자와 같음.

$route['post/(:num)'] = "topic/get/$1";


//URI가 "topic/a부터z 중 문자 포함/a부터z중 문자 포함/숫자"일 경우 내부적으로 $1/$2/$3과 같음.

$route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";


//어떤 URI를 입력하지 않고 도메인주소만을 입력했을 login 페이지와 같음

$route['default_controller'] = "login";


//404에러가 발생했을 시 404페이지와 같음.

$route['404_override'] = "errors/error404";  //404 에러가 났을 경우 errors/error404를 호출.


* controller/errors.php

<?

    class Errors extends CI_Controller {

        public function error404() {

            $this->load->view('head');

            $this->load->view('error/404');

            $this->load->view('footer');

        }

    }
?>


* view/error/404.php

<?

    echo "Not Found Page!!!";

?>



* 결론

 1.routes.php에서는 에러 발생 시, 지정한 컨트롤러 파일(controller/errors.php)이 호출되도록 설정을 해줄 수 있음.

 2.errors.php 컨트롤러 파일안에 정의된 error404 메소드가 실행됨.

 3.view에 뿌려주는 값을 출력해줌.(views/error/404.php)

반응형
반응형

* 설치

 1. Bootstrap 다운로드

 2. 보통 css, js, img 폴더는 static/에 생성하며, bootstrap 라이브러리 동일 폴더에 lib라는 폴더를 생성하여, 관리함

     - static/lib/bootstrap

 3. 해당 사이트에 들어가서 다운로드 후 위 경로에 업로드/압축을 풀어준다.

 4. 설치 완료


* bootstrap include

<!DOCTYPE html>

<html>

  <head>

    <title>Bootstrap 101 Template</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">  //모바일을 지원

    <!-- Bootstrap -->

    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">  //bootstrap css include

  </head>

  <body>

    <h1>Hello, world!</h1>

    <script src="http://code.jquery.com/jquery.js"></script>  //jquery include

    <script src="js/bootstrap.min.js"></script>  //bootstrap script include

  </body>

</html>


* 사용.

 1. scaffolding : 전체적인 layout을 설정(http://getbootstrap.com/2.3.2/scaffolding.html#layouts)

<div class="container-fluid">

  <div class="row-fluid">

    <div class="span2">

      <!--Sidebar content-->

    </div>

    <div class="span10">

      <!--Body content-->

    </div>

  </div>

</div> 

 

 2. Responsive design(http://getbootstrap.com/2.3.2/scaffolding.html#responsive)

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> 

  - head 에 위 부분을 추가적으로 선언해야 함.

  - viewport는 bootstrap 사용을 위해 선언해 주었기 때문에 다시 해줄 필요는 없음.

  - 반응형 디자인 : 창의 크기가 작아졌을 경우 스스로 창에 크기에 따라 전체적인 구도가 변화하는 것.

  - 모바일 기기에서 볼 때 많이 유용할 수 있음.


 3. component(메뉴)

  (1) navbar(상단메뉴) - http://getbootstrap.com/2.3.2/components.html#navbar

 - Responsive navbar sample

<div class="navbar nav-bar-fixed-top">

  <div class="navbar-inner">

    <div class="container">

 

      <!-- .btn-navbar is used as the toggle for collapsed navbar content -->

      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">

        <span class="icon-bar"></span>

        <span class="icon-bar"></span>

        <span class="icon-bar"></span>

      </a>

 

      <!-- Be sure to leave the brand out there if you want it shown -->

      <a class="brand" href="#">Project name</a>

 

      <!-- Everything you want hidden at 940px or less, place within here -->

      <div class="nav-collapse collapse">

        <!-- .nav, .navbar-search, .navbar-form, etc -->

      </div>

 

    </div>

  </div>

</div>


 - Fixed to Top

<div class="navbar navbar-fixed-top">

  ...

</div>


 - views/head.php

<head>

    <title>Bootstrap 101 Template</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">  //모바일을 지원

    <!-- Bootstrap -->

    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">  //bootstrap css include

    <style>body{padding-top:60px;}</style>

    <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">

</head> 

  - Responsive navbar sample를 보면 navbar-fixed-top 클래스를 추가해 주면서 body안에 값들이

    메뉴바들에 의해 가려지게 되어 head에 bootstrap.min.css와 bootstrap-responsive.css 선언 사이에 style 

    body{padding-top:60px;}이라고 선언하여 구도를 맞춰주었음.


  (2) navs(사이드메뉴) - http://getbootstrap.com/2.3.2/components.html#navs

 -Stacked tabs sample

<ul class="nav nav-tabs nav-stacked">  //해당 클래스를 복사하여 원하는 곳에 copy 한다.

  ...

</ul> 

  -views/topic_list.php

<div class="span2">  //scaffolding 을 참조하여 적용한 Sidebar content

    <ul class="nav nav-tabs nav-stacked">  //copy

        <?

            foreach($topics as $entry) {

        ?>

            <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

        <?

            }

        ?>

    </ul>

</div>

 

 4. bootstrap 사이트 활용

  - 각 기능 들에 대한 샘플 소스들이 나와 있으며, 이것에 대한 클래스등을 잘 활용하여 UI에 변화를 줄 수 있음.

  - 원하는 class 및 소스를 가져와서 태그에 넣어주면 됨.

  - optional display variantions 를 보면 옵션으로 설정할 수 있는 클래스들이 나왔음.

반응형
반응형

리스트를 누르고 해당 정보를 보는 페이지마다 다시 리스트를 넣으려고 한다.


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


views/main.php

This is Main page.

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?> 


메인페이지에 리스트를 뿌려주는 view 파일을 각각 리스트 정보안에서도 활용 하기 때문에 중복이 된다.

위 빨간색 표시 부분을 잘라내기 하여 topic_list.php 파일로 변경하고 controller 파일에서 불러옴.


views/main.php

 This is Main page.


views/topic_list.php

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?>


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $this->load->view('main'); //main 페이지는 더이상 받을 인자가 없다.

    $this->load->view('topic_list',array('topics'=>$topic_list)); //전체 리스트를 뿌려줌.

}


function get($id) {  //전체 리스트에서 선택된 정보값을 출력해주는 부분(이곳에 전체리스트를 다시 가져옴.)

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

    $this->load->view('topic_list',array('topics'=>$topic_list));

// 정보를 보여준 후 전체 리스트를 뿌려준다.

}


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

URI Routing  (0) 2015.09.07
Bootstrap 라이브러리  (0) 2015.09.07
Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(2/5) - 리스트와 각 리스트 정보 구현  (0) 2015.09.04
Model(1/5) - 설정 및 사용  (0) 2015.09.04
반응형

* Controller 파일의 중복소스 제거


1. __construct()

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


2. function

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->head();


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->head();


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


function head(){

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));

}


반응형
반응형

- 리스트를 보여주고 각 리스트에 대한 정보를 보여준다.


* models/topic_model.php

class Tablename_model extends CI_Model {

    function __construct() {   //method 를 초기화

        parent::__construct();

    }


   public function gets() {

       return $this->db->query('SELECT id,name from tablename')->result();

   }


   public function get($topic_id) {

        return $this->db->get_where('tablename',array('id'=>$topic_id))->row();

//    get_where는 active record라는 방식이라 함. 아래 쿼리와 동일하다고 함.

//    get_where 의 첫번째 인자는 테이블명, 두번째 인자의 id는 컬럼명임.

//    return $this->db->query('SELECT * from tablename where id = $topic_id')->row();

//    active record 방식의 장점은 DB의 인식성이 좋음.

   }


active record 방식을 사용하였을 때 특정 컬럼만 가져오고 싶다면, 아래와 같이 기술하면 된다.

$this->db->select('id');

$this->db->select('name');

$this->db->select(substr('chardate',1,4) chardate);

return $this->db_get_where('tablename',array('id'=>$topic_id))->row();



* controller/topic.php

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.


    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


}


* views/get.php

 This is get page.

<article>

    <h1><?=$topic->id?></h1>

    <div><?=$topic->name?></div>

</article>



다음에는 현재 구현한 소스를 가지고 간결화 하는 작업을 할 것이다.

model 수업을 들으면서 머리가 많이 복잡해지기 시작했다.


어떤 흐름인지는 알겠는데, 정리가 되지 않는 찝찝함?

동영상 강의를 반복적으로 듣다가 잊지 않기 위해 블로그에 글을 적어본다.

담주에 보게 되면 또 기억할 수 있을지가 의문이네 ㅠㅠ

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(4/5) - 각 리스트 정보 페이지마다 전체리스트 생성 구현  (0) 2015.09.07
Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04

+ Recent posts