Дизайнер мне постоянно с вами не везет у вас там заговор против меня? Может в лог ошибок посмотришь может где косяк еще есть?
Да ну нафига? Надо научить ТС в логи смотреть public function getDate($birthdayStr) { $now = new DateTime(); $birthday = new DateTime($birthdayStr); return explode('|', $birthday->diff($now)->format('%y|%m|%d')); $date = $this->getDate($birthdayStr); $month = $data[1]; } // //////**///// public function getImageUrl() { //$month? What do you want from me? Вот что думает php global $APP_CONFIG; if($month > 0 && $month <= 1) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($month > 1 && $month <= 2) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($month > 2 && $month <= 4) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($month > 4 && $month <= 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($month > 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; } // end getImageUrl Добавлено спустя 1 минуту 59 секунд: Почитай про область видимости. Добавлено спустя 1 минуту 56 секунд: и про классы то же(((
Добрый вечер! Я вас первый раз вижу, молодой человек, ну какой заговор? =)))) Мне вот с программистами так же не везло)))) А лог я достать не могу... У меня хостер создал символическую ссылку... Папочку такую, фальшивую и я не только не могу выцепить хоть один лог, но и даже узнать где они на самом деле... Про классы и область видимости прочитаю. Если не пойму что-то, можно будет обратиться?) Простите, вот... Х( http://yadi.sk/d/LDgN63mTPr2QH
Отличный стих Есть хочу вспомнил народное творчество на стенах нашего универа там правда не так изыскано и не соблюдался стихотворный слог местами но тож за душу брало. Браво! Это было лирическое отступление А локально мучать скрипты что мешает? Ну я вообще то перешел в стан врага, питон понравился, но думаю чем могу помогу... Добавлено спустя 27 минут 8 секунд: Бухлоеж меня ваще убил Девушка у вас талант, обращайтесь я не смогу вам отказать Код (PHP): <?php class Pet extends ActiveTable { protected $table_name = 'user_pet'; protected $primary_key = 'user_pet_id'; private $_month = ''; protected $LOOKUPS = array( array( 'local_key' => 'pet_specie_id', 'foreign_table' => 'pet_specie', 'foreign_key' => 'pet_specie_id', 'join_type' => 'inner', ), array( 'local_key' => 'pet_specie_color_id', 'foreign_table' => 'pet_specie_color', 'foreign_key' => 'pet_specie_color_id', 'join_type' => 'inner', ), ); protected $RELATED = array( 'user' => array( 'class' => 'User', 'local_key' => 'user_id', 'foreign_key' => 'user_id', 'one' => true, ), ); /** * Get the full URL for this pet's image. * * @return string /////////////*извлекаю запись из бд - формат даты: 2014-05-06 11:27:28*///////////// /////////////*пытаюсь перевести полученную дату в mktime*///////////// //$happybirthday = date('Y-m-d H:i:s', mktime($year, $month, $day, $H, $i, $s)); ////echo happybirthday($happybirthday); // Количество лет, месяцев и дней, прошедших со дня рождения function happybirthday($birthdayStr) { $happybirthday = $this->getCreatedAt(); $now = new DateTime(); $birthday = new DateTime($birthdayStr); list($year, $month, $day) = explode('|', $birthday->diff($now)->format('%y|%m|%d')); $result = declination($year); $result .= declination($month); $result .= declination($day); return $result; } public function getDate($birthdayStr) { $now = new DateTime(); $birthday = new DateTime($birthdayStr); return explode('|', $birthday->diff($now)->format('%y|%m|%d')); $date = $this->getDate($birthdayStr); $this->_month = $data[1]; } // //////**///// public function getImageUrl() { global $APP_CONFIG; if($this->_month > 0 && $this->_month <= 1) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($this->_month > 1 && $this->_month <= 2) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($this->_month > 2 && $this->_month <= 4) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($this->_month > 4 && $this->_month <= 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($this->_month > 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; } // end getImageUrl /** * Make this its owner's active pet. * * @return bool **/ public function makeActive() { $user = $this->grabUser(); // Should never happen... if($user == null) { return false; } $user->setActiveUserPetId($this->getUserPetId()); $user->save(); return true; } // end public function makeActive /** * Add the appropriate amount to the pet's hunger level. * * @param integer $amount * @return bool **/ public function consume($amount) { $hunger = $this->getHunger() + $amount; if($hunger > $this->getMaxHunger()) { $hunger = $this->getMaxHunger(); } $this->setHunger($hunger); return $this->save(); } // end consume /** * Add the appropriate amount to the pet's happiness level. * * @param integer $amount * @return bool **/ public function play($amount) { $happy = $this->getHappiness() + $amount; if($happy > $this->getMaxHappiness()) { $happy = $this->getMaxHappiness(); } $this->setHappiness($happy); return $this->save(); } // end consume /** * Hackishly return the hunger level as a string. * * @hack * @return string **/ public function getHungerText() { $hunger = $this->getHunger(); if($hunger <= 2) return 'Истощение! Покормите!'; elseif($hunger > 2 && $hunger <= 4) return 'Сильный голод'; elseif($hunger > 4 && $hunger <= 6) return 'Небольшой голод'; elseif($hunger > 6 && $hunger <= 8) return 'Не голоден, но не против лакомства'; elseif($hunger > 8 && $hunger <= 12) return 'Сыт'; elseif($hunger > 12) return 'Обжора! Лопнет же!'; return 'error!'; } // end getHungerText /** * Hackishly return the happiness level as a string. * * @hack * @return string **/ public function getHappinessText() { $happy = $this->getHappiness(); if($happy <= 2) return 'В бешенстве! >8E'; elseif($happy > 2 && $happy <= 4) return 'Грустит и злится >:('; elseif($happy > 4 && $happy <= 6) return 'В печали :('; elseif($happy > 6 && $happy <= 8) return 'Нейтралитет :|'; elseif($happy > 8 && $happy <= 12) return 'Счастье :)'; elseif($happy > 12) return 'Счастье и радость! :D'; return 'error!'; } // end getHungerText /** * If it's time for the pet's attribute to drop, do it. * * @param integer $period_length The number of seconds that equals * one period. * @return bool **/ public function doDecrement($period_length=3600) { // It is time. if($this->getUnixtimeNextDecrement() <= time()) { // First time. if($this->getUnixtimeNextDecrement() == 0) { $interval = 1; } else { $interval = time() - $this->getUnixtimeNextDecrement(); $interval = floor($interval / $period_length); } return $this->decrementAttributes($interval,(time() + $period_length)); } // end time check // Nope, not time. return false; } // end doDecrement /** * Decrement a pet's hunger/happiness level by rand(1,3). * * @param int $periods The number of periods to decrement for. * @param int $next_time The next time to perform decremention at. * @return bool **/ protected function decrementAttributes($periods,$next_time) { // The DB should protected against negative values. $this->setHunger(($this->getHunger() - (rand(1,3) * $periods))); $this->setHappiness(($this->getHappiness() - (rand(1,3) * $periods))); $this->setUnixtimeNextDecrement($next_time); return $this->save(); } // end decrementAttributes } // end Pet ?> Попробуй. Если я правильно понял то в getDate ты получаешь нужную дату и ее используешь в getImageUrl. Соответственно getDate надо вызвать до getImageUrl.
Спасибо)))) Надеюсь на второе высшее смогу поступить на программирование... =) И тогда... и питоны и перлы... всё попробую. Х) Мне локальный сервер ставить запрещают...)))) Говорят так: "За***ла весь комп! Из-за тебя всё глючит!" Поэтому на фришке тестирую. Про область видимости вроде начало доходить.... Ну и прочла и начала полностью понимать что есть класс (во всём проблемном файле он один и весь код - это его туловище)... Но понять массивы эти сверху и что они несут так полностью и не смогла. Это же и есть этот... Zend_Db_Table, правильно? И как туда добавить ещё один массив грамотно, чтобы он нёс время создания питомца? Заметила, что вы уже отредактировали сообщение. Спасибо! Пошла ковырять! Заменила код, вашим... и ...^^ Фатальная ошибка. Белая, пустая страница :,( Этот файл проклят.... Кстати, логи появятся ровно через сутки. Такая вот дурацкая настройка у хостера... Буду думать дальше. И попробую а локалке поднять, пока никто не видит...
Ниче так бывает. Поставь xampp его даже на флешку ставить можно. Так вроде порешали делать через метод который написал romach? Если нет то да ковырять getCreatedAt(). Во всяком случае надо в логах смотреть тут чую просто проблема в синтаксисе, просто отладить надо.
я так понимаю что этот метод вернёт именно то, что в бд в поле CreatedAt живёт. что вроде верный путь.
Ну там много букаф некоторые я не осилил, поэтому доверимся твою мнению. Пойдем по этому пути. Пока что я вижу синтаксические ошибки и пробелы в знании как работать с классами. Добавлено спустя 7 минут 44 секунды: Код (PHP): public function getImageUrl() { global $APP_CONFIG; var_dump($this->getCreatedAt()); die; if($month > 0 && $month <= 1) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($month > 1 && $month <= 2) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($month > 2 && $month <= 4) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($month > 4 && $month <= 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($month > 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; } // end getImageUrl Что пишет при вызове getImageUrl ?
У меня перестал работать весь профиль персонажа и на его месте надпись: string(19) "2014-05-06 11:27:28" =) Я вам тоже в пм скинула адрес)
Перестал работать потому что там die который останавливает работу скрипта. Это та дата которая нужна? Тогда что бы получить месяц выполни Код (PHP): public function getImageUrl() { global $APP_CONFIG; $month = date('m', strtotime($this->getCreatedAt())); if($month > 0 && $month <= 1) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($month > 1 && $month <= 2) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($month > 2 && $month <= 4) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($month > 4 && $month <= 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($month > 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; } // end getImageUrl
Да! Это дата создания питомца! =) Сейчас попробую функцию =))) Если что, то отпишусь завтра. Поэтому спокойной ночи всем! Спасибо вам огромное, ребята! =)
Ура! Вариант условия от Смита рабочий! Теперь другая проблема)))) Нет счётчика, который вычисляет сколько месяцев прошло от времени создания пэта, условие показывает пока только сам месяц - 5ый. =) А надо чтобы было от 0 до 1, т.к. пету нет месяца. Вот =) Теперь точно всем приятных снов! Добавлено спустя 1 минуту 4 секунды: Жизни, конечно! )) Но меня гонят в люльку
теперь короче тебе надо понять, как ты хочешь считать время. Месяц - понятие растяжимое. В феврале мало дней, в другом месяце - много. Надо ли тебе вообще привязывать возраст пета к месяцам, не проще ли считать в сутках? Подумай. В сутках очень просто считать. $month = date('m', strtotime($this->getCreatedAt())); замени на $days = floor(strtotime($this->getCreatedAt()) / 24 * 60 * 60);
Вы правы! Действительно проще! Потому что я сейчас внедрила код вычисления в показ изображений и зайчонок мой оказался уже взрослым))) Почему-то месяц множится на 3... Вот как выглядит код сейчас - (теперь всё только в выводе картинки): Код (PHP): public function getImageUrl() { global $APP_CONFIG; $happybirthday = date('m', strtotime($this->getCreatedAt())); // Сегодняшняя дата $sec_now = time(); // Подсчитываем количество месяцев, лет for($time = $happybirthday, $month = 0; $time < $sec_now; $time = $time + date('t', $time) * 86400, $month++){ $rtime = $time; } $month = $month - 1; // Количество лет $year = intval($month / 12); // Количество месяцев $month = $month % 12; // Количество дней $day = intval(($sec_now - $rtime) / 86400); if($month > 0 && $month <= 1) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($month > 1 && $month <= 2) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($month > 2 && $month <= 4) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($month > 4 && $month <= 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($month > 9) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; } Сейчас попробую на дни переключить... =) Спасибо!
В общем я намутила какую-то странную вещь... Чувствую себя первоклашкой, пытающимся решить задачу с логарифмами какими-нибудь... Теперь условие возвращает только первое значение. Пытаюсь, в общем, сделать отсчёт по дням теперь... Х_х Почему переменная дней имеет значение - int(11)?( И что не так с циклом?( И... зря я, наверное, массив сделала... Код (PHP): public function getImageUrl() { global $APP_CONFIG; $birthday=date('Y m d',strtotime($this->getCreatedAt())); $data_b=array ( 1 => $year=date('Y',strtotime($this->getCreatedAt())), 2 => $month=date('m',strtotime($this->getCreatedAt())), 3 => $day=date('m',strtotime($this->getCreatedAt())), ); $day = date('d', strtotime($this->getCreatedAt())); $sec_now = time(); for($time = $birthday, $data_b[2] = 0; $time < $sec_now; $time = $time + date('t', $time) * 86400, $data_b[2]++){ $rtime = $time; } $month = $data_b[2] - 1; $year = intval($data_b[2] / 12); $month = $data_b[2] % 12; $day = intval(($sec_now - $rtime) / 86400); global $APP_CONFIG; if($day > 0 && $day <= 31) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/{$this->getColorImg()}"; elseif($day > 31 && $day <= 62) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."2"."{$this->getColorImg()}"; elseif($day > 62 && $day <= 124) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."3"."{$this->getColorImg()}"; elseif($day > 124 && $day <= 279) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."4"."{$this->getColorImg()}"; elseif($day > 279) return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/"."5"."{$this->getColorImg()}"; ; }
А если сначала подумать, а потом писать? =) это очень важно. Добавлено спустя 10 минут 24 секунды: Код (PHP): public function getImageUrl() { global $APP_CONFIG; $created = strtotime($this->getCreatedAt()); $days = floor((time() - $created) / 86400); $stage = 0; if ($days > 279) { $stage = 4; } elseif ($days > 124) { $stage = 3; } elseif ($days > 62) { $stage = 2; } elseif ($days > 31) { $stage = 1; } return "{$APP_CONFIG['public_dir']}/resources/pets/{$this->getRelativeImageDir()}/$stage.{$this->getColorImg()}"; } Именовать картинки надо с нуля. Число отделяется точкой! т.е. имя выглядит так: 0.pikachu.png усё. только не надо ничего менять на свой стиль. число должно быть всегда, так будет проще для жизни. честно говоря, если картинки разных петов живут в разных папках, я вообще не вижу смысла иметь им разные названия.
Ну не правда ваша, я всю голову сломала((( Какой стиль...))) Таких как я справедливо называют если не нубом, то быдлокодером)))) Стиль пьяного тычка в небо)))) Иерархия папок у петов: Петы->Раса->0.вид1.jpg __________->2.вид1.jpg _________ ->3.вид1.jpg _________ ->и т.д. Нумерация вначале обозначает возраст: малыш - 0, ребёнок - 1, подросток - 2 и т.д. Нумерация в конце - вид. Ща попробую в общем ваш вариант, спасибо большое))))))
Ура! Огромное спасибо Игорю, Смиту и Ромычу!!!! Скрипт работает. Это моя дырявая бошка виновата, простите Игорь... =) У меня в бд стоял просто 2013 год. Я успела поковырять БД, чтобы проверить скрипт и забыла сменить обратно.... Всем ребятам, кто мне помогал, выслала в ЛС свои контакты. Если нужна будет помощь с вёрсткой, дизайном или нарисовать рисунок надо будет - ОБРАЩАЙТЕСЬ, не стесняйтесь!!!! А ещё я надеюсь вы не против, если ваши ники будут в игрушке висеть на станичке благодарностей, вместе с ссылкой на этот замечательный форум. И вообще я у вас тут поселюсь, мне понравилось... Тоже буду помогать по разделу HTML/CSS =)