Кто делал для сайта приложения для гаджетов

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

У меня сайт на Yii тематики каталог ресторанов.
Пришла идея написания приложений для Ipad и Android
Хотел бы узнать истории людей которые прикручивали приложения к свои сайтам на Yii
Например:
1. Где искали програмистов
2. Стоимость средняя по стране
3. Если будет обновление кода на сайте, то програмисты могут ли соправождать за не большую цену
4. Встаривали ли вы рекламу и прочее
5. Эффектино ли приложение в расскрутки
6. Какие фишки можно встроить в приложение, например: Sharing и прочее
Изображение
nenor
Сообщения: 27
Зарегистрирован: 2013.08.27, 09:45

Re: Кто делал для сайта приложения для гаджетов

Сообщение nenor »

По-моему вы явно ошиблись разделом. Но тем не меннее:
Для работы вашего сайта и приложения придется реализовывать механизм взаимодействия, например REST.
1. fl.ru
2. В зависимости от требуемого функционала (самое простое обычно от 200$)
3. Как договоритесь
4. Зависит от вида монетизации проекта
5. Непонятна суть вопроса
6. Любые

Пожалуйста, в следующий раз задавайте более сформулированные вопросы.
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Истории людей Вот суть вопроса!
То что перечислил это я и сам знаю.
однако все приходит с опытом и я хотел услышать Истории людей которые успешно ведут проект на Yii и реализовали так же приложения.

1. fl.ru (Может Вы порекомендуете конкретно Фрилансера?!)
3. Как договоритесь
4. Зависит от вида монетизации проекта
5. Непонятна суть вопроса! 5. Эффектино ли приложение в расскрутки? т.е. Дает ли приложение преимущество перед конкурентами, нашли ли вы новых клиентов, приветствуют ли ваши пользователи и рады вашему приложению, часто ли оставляют отзывы и просят обновить и доработать
Теоретическая часть это очень хорошо, есть могучий Гугл, который направит, а Вот опытом он еще на научился делиться в таком тонком вопросе.

Делитесь историями рад буду почитать.
PS понимаю некоторым лень писать
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Ладно конкретный вопрос. Пока тут задам, может кто в курсе,

Код: Выделить всё

{
    "restaurants" : [
                      {
                        "restaurant_id": "1",
                        "name": "Swee Choon Tim Sum Restaurant Pte Ltd",
                        "address": "191 Jalan Besar, Singapore 208882",
                        "lat": "1.308290",
                        "lon": "103.856954",
                        "desc": "Restaurant for all ocassions.",
                        "email": "support@sweechoon.com",
                        "website": "www.sweechoon.com",
                        "amenities" : "Parking, Wifi, Credit Card, Lunch, Dinner, Breakfast, Take-out, Dine-in",
                        "food_rating": "3.5",
                        "price_rating": "4.5",
                        "featured" : "1",
                        "phone" : "+65 6225 7788",
                        "hours" : "6:00 pm - 6:00 am",
                        "created_at" : "0",
                        "category_id" : "1"
                      },

                      {
                        "restaurant_id": "2",
                        "name": "Jim Thompson",
                        "address": " Address: 45 Minden Road, Dempsey Hill, Singapore 248817 ",
                        "lat": "1.305573",
                        "lon": "103.815691",
                        "desc": "Good for children",
                        "email": "support@jimthompson.com",
                        "website": "www.jimthompson.com",
                        "amenities" : "Parking, Wifi, Credit Card, Lunch, Dinner, Breakfast, Take-out, Dine-in",
                        "food_rating": "4.1",
                        "price_rating": "3.1",
                        "featured" : "0",
                        "phone" : "+65 6475 6088",
                        "hours" : "6:00 pm - 6:00 am",
                        "created_at" : "0",
                        "category_id" : "1"
                      },
 

и

Код: Выделить всё

<data>
<restaurants>
<item>
<restaurant_id>1</restaurant_id>
<name>Swee Choon Tim Sum Restaurant Pte Ltd</name>
<address>191 Jalan Besar, Singapore 208882</address>
<lat>1.308290</lat>
<lon>103.856954</lon>
<desc>Restaurant for all ocassions.</desc>
<email>support@sweechoon.com</email>
<website>www.sweechoon.com</website>
<amenities>
Parking, Wifi, Credit Card, Lunch, Dinner, Breakfast, Take-out, Dine-in
</amenities>
<food_rating>3.5</food_rating>
<price_rating>4.5</price_rating>
<featured>1</featured>
<phone>+65 6225 7788</phone>
<hours>6:00 pm - 6:00 am</hours>
<created_at>1397823412</created_at>
<category_id>1</category_id>
</item>
 
два формата, как я понял у Androida и iOS приложений можно сделать так что они данные берут из таких вот файлов (xml и JSON),
получается достаточно лишь генерировать один раз и приложение само будет делать, например, выборку по городу.
Или тот же самый "Поиск" он может икать по XML или для каждого действия так же придется дописывать в yii свои актионы.
надеюсь суть вопроса понятно, т.е. программисту приложений понадобиться знания Yii или ему достаточно будет скормить XML или JSON файлы.
Говорим пока просто о каталог и просмотре каждого Itemsa

Думаю что более сложные действия могут потребовать написания актиона, например: комментирование, установка оценки, share, геолокация, регистрация.
Изображение
M.Bazaroff
Сообщения: 11
Зарегистрирован: 2014.05.16, 10:46

Re: Кто делал для сайта приложения для гаджетов

Сообщение M.Bazaroff »

Вам в любом случае понадобится два программиста (или один универсал)
1. Сделает API на сайте
2. Сделает обертку для апи под iOS и Андроид (тут кстати тоже возможно 2)

касательно форматов с любым из них программист справится не зависимо от оси
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Кто делал для сайта приложения для гаджетов

Сообщение diselop »

А почему бы не использовать http://phonegap.com/ для рендера на все мобильные устройства?
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

короче, я тут пошарил на интернету,
http://magora-systems.ru/%D0%BA%D0%B0%D ... framework/
нашел вот такую статью по api, она впринципе мне боле понятна и легче в восприятии
Я читал официальные АПИ там где каждому действию можно написать АПИ, но пока мне такой не нужен крутой АПИ,решил таким воспользоваться.
впринцыпе возможно подойдет для моего сайта, например, я планирую, простекие странички приложения,
Главная->Список ресторанов->Информация о ресторане

у меня ошибка: Не определено свойство "ApiController.response". выходит

ApiController.php

Код: Выделить всё

<?php

class ApiController extends Controller
{

   public function actionCall($method = null) {
                      if (method_exists($this, $method)) {
                                       $f = new ReflectionMethod($this, $method);
                                       $args = array();
                                       foreach ($f->getParameters() as $param) {
                                                         if (Yii::app()->request->getParam($param->name)) {
                                                                          $args += array($param->name => Yii::app()->request->getParam($param->name));
                                                         } else if (!$param->isDefaultValueAvailable()) {
                                                                          $this->response->setCode(Response::CODE_ERROR, Response::MSG_WRONG_INPUT);
                                                                          $this->response->send();
                                                                          Yii::app()->end();
                                                         } else {
                                                                          $args += array($param->name => $param->getDefaultValue());
                                                         }
                                       }
                                       call_user_func_array(array($this, $method), $args);
                      } else {
                                       $this->response->setCode(Response::CODE_NOT_FOUND, Response::MSG_METHOD_NOT_FOUND);
                                       $this->response->send();
                      }
    }

    private function getCityList() {
                  if ($citys = City::model()->findAll()) {
                                   $data = array();
                                   foreach ($citys as $city) {
                                                     $array = array('id' => $city->id_city, 'name' => $city->city_name_ru);
                                                     $data[] = $array;
                                   }
                                   $this->response->city = $data;
                                   $this->response->setCode(Response::CODE_OK, Response::MSG_OK);
                  } else {
                                   $this->response->setCode(Response::CODE_OK, Response::MSG_NO_DATA);
                  }
                  $this->response->send();
    }
    
    private function getCategoryList($countryId = null) {
                  $criteria = new CDbCriteria;
                  if (!empty($countryId)) {
                                   $criteria->addCondition('country_id = :country_id');
                                   $criteria->params['country_id'] = (int) $countryId;
                  }
                  if ($categories = Category::model()->findAll($criteria)) {
                                   $data = array();
                                   foreach ($categories as $category) {
                                                     $array = array('id' => $category->id, 'name' => $category->name);
                                                     $data[] = $array;
                                   }
                                   $this->response->categories = $data;
                                   $this->response->setCode(Response::CODE_OK, Response::MSG_OK);
                  } else {
                                   $this->response->setCode(Response::CODE_OK, Response::MSG_NO_DATA);
                  }
                  $this->response->send();
    }            
 
} 
Модель Api.php

Код: Выделить всё

<?php
class Api extends CActiveRecord
{
        private $data;  //Будем хранить данные ответа.
        private $code;  //HTTP код ответа сервера .
        private $message;  //Сообщение сервера.
        private $response;

        const MSG_OK = 'ok';
        const MSG_NO_DATA = 'no data';
        const MSG_WRONG_INPUT = 'wrong input data';
        const MSG_UNKNOWN_ERROR = 'Unknown error';
        const MSG_METHOD_NOT_FOUND = 'unknown method';
        const CODE_OK = 200;
        const CODE_ERROR = 500;
        const CODE_NOT_FOUND = 404;


        public function init() {
                      $this->response = new Response;
        }


        
        public function __set($name, $value) {
                      $this->data[$name] = $value;
        }
        public function __get($name) {
                      return isset($this->data[$name]) ? $this->data[$name] : '';
        }
        public function __isset($name) {
                      return isset($this->data[$name]);
        }
        public function __unset($name) {
                      if(isset($this->data[$name])){
                                       unset($this->data[$name]);
                      }
        }
        
        public function setCode($code, $message){
                      $this->code = $code;
                      $this->message = $message;
        }
        
        public function send(){
                      switch($this->code){
                                       case self::CODE_NOT_FOUND:
                                                         header('HTTP/1.0 404 Not Found');
                                                         break;
                                       case self::CODE_ERROR:
                                                         header('HTTP/1.0 500 Internal Error');
                                                         break;
                                       case self::CODE_OK:
                                                         header('HTTP/1.0 200 OK');
                                                         break;
                      }
                      $array = array(
                      'code' => $this->code,
                      'message' => $this->message,
                      );
                      if(!empty($this->data)){
                                       $array = array_merge($array, array('data' => $this->data));
                      }
                      echo json_encode($array);
        }
}
 
Я походу в коде что-то пропустил?!
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Решения, нет :((((
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Кто делал для сайта приложения для гаджетов

Сообщение mickgeek »

Зря Вы копируете, не разбираясь в том, что делаете.
Далее нам необходимо создать контроллер controllerApi, в котором будет формироваться список api-методов и происходить весь логический процесс.

Объявим приватное свойство response, в котором будем хранить объект, созданного нами класса Response.
Вы вместо класса Response создали класс Api, следовательно и объявлять в контроллере (не в модели) должны его, а не несуществующий Response.
Последний раз редактировалось mickgeek 2014.06.09, 18:00, всего редактировалось 1 раз.
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

:( да, ты прав, но выхода нет.
приходиться, калдовать, ну и спрашивать здесь если что то не до понимаю.
Честно сказать я документацию по программированию вообще не могу читать,
путаюсь в терминологии и синтаксисе, жалею об этом сильно :(
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

а может кто нибудь, еще раз подсказать,
где касяк поподробнее,
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Кто делал для сайта приложения для гаджетов

Сообщение mickgeek »

Касаемо ошибки о свойстве "ApiController.response":

Код: Выделить всё

<?php

class ApiController extends Controller
{
    private $api;

    public function init() {
        $this->api = new Api;
    }

   public function actionCall($method = null) {
        if (method_exists($this, $method)) {
            $f = new ReflectionMethod($this, $method);
            $args = array();
            foreach ($f->getParameters() as $param) {
                if (Yii::app()->request->getParam($param->name)) {
                    $args += array($param->name => Yii::app()->request->getParam($param->name));
                } else if (!$param->isDefaultValueAvailable()) {
                    $this->api->setCode(Api::CODE_ERROR, Api::MSG_WRONG_INPUT);
                    $this->api->send();
                    Yii::app()->end();
                } else {
                    $args += array($param->name => $param->getDefaultValue());
                }
            }
            call_user_func_array(array($this, $method), $args);
        } else {
            $this->api->setCode(Api::CODE_NOT_FOUND, Api::MSG_METHOD_NOT_FOUND);
            $this->api->send();
        }
    }

    private function getCityList() {
        if ($citys = City::model()->findAll()) {
            $data = array();
            foreach ($citys as $city) {
                $array = array('id' => $city->id_city, 'name' => $city->city_name_ru);
                $data[] = $array;
            }
            $this->api->city = $data;
            $this->api->setCode(Api::CODE_OK, Api::MSG_OK);
        } else {
            $this->api->setCode(Api::CODE_OK, Api::MSG_NO_DATA);
        }
        $this->api->send();
    }

    private function getCategoryList($countryId = null) {
        $criteria = new CDbCriteria;
        if (!empty($countryId)) {
            $criteria->addCondition('country_id = :country_id');
            $criteria->params['country_id'] = (int) $countryId;
        }
        if ($categories = Category::model()->findAll($criteria)) {
            $data = array();
            foreach ($categories as $category) {
                $array = array('id' => $category->id, 'name' => $category->name);
                $data[] = $array;
            }
            $this->api->categories = $data;
            $this->api->setCode(Api::CODE_OK, Api::MSG_OK);
        } else {
            $this->api->setCode(Api::CODE_OK, Api::MSG_NO_DATA);
        }
        $this->api->send();
    }
} 
Ваша задача узнать, что изменилось в контроллере. Сравнить со старым вариантом, перечитать ту статью и удалить ненужное из класса Api.
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Таблица "Api", упомянутая в записи active record класса "Api", не найдена в базе данных.
такая ошибка,
может из-за того что я ее расширил
class Api extends CActiveRecord

может просто class Api {
}
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Кто делал для сайта приложения для гаджетов

Сообщение mickgeek »

Верно. Можно переместить класс в папку "components". Файлы оттуда импортируются автоматически.
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Добил я этого API

Код: Выделить всё

{"code":200,"message":"ok","data":{"city":[{"id":"1","name":"\u0410\u043b\u043c\u0430\u0442\u044b","lat":"43.25076688189675"},{"id":"2","name":"\u0410\u0441\u0442\u0430\u043d\u0430","lat":"51.161906555333296"},{"id":"3","name":"\u0410\u0431\u0430\u0439","lat":"49.63422998072826"},{"id":"4","name":"\u0410\u043a\u0431\u0430\u043a\u0430\u0439","lat":null},{"id":"5","name":"\u0410\u043a\u0441\u0430\u0439","lat":null},{"id":"6","name":"\u0410\u043a\u0441\u0443\u043a\u0435\u043d\u0442","lat":null},
 
Ответ пришел в браузере такой.
Вопрос: Мне надо эти крякозябры обработать еще, через какой то JS_Decode (),
или эти крякозябры в приложении автоматически станут русскими буквами.
Изображение
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Кто делал для сайта приложения для гаджетов

Сообщение TranceSmile »

JSON::decode();
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

А один штрих Jason decode на стороне сервера обработать или на стороне приложения?
Изображение
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Кто делал для сайта приложения для гаджетов

Сообщение TranceSmile »

на стороне клиента.
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

TranceSmile, спасибо!
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Кто делал для сайта приложения для гаджетов

Сообщение asisdes »

Код: Выделить всё

$homepage = file_get_contents('http://cafe-bar.kz/api/GetCityList');
$obj = json_decode($homepage);
print $obj; 
Как правильно писать?
Это мой Джесон на выходе
{"code":200,"message":"ok","data":{"city":[{"id":"1","name":"\u0410\u043b\u043c\u0430\u0442\u044b","lat":"43.25076688189675"},

Такой просмотерщик ответа хочу написать, а то что там отдается не видно

Кстати, нафигачил часть API
http://cafe-bar.kz/api/ можете здесь посмотреть, однако вопрос у меня такой

http://cafe-bar.kz/api/getNewsList/cityId/1 - Список новостей для города с ID 1
А если новостей будет 10 000 к примеру, мне что 10 000 отдавать, походу здесь кость зарыта, так делать нельзя
в голову приходит добавлять page/1

http://cafe-bar.kz/api/getNewsList/cityId/1/page/1 ну, или 10
теперь вопрос, как это все должно выглядить например в критерии

Код: Выделить всё

$criteria = new CDbCriteria;
                  
                  if (!empty($cityId)) {
                                   $criteria->addCondition('t.city=:city');
                                   $criteria->params['city'] = (int) $cityId;
                  }
                  
                  if (!empty($title)) {
                                    $criteria->addSearchCondition('t.alias', $title, true);
                  } 

                  if (!empty($categoryId)) {
                                   $criteria->compare('news_categories.category_id', $categoryId);
                  }
                  $criteria->with = array('news_categories', 'news_place'); 
                  $criteria->together = true;
                  $criteria->order = 'if(news_place.featured=1, 0, 1), if(t.featured=1, 1, 2)'; // 'if(featured=1,0,1), if(featured=0,RAND(),title)'; //
                  
                  
                  if ($query = News::model()->findAll($criteria)) {
по хорошему мне еще наверное надо как-то общее количество page передать, типа
page 1-10
Изображение
Ответить