Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 544

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/comment-template.php on line 1745

Deprecated: wp_getimagesize(): Implicitly marking parameter $image_info as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/media.php on line 5072

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 960

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 980

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 992

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 1003

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 199

Deprecated: Jetpack::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/class.jetpack.php on line 934

Deprecated: Automattic\Jetpack\Connection\Manager::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 123

Deprecated: Creation of dynamic property Automattic\Jetpack\Connection\Manager::$error_handler is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 93

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Instagram_Gallery::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-instagram-gallery.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Mailchimp::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php on line 17

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 21

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 22

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php on line 20

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 24

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Subscribers::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php on line 15

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Publicize_UI::$in_jetpack is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/publicize.php on line 53

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php on line 195

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php on line 56

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 130

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 131

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 135

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 136

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 137

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 219

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 220

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 227

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 229

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 231

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 248

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 249

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 267

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 268

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 270

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 271

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 273

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 275

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property WPCOM_Widget_Goodreads::$shelves is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/goodreads.php on line 33

Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/script-loader.php on line 333

Deprecated: Creation of dynamic property WP_Block_Type::$skip_inner_blocks is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property Jetpack_Shortcode_Unavailable::$shortcodes is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/shortcodes/unavailable.php on line 19

Deprecated: Calling get_class() without arguments is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-http.php on line 328

Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property Jetpack_Carousel::$localize_strings is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/carousel/jetpack-carousel.php on line 353

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Calling get_class() without arguments is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-http.php on line 328

Deprecated: http_build_query(): Passing null to parameter #2 ($numeric_prefix) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Transport/cURL.php on line 345

Deprecated: Requests_Cookie::parse_from_headers(): Implicitly marking parameter $origin as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie.php on line 439

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673
{"id":39,"date":"2014-03-03T23:42:45","date_gmt":"2014-03-04T01:42:45","guid":{"rendered":"http:\/\/inovacaosistemas.com.br\/wp\/?p=39"},"modified":"2014-12-27T08:56:16","modified_gmt":"2014-12-27T10:56:16","slug":"ajax-com-yeapf","status":"publish","type":"post","link":"http:\/\/www.yeapf.com\/wp\/?p=39","title":{"rendered":"Ajax com YeAPF"},"content":{"rendered":"

Pretendo deixar cada uma das postagens o mais simples poss\u00edvel.\u00a0 Mas, n\u00e3o \u00e9 poss\u00edvel proceder com este se antes voc\u00ea n\u00e3o instalou e configurou seu ambiente de desenvolvimento e o YeAPF.\u00a0 Este post<\/a> (http:\/\/inovacaosistemas.com.br\/wp\/?p=25<\/a>) lhe pode ajudar a fazer isso, caso n\u00e3o o tenha feito ainda.<\/p>\n

Introdu\u00e7\u00e3o<\/h2>\n

Nos prim\u00f3rdios da web l\u00e1 em 1989, sir Tim Berners-Lee<\/a> entendia com profunda clareza e proje\u00e7\u00e3o futur\u00edstica que vincular documentos em formato mais ou menos livre era a melhor forma de espalhar conte\u00fado pela internet para os simples mortais.<\/p>\n

Isso nos levou a um conjunto imenso de p\u00e1ginas est\u00e1ticas vinculadas com outras que est\u00e1 muito bem para informa\u00e7\u00e3o que n\u00e3o muda mas que n\u00e3o serve muito na hora de fazer aplicativos em que a din\u00e2mica da coisa \u00e9 t\u00e3o importante quanto o seu conte\u00fado.<\/p>\n

O padr\u00e3o Ajax <\/a>surge como uma resposta para o problema de ter que trazer a p\u00e1gina inteira toda vez que o usu\u00e1rio clicar em algum conte\u00fado.\u00a0 Agora, em lugar de a p\u00e1gina ter que ser requisitada, produzida e renderizada basta s\u00f3 trazer o conte\u00fado e aplicar esse conte\u00fado a um esquema ou formul\u00e1rio j\u00e1 pronto para ser visualizada pelo usu\u00e1rio.\u00a0 Isso faz com que a experi\u00eancia de navega\u00e7\u00e3o se torne mais suave e nos libera de uso de preciosos ciclos de rel\u00f3gio do servidor, do cliente e da paci\u00eancia do usu\u00e1rio.<\/p>\n

Simplificando muito as coisas, REST <\/a>\u00e9 mais ou menos a mesma coisa s\u00f3 que nos permite direcionar nossa requisi\u00e7\u00e3o para um outro servidor diferente do que hospeda nosso script\/p\u00e1gina, por exemplo.\u00a0 Claro, os puristas de plant\u00e3o v\u00e3o me esganar se me encontram na rua, mas acho essa simplifica\u00e7\u00e3o necess\u00e1ria e suficiente para um programador mortal entender do que se trata e os links oferecidos somado \u00e0 sapi\u00eancia que repousa dentro da cachola que alguns levam sobre os ombros, lhe permitir\u00e3o fazer melhor distin\u00e7\u00e3o<\/p>\n

A coisa pr\u00e1tica<\/h2>\n

Se voc\u00ea j\u00e1 conseguiu por para rodar o YeAPF e fez seu primeiro aplicativo com ele, ent\u00e3o podemos nos estender em dois exemplos que mostrar\u00e3o a simplicidade de desenho do YeAPF e como ele coloca ao alcance do programador o Ajax e o REST de forma simples e segura.<\/p>\n

O que faremos a seguir pretende como sempre, ser um roteiro bem b\u00e1sico para chegar ao fim desejado.\u00a0 Neste caso demonstrar o uso das interfaces Ajax e REST.\u00a0 Nessa ordem.<\/p>\n

O roteiro ser\u00e1 o seguinte: 1) Criar uma pasta para nosso projeto e configurar YeAPF nessa pasta, 2) Criar os tr\u00eas arquivos que nosso projeto precisa. 3) Aprender com o exemplo<\/p>\n

1) Criando uma pasta para o projeto<\/h2>\n

Seguindo a ideia dos primeiros passos<\/a>, a pasta principal \u00e9 \/var\/www e nosso projeto estar\u00e1 sob ela e a chamaremos testeAjax<\/em>.\u00a0 Ent\u00e3o o nome completo \u00e9 \/var\/www\/testeAjax<\/em>.<\/p>\n

$ cd \/var\/www\r\n$ mkdir -m 0777 testeAjax<\/pre>\n

Com a pasta pronta, copiamos o que necessitamos do YeAPF para construir nosso aplicativo<\/p>\n

$ cd \/var\/www\/testeAjax\r\n$ cp \/var\/www\/YeAPF\/appSkeleton\/configure.php .\r\n$ cp \/var\/www\/YeAPF\/appSkeleton\/query.php .\r\n$ cp \/var\/www\/YeAPF\/appSkeleton\/e_body.xml .<\/pre>\n

Caso voc\u00ea j\u00e1 tenha o sgug.ini<\/em> do primeiro aplicativo, copie ele para a pasta tamb\u00e9m, se n\u00e3o copie o yeapf.db.ini<\/em> do YeAPF\/appSkeleton <\/em>para a pasta e modifique ele.\u00a0 Depois disso (qualquer um dos dois passos escolhidos) rode o configure.php<\/em> desde seu navegador como sempre: http:\/\/localhost\/testeAjax\/configure.php<\/a><\/p>\n

Feito isso, voc\u00ea deve ter o sgug.ini<\/em> (se n\u00e3o tinha), a pasta lock<\/em> a pasta logs<\/em>, a pasta .config<\/em> e o arquivo yeapf.php<\/em> Se voc\u00ea n\u00e3o tem isso, ou obteve um erro na hora de rodar o configure.php, revise o post de primeiros passos novamente at\u00e9 chegar num resultado satisfat\u00f3rio.<\/p>\n

2) Criar os tr\u00eas arquivos que nosso projeto precisa<\/h2>\n

Iremos usar tr\u00eas arquivos no nosso projeto: exemploAjax.php<\/em> que \u00e9 nosso ponto de entrada, i_exemploAjax.html<\/em> que \u00e9 nosso arquivo principal HTML e meuEvento.php<\/em> para processar o \u00fanico evento que iremos ter.<\/p>\n

Comecemos por exemploAjax.php<\/em><\/strong><\/p>\n

<?php\r\n  \/\/ fazer uso do 'yeapf.php' que o configure.php gerou\r\n\u00a0 require_once \"yeapf.php\";\r\n\r\n  \/\/ processar o arquivo 'i_exemploAjax.html'\r\n\u00a0 processFile<\/strong><\/span>('i_exemploAjax');\r\n?><\/pre>\n

Depois i_exemploAjax.html<\/strong><\/em><\/p>\n

<style>\r\n\u00a0 tr:nth-child(odd)\u00a0 { background:#DADADA; }\r\n\u00a0 tr:nth-child(even) { background:#B7DDF9; }\r\n<\/style>\r\n\r\n<script src='\/YeAPF\/yloader.js'><\/script>\r\n<script src='\/YeAPF\/ycomm-ajax.js'><\/script>\r\n\r\n<table id=minhaTabela>\r\n<\/table>\r\n\r\n<script>\r\n\u00a0 ycomm.invoke<\/strong><\/span>(\r\n\u00a0\u00a0\u00a0 'meuEvento',\r\n\u00a0\u00a0\u00a0 'listarAutores',\r\n\u00a0\u00a0\u00a0 {},\r\n\u00a0\u00a0\u00a0 function (status, err, data) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ycomm.dom.fillElement<\/strong><\/em>('minhaTabela',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 );\r\n<\/script><\/pre>\n

e finalmente meuEvento.php<\/strong><\/em><\/p>\n

<?php\r\n\u00a0 function qmeuEvento($a) {\r\n    \/\/ indico que quero usar nomes nas colunas\r\n    \/\/ na hora de enviar o resultado para o cliente\r\n\u00a0\u00a0\u00a0 $useColNames = true;\r\n\r\n    \/\/ vou usar somente 20 linhas no resultado\r\n    \/\/ poderia indicar -1 para que o resultado \r\n    \/\/ completo fosse para o cliente\r\n\u00a0\u00a0\u00a0 $countLimit=20;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ converto meus par\u00e2metros de entrada\r\n    \/\/ em vari\u00e1veis locais\r\n    \/\/ (Neste exemplo n\u00e3o estou enviando par\u00e2metros)\r\n\u00a0\u00a0\u00a0 extract(xq_extractValuesFromQuery<\/span><\/strong>());\r\n\r\n    \/\/ crio um string com o comando SQL\r\n    \/\/ que me permitir\u00e1 extrair os resuldados\r\n    \/\/ do meu banco de dados\r\n\u00a0\u00a0\u00a0 $ret=\"SELECT a.*, u.nome as nomeUF\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FROM autores a\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 left join ufs u\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 on u.uf=a.ufNascimento\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 order by nome\";\r\n\r\n    \/\/ gero a sa\u00edda do jeito que o query.php\r\n    \/\/ precisa receber.\r\n\u00a0\u00a0\u00a0 xq_produceReturnLines<\/span><\/strong>($ret, $useColNames, $countLimit);\r\n\r\n\u00a0 }\r\n?><\/pre>\n

Tentamos manter o exemplo o mais simples e funcional poss\u00edvel.\u00a0 Ent\u00e3o ele \u00e9 pouco mais do que uma estrutura de arame em que ficam claras as partes que o comp\u00f5em.\u00a0 Para maximizar a compreens\u00e3o, marcamos com sublinhado e negrito<\/span><\/strong> as chamadas \u00e0s fun\u00e7\u00f5es PHP que s\u00e3o do YeAPF.\u00a0 Isso facilita as coisas na hora de procurar ajuda na internet.\u00a0 Tudo o que n\u00e3o estiver marcado, \u00e9 PHP e voc\u00ea pode achar informa\u00e7\u00e3o abundante no pr\u00f3prio site da PHP.\u00a0 O mesmo vale para o javascript.<\/p>\n

\"exemploAjax01\"<\/a>Como dissemos, o ponto de entrada \u00e9 no exemploAjax.php<\/em>, ent\u00e3o, chame ele para ver como se comporta: http:\/\/localhost\/testeAjax\/exemploAjax.php<\/a><\/p>\n

Se tudo deu certo, sua tela vai parecer-se com a da esquerda.\u00a0 Digo parecer-se porque voc\u00ea vai ter umas colunas deslocadas e n\u00e3o vai ter t\u00edtulos nelas.<\/p>\n

3) Aprendendo com o exemplo<\/h2>\n

Um passo a passo dos acontecimentos seria como segue:<\/p>\n

    \n
  1. O usu\u00e1rio abre o endere\u00e7o do ponto de entrada<\/li>\n
  2. O servidor de http (no caso o apache) repara que se trata de um arquivo .PHP e o repassa ao interprete de dita linguagem.<\/li>\n
  3. O script exemploAjax.php<\/em> \u00e9 executado cuja \u00faltima linha utiliza o YeAPF para processar o arquivo i_exemploAjax.html<\/em><\/li>\n
  4. Como este arquivo n\u00e3o tem nada de especial, ele \u00e9 repassado do jeito que est\u00e1 para o apache que por sua vez o devolve ao cliente que come\u00e7ou a chamada.<\/li>\n
  5. Uma vez do lado do cliente, dois scripts s\u00e3o requisitados ao mesmo servidor de origem: yloader.js<\/em> e ycomm-ajax.js <\/em><\/li>\n
  6. Ap\u00f3s isso, o script que est\u00e1 no final \u00e9 chamado (ycomm.invoke( … )<\/strong>) que por sua vez volta a invocar o servidor, desta vez usando o query.php<\/em> do YeAPF<\/li>\n
  7. O query<\/em> faz seu dever de casa e carrega o script meuEvento.php<\/em> que cont\u00eam uma fun\u00e7\u00e3o chamada qmeuEvento()<\/em> que processa a chamada realizada pelo script no html<\/li>\n
  8. O query.php<\/em> retoma o controle e gera um arquivo tempor\u00e1rio .xml usando o e_body.xml que o devolve ao cliente.<\/li>\n
  9. O cliente (no caso o pr\u00f3prio ycomm<\/em>) recebe o retorno e preenche a tabela chamada minhaTabela<\/em> usando a fun\u00e7\u00e3o ycomm.dom.fillElement()<\/em><\/li>\n<\/ol>\n

    Qualquer iniciado reparar\u00e1 que usamos muitos mais passos que na primeira vers\u00e3o do post anterior.\u00a0 Por\u00e9m h\u00e1 algumas vantagens em fazer deste jeito.<\/p>\n

      \n
    1. A sa\u00edda do servidor \u00e9 mais curta o que significa menos tempo de processamento e (principalmente) menos tr\u00e1fego na rede.<\/li>\n
    2. Esta sa\u00edda \u00e9 tamb\u00e9m mais limpa o que significa que a manutenibilidade do c\u00f3digo \u00e9 maior o que me garante mais tempo de vida \u00fatil do mesmo.<\/li>\n
    3. Os dados est\u00e3o claramente separados da interface o que me ajuda na reusabilidade do c\u00f3digo<\/li>\n
    4. A sensa\u00e7\u00e3o de velocidade do usu\u00e1rio \u00e9 maior.\u00a0 Isto porque o ycomm<\/em> faz seu processamento concomitantemente com o carregamento do DOM<\/a>.\u00a0 Isto n\u00e3o \u00e9 uma caracter\u00edstica \u00fanica do YeAPF, o Ajax tem duas formas de opera\u00e7\u00e3o e uma delas \u00e9 a assincr\u00f4nica que \u00e9 a que usamos aqui.<\/li>\n<\/ol>\n

      3.a) Melhorando o c\u00f3digo<\/h3>\n

      Vamos fazer duas altera\u00e7\u00f5es no c\u00f3digo do html para ver como isso afeta o nosso aplicativo.\u00a0 As duas altera\u00e7\u00f5es s\u00e3o cumulativas.\u00a0 Primeiro colocaremos t\u00edtulos nas colunas da tabela.\u00a0 Ela ficar\u00e1 assim:<\/p>\n

      <table id=minhaTabela>\r\n\u00a0 <thead<\/strong>>\r\n\u00a0\u00a0\u00a0 <tr<\/strong>>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <th<\/strong>>Nome<\/th<\/strong>>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <th<\/strong>>Estilo<\/th<\/strong>>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <th<\/strong> colspan=3>Nascimento<\/th<\/strong>>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <th<\/strong>>Falecimento<\/th<\/strong>>\r\n\u00a0\u00a0\u00a0 <\/tr<\/strong>>\r\n\u00a0 <\/thead<\/strong>>\r\n\u00a0 <tbody><\/tbody>\r\n<\/table><\/pre>\n

      Rode e ver\u00e1 como a tabela agora possui t\u00edtulos.\u00a0 Por\u00e9m, agora os dados n\u00e3o coincidem com os t\u00edtulos e continuamos com o problema de algumas colunas vazias.\u00a0 Isso \u00e9 assim, porque no banco de dados algumas colunas est\u00e3o de fato vazias e quando s\u00e3o envelopadas, s\u00e3o descartadas.<\/p>\n

      A forma mais simples de resolver isso \u00e9 indicar quais s\u00e3o as colunas e em que ordem elas v\u00e3o.\u00a0 Nosso script ent\u00e3o fica da seguinte forma:<\/p>\n

      <script>\r\n\u00a0 var minhasColunas = [ 'nome', 'estiloPrincipal', \r\n                        'dataNascimento', 'localNascimento', \r\n                        'nomeUF', 'dataFalecimento' ];<\/strong>\r\n\u00a0 ycomm.invoke(\r\n\u00a0\u00a0\u00a0 'meuEvento',\r\n\u00a0\u00a0\u00a0 'listarAutores',\r\n\u00a0\u00a0\u00a0 {},\r\n\u00a0\u00a0\u00a0 function (status, err, data) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ycomm.dom.fillElement('minhaTabela',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data,<\/strong>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { columns: minhasColunas }<\/strong>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 );\r\n<\/script><\/pre>\n

      Repare como o vetor minhasColunas<\/em> \u00e9 passado como argumento para a fun\u00e7\u00e3o ycomm.dom.fillElement()<\/em>.\u00a0 Ele nada mais \u00e9 do que um simples vetor contendo os nomes das colunas.\u00a0 Se tudo der certo, voc\u00ea agora est\u00e1 de posse de uma tela bastante similar \u00e0 mostrada no inicio.<\/p>\n

      Estando tudo certo, vamos agora melhorar ainda mais para mostrarmos a coluna de data de nascimento formatada no padr\u00e3o que usamos em terras tupiniquins ( e charruas, mapuches, ibericas, etc) ou seja dd\/mm\/yyyy.<\/p>\n

      Altere o HTML para que minhasColunas fique definido da seguinte maneira:<\/p>\n

      \u00a0 var minhasColunas = [ 'nome', 'estiloPrincipal',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'calc_dtNasc', 'localNascimento',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'nomeUF', 'dataFalecimento' ];<\/pre>\n

      E o meuEvento.php<\/em> para que fique assim:<\/p>\n

      <?php\r\n  \/\/ fun\u00e7\u00e3o que ser\u00e1 chamada em cada linha de dados\r\n  \/\/ e formatar\u00e1 a data\r\n\u00a0 function calc_dtNasc($dados) {\r\n\u00a0\u00a0\u00a0 return dataFormatada<\/span><\/strong>($dados['dataNascimento']);\r\n\u00a0 }\r\n\r\n\u00a0 function qmeuEvento($a) {\r\n\u00a0\u00a0\u00a0 $useColNames = true;\r\n\u00a0\u00a0\u00a0 $countLimit=20;\r\n\u00a0\u00a0\u00a0 $ret='';\r\n\u00a0\u00a0\u00a0 extract(xq_extractValuesFromQuery<\/span><\/strong>());\r\n\r\n\u00a0\u00a0\u00a0 $ret=\"SELECT a.*, u.nome as nomeUF, null as calc_dtNasc<\/strong>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FROM autores a\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 left join ufs u\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 on u.uf=a.ufNascimento\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 order by nome\";\r\n\r\n\u00a0\u00a0\u00a0 xq_<\/span>produceReturnLines<\/span><\/strong>($ret, $useColNames, $countLimit);\r\n\r\n\u00a0 }\r\n?><\/pre>\n

      Repare que acrescentamos um campo ficticio ‘calc_dtNasc<\/em>‘ que coincide com a exist\u00eancia de uma fun\u00e7\u00e3o com o mesmo nome.\u00a0 Esta fun\u00e7\u00e3o chama dataFormatada()<\/em> que \u00e9 uma anacronismo e n\u00e3o estar\u00e1 presente a partir da 0.9.x mas resolve nosso problema.\u00a0 Ela pega o formato interno (yyyymmdd) ISO 8601 e o transforma para o formato franc\u00eas dd\/mm\/yyyy<\/p>\n

      calc_dtNasc<\/em> aparece ent\u00e3o em tr\u00eas lugares: no vetor que define as colunas da tabela a ser mostrada, como fun\u00e7\u00e3o global e no comando SQL que montar\u00e1 os dados.<\/p>\n

      3.b) Invoca\u00e7\u00e3o ao beijo de Ariadna<\/h3>\n

      Ariadna \u00e9 a musa inspiradora de Mastropiero em um show de Les Luthiers: Mastropiero que nunca<\/a> e \u00e9 intraduz\u00edvel ao portugu\u00eas e em alguns casos ao pr\u00f3prio espanhol.\u00a0 Mas tudo bem, o lance \u00e9 assim: Ariadna \u00e9 invocada e o cantor recebe um beijo (ser\u00e1?)<\/p>\n

      Com YeAPF h\u00e1 algumas invoca\u00e7\u00f5es tamb\u00e9m.\u00a0 O lado cliente do seu aplicativo invoca<\/em> o servidor que por sua vez responde com alguns resultados (ser\u00e1?)<\/p>\n

      O ycomm.invoke()<\/em> recebe no m\u00ednimo dois par\u00e2metros: s<\/strong> e a<\/strong>.\u00a0 O trip\u00e9 que o paradigma de programa\u00e7\u00e3o YeAPF prop\u00f5e est\u00e1 composto de s<\/strong> ou sujeito (subject), a<\/strong> ou a\u00e7\u00e3o (action) e u<\/strong> que representa a sess\u00e3o do usu\u00e1rio (user).\u00a0 E o representamos assim: (s, a, u).\u00a0 No nosso exemplo, o a<\/strong> n\u00e3o est\u00e1 sendo nem usado pois h\u00e1 s\u00f3 uma a\u00e7\u00e3o sendo realizada, mas como ele n\u00e3o pode faltar, colocamos ele com a melhor cara poss\u00edvel.\u00a0 J\u00e1 o s<\/strong> \u00e9 imprescind\u00edvel (postagens posteriores mostrar\u00e3o que n\u00e3o \u00e9 assim, mas, vamos l\u00e1) e define o nome do .php (mais uma barbaridade no futuro) e a fun\u00e7\u00e3o a ser chamada.<\/p>\n

      Assim sendo, por ser s<\/strong> ‘meuEvento’ tenho ent\u00e3o um .PHP chamado meuEvento.php<\/em> e uma fun\u00e7\u00e3o chamada qmeuEvento()<\/em>. A letra ‘q’ no inicio (prefixo) denota o ponto de entrada do evento, isto \u00e9, ele \u00e9 chamado pelo query.php<\/em>.\u00a0 Ou seja, veio de um ycomm.invoke<\/em>.\u00a0 Os outros prefixos s\u00e3o ‘f’ para preprocessamento, ‘r’ para REST, ‘w’ para WebSocket ( e REST multiplexado ), e ‘g’ para gr\u00e1ficos.\u00a0 Exite tamb\u00e9m o prefixo ‘c’ mas atende a outro padr\u00e3o que analisaremos em outro momento.<\/p>\n

      3.c) Botando nome nas crian\u00e7as<\/h3>\n

      A regra (que n\u00e3o \u00e9 r\u00edgida) para nomear um s<\/strong> \u00e9 simples: use ao menos um substantivo como em ‘evento<\/em><\/a>‘.\u00a0 J\u00e1 para a<\/strong> \u00e9 de uma simplicidade similar: use ao menos um verbo como em ‘listar<\/em><\/a>‘.\u00a0 Para os que faltaram ao prim\u00e1rio, o s<\/strong> representa coisas e o a<\/strong> a\u00e7\u00f5es.\u00a0 Agora n\u00e3o s\u00f3 os programadores me esganam mas tamb\u00e9m os professores de l\u00edngua portuguesa.\u00a0 T\u00e1, o lance \u00e9 manter as coisas bem simples.\u00a0 Entendo que o bin\u00f4mio (s,a) \u00e9 a menor unidade para representar um evento \u00fanico no seu projeto e ao termos um trip\u00e9 (oh mudan\u00e7a de ilustra\u00e7\u00e3o no meio da frase) com s<\/strong>, a<\/strong> e u<\/strong> temos um modelo seguro de eventos.\u00a0 Depois vamos a ver que podemos restringir o acesso a este ou aquele evento segundo os direitos do usu\u00e1rio que est\u00e1 conectado.<\/p>\n

      A ideia \u00e9 pensar no pr\u00f3ximo sempre. No pr\u00f3ximo<\/em> bug que voc\u00ea precisar\u00e1 exterminar. No pr\u00f3ximo<\/em> programador que pegar seu c\u00f3digo.\u00a0 No pr\u00f3ximo<\/em> semestre em que voc\u00ea vai ter que ver seu pr\u00f3prio c\u00f3digo novamente.\u00a0 No pr\u00f3ximo<\/em> empregador que vai querer ver seu jeito de codificar (isso existe?).\u00a0 Enfim, brincadeiras \u00e0 parte os programadores temos a mania de acharmos que nosso c\u00f3digo \u00e9 3I: Inquebr\u00e1vel, Imperecedouro, Infal\u00edvel. E a verdade \u00e9 que erramos mais do que acertamos.\u00a0 Ent\u00e3o a ideia por tr\u00e1s do trip\u00e9 \u00e9 eliminar a elabora\u00e7\u00e3o de uma nova e mais perfeita roda redonda. Enfim: simplifique, 1) identifique seus eventos pensando no pr\u00f3ximo\u00a0 2) utilize sempre que poss\u00edvel um verbo para o\u00a0a<\/strong> e um substantivo para o\u00a0s<\/strong>. 3) por mais de que pare\u00e7a uma camisa de for\u00e7a ela \u00e9 linda e j\u00e1 j\u00e1 voc\u00ea se acostuma com ela.<\/p>\n

       <\/p>\n

       <\/p>\n","protected":false},"excerpt":{"rendered":"

      Pretendo deixar cada uma das postagens o mais simples poss\u00edvel.\u00a0 Mas, n\u00e3o \u00e9 poss\u00edvel proceder com este se antes voc\u00ea n\u00e3o instalou e configurou seu ambiente de desenvolvimento e o YeAPF.\u00a0 Este post (http:\/\/inovacaosistemas.com.br\/wp\/?p=25) lhe pode ajudar a fazer isso, caso n\u00e3o o tenha feito ainda. Introdu\u00e7\u00e3o Nos prim\u00f3rdios da web l\u00e1 em 1989, sir […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-D","jetpack-related-posts":[{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":39,"position":0},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":328,"url":"http:\/\/www.yeapf.com\/wp\/?p=328","url_meta":{"origin":39,"position":1},"title":"Criando um aplicativo YeAPF usando a linha de comandos","date":"janeiro 31, 2017","format":false,"excerpt":"Um aplicativo YeAPF pode ser criado de forma simples copiando manualmente o conteudo do esqueleto apropriado dentro da pasta do seu aplicativo. Por\u00e9m, devemos reconhecer que \u00e9 um processo muito artesanal. YeAPF pode ser instalado como um conjunto de ferramentas desde a vers\u00e3o 0.7.x e entre as ferramentas h\u00e1 uma\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":181,"url":"http:\/\/www.yeapf.com\/wp\/?p=181","url_meta":{"origin":39,"position":2},"title":"Como utilizar um mesmo c\u00f3digo em Desktop, Mobile e Web","date":"dezembro 26, 2014","format":false,"excerpt":"O Nirvana do programador O nirvana de todo programador \u00e9 quase com certeza ter um \u00fanico c\u00f3digo para ser utilizado em quantas plataformas seja poss\u00edvel. Isso tem muita vantagens, entre elas n\u00e3o limitar o campo de escolha do cliente e se preocupar uma \u00fanica vez com o c\u00f3digo. Para eliminar\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2019\/05\/work-731198_1920.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":91,"url":"http:\/\/www.yeapf.com\/wp\/?p=91","url_meta":{"origin":39,"position":3},"title":"Aplicativos mono p\u00e1gina","date":"mar\u00e7o 14, 2014","format":false,"excerpt":"Aplicativos que usam s\u00f3 uma p\u00e1gina t\u00eam um lugar assegurado no desenvolvimento de software atual e futuro. Bem feitos s\u00e3o elegantes e f\u00e1ceis de manter. Tamb\u00e9m s\u00e3o uma m\u00e3o na roda na hora de fazer um aplicativo que funcione tanto em desktop como em mobile. Para construirmos um aplicativo com\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5,"url":"http:\/\/www.yeapf.com\/wp\/?p=5","url_meta":{"origin":39,"position":4},"title":"Migrando bancos de dados com ydbmigrate","date":"janeiro 10, 2014","format":false,"excerpt":"Desenvolver um aplicativo implica em ter um bom banco de dados, mas responder rapidamente a uma migra\u00e7\u00e3o estrutural \u00e9 mais um pesadelo do que uma noite bem dormida. Dentre as ferramentas que o YeAPF disp\u00f5e se encontra o ydbmigrate. Esta ferramenta nos permite exportar e importar dados de varias fontes\u2026","rel":"","context":"Em \"firebird\"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":426,"url":"http:\/\/www.yeapf.com\/wp\/?p=426","url_meta":{"origin":39,"position":5},"title":"Depurando aplicativos Cordova com o Chrome","date":"junho 26, 2018","format":false,"excerpt":"Desde a vers\u00e3o 4.4 o Android permite fazer uma coisa realmente \u00fatil: depurar seu aplicativo WebView (leia-se\u00a0Cordova e afins) usando o pr\u00f3prio Chrome. O YeAPF desde a vers\u00e3o 0.8.59 inclui o adb-debug que permite acompanhar a saida do console em tempo real. Isso ajuda muito mas tem vezes que o\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/39"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=39"}],"version-history":[{"count":3,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/39\/revisions"}],"predecessor-version":[{"id":89,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/39\/revisions\/89"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}